package com.ztest.redis;

import java.util.List;

import redis.clients.jedis.Jedis;

import com.sun.istack.internal.logging.Logger;
import com.ztest.redis.util.JedisConnectionUtil; /**
*
* @author yafei.lv
*redis异步???
*/
public class JedisKeyTestTwo {
private final static Logger logger = Logger.getLogger(JedisKeyTestOne.class); public static void keyTest(){
Jedis jedis = null;
try{ jedis = JedisConnectionUtil.initJedis();
// 0.flushDb 和 flush all
/* 一个端口一个库?
* flush all : 清空整个 Redis 服务器的数据 (删除所有数据库的所有 key )。此命令从不失败。时间复杂度: 尚未明确.返回值: 总是返回 OK 。
* flush db : 清空当前数据库中的所有 key。此命令从不失败。时间复杂度: O(1)。返回值: 总是返回 OK 。
*/ jedis.flushDB(); // 1.migrate 将key和value原子性地从当前实例,传送到目标实例的指定库上,一旦传送成功,key保证会出现在目示实例上,当前会被删除
//是原子操作、阻塞
/*
* @Redis命令:migrate host port key destiontion-db timeout
*
* @例子:把6379的redis里面的key移到6378里面
* migrate 127.0.0.1 6378 lvyf 0(库名) 1000
*/ // 2.move 将当前数据库key移动到指定数据库中,如果当前数据库 (源数据库) 和给定数据库 (目标数据库) 有相同名字的给定 key ,或者 key 不存在于当前
//数据库,那么 MOVE 没有任何效果
/*
* @Redis命令: move key db
* 时间复杂度: O(1)
返回值: 移动成功返回 1 ,失败则返回 0 @例子:move lvyf 0
*/
jedis.set("lvyf1", "123");
jedis.move("lvyf1",1); jedis.flushAll(); // 3. object OBJECT 命令允许从内部察看给定 key 的 Redis 对象
jedis.set("lvyf","1q23");
jedis.objectEncoding("lvyf");
Long count = jedis.objectRefcount("lvyf");
logger.info("obj==" + jedis.get("lvyf")+",count=="+count); // 4. persist 移除key的存活时间
/*
* @Redis命令 persist lvyf
*/
jedis.expire("lvyf", 5);
jedis.persist("lvyf"); // 5. pexpire 给key设置存活时间,单位毫秒
/*
@Redis命令 pexpire lvyf 1000 时间段
*/ // 6.
/*
* PEXPIREAT key milliseconds-timestamp
这个命令和EXPIREAT 命令类似,但它以毫秒为单位设置 key 的过期 unix 时间戳,而不是像EXPIREAT
那样,以秒为单位 @Redis命 PEXPIREAT lvyf 140999887766655 ,某一时间点
*/ // 7. pttl 它以毫秒为单位返回 key 的剩余生存时间
/*
* @Redis命令 pttl lvyf
*/ // 8. randomkey 从当前数据库中随机返回 (不删除) 一个 key
/*
* @Redis命令 randomkey
*/
jedis.flushAll();
jedis.set("orange", "1");
jedis.set("apple", "2");
jedis.set("banana", "3"); logger.info("randomKey==" + jedis.randomKey()); // 9. rename 修改key
/*
* @Redis命令: rename key newkey
* 当 key 和 newkey 相同,或者 key 不存在时,返回一个错误。
当 newkey 已经存在时,RENAME 命令将覆盖旧值。
* 从当前数据库中随机返回 (不删除) 一个 key
*/
jedis.flushAll();
jedis.set("1", "orange");
jedis.set("2","apple");
logger.info("修改前 key是2的value==" + jedis.get("2")); String result = jedis.rename("1", "2");
logger.info("修改结果==" + result + "修改后key是2的value==" + jedis.get("2")); // 10.renamenx 当且仅当newkey 不存在时,才会修改
/*
* @Redis命令 renamenx lvyf lvyf1
* 时间复杂度: O(1)
返回值:
修改成功时,返回 1 。
如果 newkey 已经存在,返回 0 。
*/
jedis.flushAll();
jedis.set("1", "orange");
jedis.set("2","apple");
logger.info("修改前 key是2的value==" + jedis.get("2")); Long result1 = jedis.renamenx("1", "3");
logger.info("修改结果==" + result1 + "修改后key是2的value==" + jedis.get("2") + ",3=="+jedis.get("3")+",1=="+jedis.get("1")); // 11.restore
/*
* @Redis命令
* RESTORE key ttl serialized-value
*
* 反序列化给定的序列化值,并将它和给定的 key 关联。
参数 ttl 以毫秒为单位为 key 设置生存时间;如果 ttl 为 0 ,那么不设置生存时间
返回值:
如果反序列化成功那么返回 OK ,否则返回一个错误。 DUMP greeting 再看看!!!
\x00\x15hello, dumping world!\x06\x00E\xa0Z\x82\xd8r\xc1\xde"
# 将序列化数据 RESTORE 到另一个键上面
RESTORE greeting-again 0 "\x00\x15hello, dumping world!\x06\x00E\xa0Z\x82\xd8r\xc1\xde"
OK
*/ // 12. ttl 返回key的剩余生存时间 秒
jedis.flushAll();
jedis.set("lvyf", "123");
Long timeNoExpire = jedis.ttl("lvyf");
Long timeNotKeyExist = jedis.ttl("lvyafei1");
logger.info("timeNoExpire=="+timeNoExpire+",timeNotKeyExist=="+timeNotKeyExist);
jedis.set("lv", "123");
jedis.expire("lv", 10);
Thread.currentThread();
// Thread.sleep(1000*3);
Long rightTTl = jedis.ttl("lv");
logger.info("rightTTl=="+rightTTl); /*
* 13.type 返回key所存value类型
* TYPE key
返回 key 所储存的值的类型。
可用版本: >= 1.0.0
时间复杂度: O(1)
返回值:
none (key 不存在)
string (字符串)
list (列表)
set (集合)
zset (有序集)
hash (哈希表)
*/
jedis.flushAll();
jedis.set("lvyf", "123");
String type = jedis.type("lvyf");
logger.info("type=="+type+",not=="+jedis.type("123")); /*
* 14. sort 对指定key的value排序
*
* SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC | DESC]
[ALPHA] [STORE destination]
返回或保存给定列表、集合、有序集合 key 中经过排序的元素。
排序默认以数字作为对象,值被解释为双精度浮点数,然后进行比较。 时间复杂度:
O(N+M*log(M)),N 为要排序的列表或集合内的元素数量,M 为要返回的元素数量。
如果只是使用SORT 命令的 GET 选项获取数据而没有进行排序,时间复杂度 O(N)。
返回值:
没有使用 STORE 参数,返回列表形式的排序结果。
使用 STORE 参数,返回排序结果的元素数量。
*/
jedis.lpush("cost", "10","5","20","3");
List<String> sortResult = jedis.sort("cost");
for(String str : sortResult){
logger.info("str=="+ str);
} /*
* 15. SCAN
* 命令是一个基于游标的迭代器( cursor based iterator):SCAN 命令每次被调用之后,都会向用户返
回一个新的游标,用户在下次迭代时需要使用这个新游标作为SCAN 命令的游标参数,以此来延续之前的
迭代过程。
当SCAN 命令的游标参数被设置为 0 时,服务器将开始一次新的迭代,而当服务器向用户返回值为 0 的游
标时,表示迭代已结束 */ // for(int i = 0 ; i < 20 ; i++){
// jedis.set(i+"", i+"");
// } }catch(Exception e){
e.printStackTrace();
}finally{
if(jedis != null){
JedisConnectionUtil.returnJedis(jedis); //回收
}
} } public static void main(String[] args) {
keyTest();
}
}

