设为首页 收藏本站
查看: 959|回复: 0

[经验分享] Redis-2 数据类型详解之String和key space操作

[复制链接]

尚未签到

发表于 2016-12-21 08:29:06 | 显示全部楼层 |阅读模式
1. String 类型
String 类型是Redis 中最简单的值类型,这也是memcached 中唯一的数据类型。所以对于新手来说在Redis中使用也是非常自然的。
因为Redis的Key是字符串,值也可以是String类型的,所以,我们可以把两个字符串匹配在一起。字符串类型也有很多使用案例,比如缓存HTML片段或者页面。
 
首先来一个基本的例子:
Java代码 


  • 127.0.0.1:6666> set mykey shang  
  • OK  
  • 127.0.0.1:6666> get mykey  
  • "shang"  
  • 127.0.0.1:6666>   

  
1. 如上所示,SET 和 SET 命令可以用来设置和获取字符串值。并且,SET 会替换掉对应key的任何已经存进的值。
Value 可以示任何种类的字符串(包括二进制数据),比如你可以为一个键存储 jpeg 图片。值最大不能超过512MB 。
 
SET 命令有一些又去的选项,他们作为额外的参数存在。比如,我可以让 SET 命令在键存在的时候失败,或者相反的,仅仅在key存在的时候才成功,如下所示:
Java代码 


  • 127.0.0.1:6666> set mykey henushang nx  
  • (nil)  
  • 127.0.0.1:6666> set mykey henushang xx  
  • OK  
  • 127.0.0.1:6666> set newmykey henushang xx  
  • (nil)  

 
 
虽然String 示Redis的基本值,但是你仍然可以对他们执行有趣的操作。例如,原子增长:
Java代码 


  • 127.0.0.1:6666> set mynum 100  
  • OK  
  • 127.0.0.1:6666> incr mynum  
  • (integer) 101  
  • 127.0.0.1:6666> incr mynum  
  • (integer) 102  
  • 127.0.0.1:6666> incrby mynum 48  
  • (integer) 150  

 2. INCR 命令把字符串值转化为整型,然后增加1,并且最后把获得的值设为新的值。还有一些类似的命令,比如:INCRBY、DECR 和 DECRBY 等。在内部他们除了一点点不同外,算是相同的命令。至于什么是原子的操作字符串,就不再多做解释。
 
3. 还有很多操作字符串的命令。比如 GETSET 命令,它为一个key设置一个新的值,并且返回原来的老值。
 
4. 在单个命令中设置或者检索多个键的值对于减少延迟时间也是非常有用的。因此而诞生了 MSET 和 MGET 命令:
Java代码 


  • 127.0.0.1:6666> mset a 10 b 20 c 30  
  • OK  
  • 127.0.0.1:6666> mget a b c  
  • 1"10"  
  • 2"20"  
  • 3"30"  

当使用 MGET 的时候,Redis返回一个值的数组。
 
2. 修改或查询键空间
有一些命令不是为某个类别而单独设计的,他们是为了与键空间(key space)交互的,因此,可以被用于任何类型的键。
例如,EXISTS 命令会返回1或者0以标志一个键在数据库中存在或者不存在。DEL 命令会删除一个键和与其相关联的值,无论值是什么类型的。
Java代码 


  • 127.0.0.1:6666> set mykey shang  
  • OK  
  • 127.0.0.1:6666> exists mykey  
  • (integer) 1  
  • 127.0.0.1:6666> del mykey  
  • (integer) 1  
  • 127.0.0.1:6666> exists mykey  
  • (integer) 0  
  • 127.0.0.1:6666> del mykey  
  • (integer) 0  

   
从上例中你可以看出,DEL 删除成功会返回1,删除失败会返回0。


有很多与键空间相关的命令,但是上面两个和TYPE 是重要的几个命令,TYPE 命令可以返回与某个键相关联的值的类型:
 Java代码 


  • 127.0.0.1:6666> set mykey x  
  • OK  
  • 127.0.0.1:6666> type mykey  
  • string  
  • 127.0.0.1:6666> del mykey  
  • (integer) 1  
  • 127.0.0.1:6666> type mykey  
  • none  
  • 127.0.0.1:6666> set mykey 1  
  • OK  
  • 127.0.0.1:6666> type mykey  
  • string  

 
由上例可以看出TYPE的作用,但是得注意一点,set key 1 的时候,Redis是把 1 当作字符串处理的,这个恰恰与上面解释 INCR 的时候的第一步是吻合的:先把字符串转为整形。
 
 3. Redis 过期:限制了生存时间的键
在讨论更加复杂的数据结构之前,我们需要讨论Redis的另一个与值类型无关的特性:Redis 过期(expires)。最基本的是你可以为一个 key 设置一个超时时间,它可以限制 key 的生存时间。当生存时间到的时候,这个 key 会自动的销毁,就好像用户调用了 DEL 命令一样。
 
快速浏览一下有关 Redis 过期的信息:

  • 可以使用秒或者毫秒作为精度;
  • 然而过期时间的决定是1毫秒;
  • 有关过期时间的信息是被复制的并且持久化到硬盘上的,当你的Redis 是关闭的时候,时间实际上已经过期(这意味着Redis 保存了一个过期的key)
  设置过期是非常简单的:
Java代码 


  • 127.0.0.1:6666> set mykey shang  
  • OK  
  • 127.0.0.1:6666> expire mykey 5  
  • (integer) 1  
  • 127.0.0.1:6666> get mykey  
  • "shang"  
  • 127.0.0.1:6666> get mykey  
  • (nil)  

  在两次 GET 调用中间那个key消失了,因为第二次调用已经超过了5秒。在上例中,使用EXPIRE 是为了设置过期时间(它也可以用作修改一个已经设置了过期时间的key的过期时间,正如PERSIST可以被用于移除过期时间使key可以永久的保存)。我们也可以使用其他Redis命令创建设置了过期时间的键,例如使用SET的选项:
Java代码 


  • 127.0.0.1:6666> set mykey 100 ex 10  
  • OK  
  • 127.0.0.1:6666> ttl mykey  
  • (integer) 7  

  上例中创建了一个值字符串的100的key,并且过期时间是10秒。然后调用TTL命令来查看key剩下的生存时间。
  想要使用毫秒精度来设置和查看过期时间,可以查看查看PEXPIRE 和 PTTL 命令,以及SET选项的全部列表。
  额。。。下面依然是我建的一个公众帐号,可以关注一下哦,谢谢
DSC0000.jpg

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-317116-1-1.html 上篇帖子: java spring框架中方法级redis的连接自动获取和释放实现 下篇帖子: 1,250,000,000 Key/Value Pairs in Redis 2.0.0-rc3 on a 32GB Machine【转】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表