1. package cn.com;
  2.  
  3. import java.text.ParseException;
  4. import java.util.List;
  5. import java.util.Set;
  6. import redis.clients.jedis.Jedis;
  7. import redis.clients.jedis.SortingParams;
  8. public class Redis_Key {
  9.  
  10. public static Jedis redis = new Jedis("localhost", 6379);// 连接redis
  11.  
  12. /**
  13. * 删除给定的一个或多个 key
  14. * 不存在的 key 会被忽略
  15. * */
  16. public static void del(){
  17. redis.set("name", "wangzhang");
  18. Long size=redis.del("name");
  19. Long size1=redis.del("name1");
  20. System.out.println("存在key 删除:"+size);
  21. System.out.println("不存在key 删除:"+size1);
  22. System.out.println("====================");
  23. redis.set("name", "wangzhang");
  24. redis.set("id", "123456");
  25. redis.set("address", "guangzhou");
  26.  
  27. Long size2=redis.del("name","id","address");
  28. System.out.println("size2:"+size2);
  29.  
  30. }
  31.  
  32. /**
  33. * 序列化给定 key,并返回被序列化的值,使用 RESTORE 命令可以将这个值反序列化为 Redis 键。
  34. * 版本:>= 2.6.0
  35. * 返回值:如果 key 不存在,那么返回 nil; 否则,返回序列化之后的值。
  36. * */
  37. public static void dump(){
  38. redis.set("name", "wangzhang");
  39. byte[] b=redis.dump("name");
  40. System.out.println("b:"+b);
  41.  
  42. byte [] c=redis.dump("name1");
  43. System.out.println("c:"+c);
  44. }
  45.  
  46. /**
  47. * RESTORE key ttl serialized-value
  48. * key:保存序列化后的值存储对象; ttl:生命周期;serialized-value:序列化值
  49. * 反序列化给定的序列化值,并将它和给定的 key 关联。
  50. * 参数 ttl 以毫秒为单位为 key 设置生存时间;如果 ttl 为 0 ,那么不设置生存时间。
  51. * */
  52. public static void restore(){
  53. redis.flushDB();//清除数据
  54. redis.set("name", "wangzhang");
  55.  
  56. //先序列化
  57. byte [] b= redis.dump("name");
  58. System.out.println("序列化之后:name:"+redis.get("name"));
  59.  
  60. String operation=redis.restore("name2", 0,b);
  61. System.out.println("反序列化之后:operation:"+operation);
  62. System.out.println("反序列化之后:value:"+redis.get("name2"));
  63. }
  64.  
  65. /**
  66. * 为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除。
  67. * */
  68. public static void expire() throws InterruptedException{
  69. redis.flushDB();//清除数据
  70. redis.set("name", "100");
  71. redis.expire("name", 2);
  72. System.out.println(" "+redis.get("name"));
  73. Thread.sleep(2000);
  74. System.out.println("休眠两秒后:"+redis.get("name"));
  75. }
  76.  
  77. /**
  78. * PEXPIREAT key milliseconds-timestamp
  79. * 这个命令和 EXPIREAT 命令类似,但它以毫秒为单位设置 key 的过期 unix 时间戳,而不是像 EXPIREAT 那样,以秒为单位。
  80. * 如果生存时间设置成功,返回 1 。
  81. * 如果生存时间设置成功,返回 1 。
  82. * 当 key 不存在或没办法设置生存时间,返回 0 。
  83. * */
  84. public static void pexpireAt() throws InterruptedException{
  85. redis.flushDB();//清除数据
  86. redis.set("name", "liliang");
  87. redis.pexpireAt("name",1457020000);
  88. System.out.println(" "+redis.get("name"));
  89. Thread.sleep(2000);
  90. System.out.println("休眠两秒后:"+redis.get("name"));
  91. }
  92.  
  93. /**
  94. * MIGRATE host port key destination-db timeout [COPY] [REPLACE]
  95. * 将 key 原子性地从当前实例传送到目标实例的指定数据库上,一旦传送成功, key 保证会出现在目标实例上,而当前实例上的 key 会被删除。
  96. * 这个命令是一个原子操作
  97. * @param host 传输目标主机
  98. * @param port 传输目标主机端口
  99. * @param key 传输的key
  100. * @param destinationDb 目标数据库 redis 默认有 16个库(0-15)
  101. * @param timeout 毫秒为格式,指定当前实例和目标实例进行沟通的最大间隔时间
  102. * */
  103. public static void migrate(){
  104. redis.flushDB();//清除数据
  105. redis.migrate("127.0.0.1", 6040, "name", 0, 1000);
  106. }
  107.  
  108. public static void keys(){
  109. redis.flushDB();//清除数据
  110. //初始化值
  111. redis.mset("one","1","two","2","three","3","four","4","five","5");
  112.  
  113. //匹配含有o的 key
  114. Set<String> set=redis.keys("*o*");
  115. for(String s:set){
  116. System.out.println("s:"+s);
  117. }
  118.  
  119. //匹配t开头后面是接两个长度的;注意t?? 查找到的事two 如是 t?则没有匹配的值
  120. System.out.println("=======================");
  121. Set<String> set1=redis.keys("t??");
  122. for(String s:set1){
  123. System.out.println("s:"+s);
  124. }
  125.  
  126. //查询全部
  127. System.out.println("=======================");
  128. Set<String> set2=redis.keys("*");
  129. for(String s:set2){
  130. System.out.println("s:"+s);
  131. }
  132.  
  133. }
  134.  
  135. /**
  136. * MOVE key db
  137. * 将当前数据库的 key 移动到给定的数据库 db(数据库索引) 当中。
  138. * 如果当前数据库(源数据库)和给定数据库(目标数据库)有相同名字的给定 key ,
  139. * 或者 key 不存在于当前数据库,那么 MOVE 没有任何效果。
  140. * */
  141. public static void move(){
  142. redis.flushDB();//清除数据
  143. redis.select(0);//显示指定当前的数据库
  144. redis.set("name", "liliang");
  145. System.out.println("未移动之前:"+redis.get("name"));
  146. redis.move("name", 1);
  147. System.out.println("移动到1库之后:"+redis.get("name"));
  148.  
  149. System.out.println("===============");
  150. redis.select(1);
  151. System.out.println("设置当前数据库为1库之后在查找:"+redis.get("name"));
  152.  
  153. }
  154.  
  155. public static void object(){
  156. //redis.ob
  157. redis.set("age", "12");
  158. String str=redis.objectEncoding("age");
  159. System.out.println("str:"+str);
  160.  
  161. System.out.println("===============");
  162. redis.set("age", "12555555555555");//因整形长度过长 自动转为字符串
  163. String str1=redis.objectEncoding("age");
  164. System.out.println("str:"+str1);
  165.  
  166. }
  167.  
  168. /**
  169. * 从当前数据库中随机返回(不删除)一个 key 。
  170. * */
  171. public static void RANDOMKEY(){
  172. redis.flushDB();//清除数据
  173. redis.set("age1", "1");
  174. redis.set("age2", "2");
  175. redis.set("age3", "3");
  176. String key=redis.randomKey();
  177. System.out.println("random key:"+key);
  178. }
  179.  
  180. /**
  181. * RENAME oldkey newkey
  182. * 1.当olekey 不存在报错
  183. * 2.当newkey 存在那么newkey上的值被oldkey 覆盖
  184. * @param olekey 要更名的key
  185. * @param newkey 更名后的key
  186. * */
  187. public static void rename(){
  188. redis.flushDB();//清除数据
  189. redis.set("name", "liliang");
  190. redis.set("username", "123456");
  191. redis.rename("name", "username");
  192.  
  193. System.out.println("=====更名之后=======");
  194. System.out.println("name:"+redis.get("name"));
  195. System.out.println("username:"+redis.get("username"));
  196. }
  197.  
  198. /**
  199. * RENAMENX key newkey
  200. * 当且仅当 newkey 不存在时,将 key 改名为 newkey ;如果存在不做任何操作。
  201. * 当 key 不存在时,返回一个错误。
  202. * */
  203. public static void renamenx(){
  204. redis.flushDB();//清除数据
  205. redis.set("name", "liliang");
  206. //redis.set("username", "123456");
  207. redis.renamenx("name", "username");
  208.  
  209. System.out.println("=====更名之后=======");
  210. System.out.println("name:"+redis.get("name"));
  211. System.out.println("username:"+redis.get("username"));
  212. }
  213.  
  214. public static void sort(){
  215. redis.flushDB();//清除数据
  216. redis.lpush("age", "1","15","13","5","16","2","3");
  217. System.out.println("==========排序前集合==========");
  218. List<String> list=redis.lrange("age", 0, -1);
  219. for(String s:list){
  220. System.out.println("s:"+s);
  221. }
  222.  
  223. //默认正序排序
  224. List<String> list1=redis.sort("age");
  225. System.out.println("==========从小到大排序后集合==========");
  226. for(String s:list1){
  227. System.out.println("s:"+s);
  228. }
  229.  
  230. //倒序的方式只能用以下方式
  231. SortingParams sortingParams=new SortingParams();
  232. sortingParams.desc();
  233. sortingParams.limit(0,7);
  234. List<String> list2=redis.sort("age",sortingParams);
  235. System.out.println("==========从大到小排序后集合==========");
  236. for(String s:list2){
  237. System.out.println("s:"+s);
  238. }
  239. }
  240.  
  241. /**
  242. * 返回 key 所储存的值的类型。
  243. * */
  244. public static void type(){
  245.  
  246. redis.flushDB();//清除数据
  247. redis.set("name", "liliang");
  248. redis.set("age", "18");
  249.  
  250. redis.lpush("list", "a","b","c");
  251. redis.hset("hset1", "username","zhangsan");
  252. redis.hset("hset1", "pwd", "123");
  253.  
  254. redis.sadd("set1", "1","5","7");
  255. System.out.println("=====取值所存储的类型=======");
  256. System.out.println(redis.type("name"));//string
  257. System.out.println(redis.type("age"));//string
  258. System.out.println(redis.type("list"));//list
  259. System.out.println(redis.type("hset1"));//hash
  260. System.out.println(redis.type("set1"));//set
  261. }
  262.  
  263. public static void main(String[] args) throws InterruptedException, ParseException {
  264. type();
  265. }
  266.  
  267. }

  