redis-key2的更多相关文章

  1. [原]Redis主从复制各种环境下测试

    Redis 主从复制各种环境下测试 测试环境: Linux ubuntu 3.11.0-12-generic 2GB Mem 1 core of Intel(R) Core(TM) i5-3470 C ...

  2. 在redis中使用lua脚本让你的灵活性提高5个逼格

    在redis的官网上洋洋洒洒的大概提供了200多个命令,貌似看起来很多,但是这些都是别人预先给你定义好的,但你却不能按照自己的意图进行定制, 所以是不是感觉自己还是有一种被束缚的感觉,有这个感觉就对了 ...

  3. 二、Redis基本操作——String(实战篇)

    小喵万万没想到,上一篇博客,居然已经被阅读600次了!!!让小喵感觉压力颇大.万一有写错的地方,岂不是会误导很多筒子们.所以,恳请大家,如果看到小喵的博客有什么不对的地方,请尽快指正!谢谢! 小喵的唠 ...

  4. Redis简单案例(三) 连续登陆活动的简单实现

    连续登陆活动,或许大家都不会陌生,简单理解就是用户连续登陆了多少天之后,系统就会送一些礼品给相应的用户.最常见的 莫过于游戏和商城这些.游戏就送游戏币之类的东西,商城就送一些礼券.正值国庆,应该也有不 ...

  5. Atitit.redis操作总结

    Atitit.redis操作总结 1.1. 获取redis所有kv1 1.2. dbsize:返回当前数据库中key的数目 1 1.3. 一起吧所有key列出来1 1.4. Java连接redis   ...

  6. redis参考文档

    本文为之前整理的关于redis的文档,放到博客上一份,也方便我以后查阅. redis简介 Redis是一个开源的.高性能的.基于键值对的缓存与存储系统, 通过提供多种键值数据类型来适应不同场景下的缓存 ...

  7. 基础拾遗------redis详解

    基础拾遗 基础拾遗------特性详解 基础拾遗------webservice详解 基础拾遗------redis详解 基础拾遗------反射详解 基础拾遗------委托详解 基础拾遗----- ...

  8. redis数据结构存储Dict设计细节(redis的设计与实现笔记)

    说到redis的Dict(字典),虽说算法上跟市面上一般的Dict实现没有什么区别,但是redis的Dict有2个特殊的地方那就是它的rehash(重新散列)和它的字典节点单向链表. 以下是dict用 ...

  9. PHP中的数据库三、redis

    h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h ...

  10. 《Redis入门指南(第二版)》读书思考总结之Redis五大数据类型

    热身:系统级命令 1. 获得符合规则的键名列表 KEYS pattern 模式匹配 产品的缓存:product+"."+....;  => keys product* 订单的 ...