Redis学习笔记(1)-Key的更多相关文章

  1. Redis学习笔记(二)-key相关命令【转载】

    转自 Redis学习笔记(二)-key相关命令 - 点解 - 博客园http://www.cnblogs.com/leny/p/5638764.html Redis支持的各种数据类型包括string, ...

  2. redis 学习笔记(6)-cluster集群搭建

    上次写redis的学习笔记还是2014年,一转眼已经快2年过去了,在段时间里,redis最大的变化之一就是cluster功能的正式发布,以前要搞redis集群,得借助一致性hash来自己搞shardi ...

  3. Redis学习笔记~目录

    回到占占推荐博客索引 百度百科 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合). ...

  4. Redis学习笔记4-Redis配置详解

    在Redis中直接启动redis-server服务时, 采用的是默认的配置文件.采用redis-server   xxx.conf 这样的方式可以按照指定的配置文件来运行Redis服务.按照本Redi ...

  5. Redis学习笔记7--Redis管道(pipeline)

    redis是一个cs模式的tcp server,使用和http类似的请求响应协议.一个client可以通过一个socket连接发起多个请求命令.每个请求命令发出后client通常会阻塞并等待redis ...

  6. Redis学习笔记一:数据结构与对象

    1. String(SDS) Redis使用自定义的一种字符串结构SDS来作为字符串的表示. 127.0.0.1:6379> set name liushijie OK 在如上操作中,name( ...

  7. Redis学习笔记之ABC

    Redis学习笔记之ABC Redis命令速查 官方帮助文档 中文版本1 中文版本2(反应速度比较慢) 基本操作 字符串操作 set key value get key 哈希 HMSET user:1 ...

  8. (转)redis 学习笔记(1)-编译、启动、停止

    redis 学习笔记(1)-编译.启动.停止   一.下载.编译 redis是以源码方式发行的,先下载源码,然后在linux下编译 1.1 http://www.redis.io/download 先 ...

  9. Redis学习笔记(三)Redis支持的5种数据类型的总结

    继续Redis学习笔记(二)来说说剩余的三种数据类型. 三.列表类型(List) 1.介绍 列表类型可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的一段片段.列表类型内部是 ...

随机推荐

  1. c#知识总结2

    四.C#类型转换 类型转换就是把一种类型转换成为另一种类型. 隐式类型转换:c#默认的以安全方式进行的转换.例如小整数类型转换为大整数类型.派生类转换为基类 显式类型转换:用户使用的预定义的函数显式完 ...

  2. Redis Key 命令

      Redis Key 命令     del key1 key2 - keyn 删除键为key1,key2-keyn,空格分隔. persist key 移除给定 key 的生存时间,将这个 key ...

  3. POJ3581 Sequence(后缀数组)

    题意:给一个串,串的第一个字符比后面的都大,要把它分成三段,然后反转每一段,求能得到的字典序最小的串是什么. 首先,第一段是可以确定的:把原串反转,因为第一个字符是最大的,它是唯一的,不存在反转串的后 ...

  4. UVa11732 "strcmp()" Anyone?(Trie树+孩子兄弟表示法)

    我的做法是先建字典树,统计每个结点出现次数和相同字符串个数,每个结点对答案的贡献就是2*C(次数,2),然后再分别讨论相同字符串和不同字符串对答案的贡献. 另外这题主要就是Trie树的孩子兄弟表示法: ...

  5. 新旧各版本的MySQL可以从这里下载

    http://downloads.mysql.com/archives/

  6. 【BZOJ】1146: [CTSC2008]网络管理Network(树链剖分+线段树套平衡树+二分 / dfs序+树状数组+主席树)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1146 第一种做法(时间太感人): 第二种做法(rank5,好开心) ================ ...

  7. 全面解析Linux数字文件权限

    全面解析Linux数字文件权限 来源:   时间:2013-09-04 20:35:13   阅读数:11433 分享到:0 [导读] 在刚开始接触Linux时对于文件权限的理解并不是很透彻,这里详细 ...

  8. java数据类型定义与输出

    JAVA数据类型分基本数据类型和引用数据类型. 一.基本数据类型 Java里面包含8个基本数据类型,分别是: boolean.byte.char.short.int.float.douboe.long ...

  9. [ZZ] D3D中的模板缓存(3)

    http://www.cppblog.com/lovedday/archive/2008/03/25/45334.html http://www.cppblog.com/lovedday/ D3D中的 ...

  10. twitter storm源码走读之1 -- nimbus启动场景分析

    欢迎转载,转载时请注明作者徽沪一郎及出处,谢谢. 本文详细介绍了twitter storm中的nimbus节点的启动场景,分析nimbus是如何一步步实现定义于storm.thrift中的servic ...