随机推荐

  1. Theano tutorial – basic type

    博客摘自:Deep learning 第二篇 婴儿学步 Theano如何做算数? import theano.tensor as T from theano import function x=T.d ...

  2. ES6之模版字符串

    ES6之模版字符串 最近在项目中使用了ES6的模版字符串,在这里加以总结. 1.之前我们也可以使用JavaScript输出模版字符串,通常是下面这样的: $("#result"). ...

  3. sql自带函数语句

    --取数值表达式的绝对值select abs(-41)      41select abs(41)       41select abs(-41.12)   41.12select abs(41.12 ...

  4. python处理中文(待补充)

    字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(en ...

  5. Python-层次聚类-Hierarchical clustering

    层次聚类关键方法#coding:UTF-8#Hierarchical clustering 层次聚类from E_distance import Euclidean_distance from yez ...

  6. Centos7安装Oracle12c

    环境: CentOS7@VMware12,分配资源:CPU:2颗,内存:4GB,硬盘空间:30GB Oracle12C企业版64位 过程纪要: root身份安装依赖包: compat-libstdc+ ...

  7. mysqli连接数据库的模板

    <?php $host="localhost"; $db_user="root"; //数据库用户 $db_pass=""; //数据 ...

  8. 自然语言9_NLTK计算中文高频词

    以下代码仅限于python2 NLTK计算中文高频词 >>> sinica_fd=nltk.FreqDist(sinica_treebank.words()) >>> ...

  9. 面试题目——《剑指Offer》

    1.把一个字符串转换成整数——<剑指Offer>P29 2.求链表中的倒数第k个结点——<剑指Offer>P30 3.实现Singleton模式——<剑指Offer> ...

  10. 和安全有关的那些事(非对称加密、数字摘要、数字签名、数字证书、SSL、HTTPS及其他)

    转自http://blog.csdn.net/bluishglc/article/details/7585965 对于一般的开发人员来说,很少需要对安全领域内的基础技术进行深入的研究,但是鉴于日常系统 ...