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

[经验分享] redis学习笔记1--string

[复制链接]
累计签到:2 天
连续签到:2 天
发表于 2016-12-18 07:54:46 | 显示全部楼层 |阅读模式
  NOSQL的学习笔记:
  1.最基本的命令
  相信所有的NOSQL都会提供了命令:GET SET DEL 
  --------------------------------------
  redis 127.0.0.1:6379> set ee 10 
  OK
  redis 127.0.0.1:6379> get ee 
  "10"
  redis 127.0.0.1:6379> del ee              // 返回值 1:代表正确 0:代表错误
  (integer) 1
  redis 127.0.0.1:6379> get ee  
  (nil)
  redis 127.0.0.1:6379>
  --------------------------------------
  del key1 key2 key3  //可删除多个key
  扩展:
  1.1 SETNX:设置一个值,如果不存在的话,已经存在则不新增.对于SET的扩展。
  --------------------------------------
  redis 127.0.0.1:6379> set ee 10 
  OK
  redis 127.0.0.1:6379> setnx ee 20 
  (integer) 0
  redis 127.0.0.1:6379> get ee             // 因为之前存在ee  所以ee的值并没有发生变化。
  "10"
  redis 127.0.0.1:6379> setnx aa 20        //  aa 之前不存在,所以设置成功!
  (integer) 1
  redis 127.0.0.1:6379> get aa 
  "20"
  redis 127.0.0.1:6379> 
  --------------------------------------
  1.2 SETEX 设置过期时间,对于SET的扩展。若是已经存在,会覆盖原来的值。
  语法:
  SETEX key seconds value
  要求版本:>= 2.0.0
  实践:
  --------------------------------------
  redis 127.0.0.1:6379> setex ee 10 20 
  OK
  redis 127.0.0.1:6379> get ee 
  "20"
  redis 127.0.0.1:6379> ttl ee 
  (integer) 4
  redis 127.0.0.1:6379> ttl ee 
  (integer) 2
  redis 127.0.0.1:6379> ttl ee 
  (integer) -1
  redis 127.0.0.1:6379> get ee 
  (nil)
  redis 127.0.0.1:6379> 
  --------------------------------------
  限制:
  等同于一下语句,不过是一个原子性的操作,很适合做缓存使用。
  SET key value
  EXPIRE key seconds  # 设置生存时间
  1.3 PSETEX  对于 SETEX的再次扩展,唯一的区别是以毫秒为单位,不是以秒为单位
  语法:
  PSETEX key milliseconds value
  要求版本:>= 2.6.0
  实践:
  --------------------------------------
  redis 127.0.0.1:6379> setex ee 10 20 
  OK
  redis 127.0.0.1:6379> get ee 
  "20"
  redis 127.0.0.1:6379> ttl ee 
  (integer) 4
  redis 127.0.0.1:6379> ttl ee 
  (integer) 2
  redis 127.0.0.1:6379> ttl ee 
  (integer) -1
  redis 127.0.0.1:6379> get ee 
  (nil)
  redis 127.0.0.1:6379> 
  --------------------------------------
  1.4 MGET , MSET
  获取多个值或是设置多个值。
  MSET :替换旧值,原子操作。
  实践:
  --------------------------------------
  redis 127.0.0.1:6379> mset key1 haha key2 hehe 
  OK
  redis 127.0.0.1:6379> mget key1 key2 
  1) "haha"
  2) "hehe"
  redis 127.0.0.1:6379> 
  --------------------------------------
  1.5 MSETNX :设置多个key value,仅当key存在时  
  MSETNX key value [key value ...] 
  既然有setnx 就会有 这个命令
  实践:
  --------------------------------------
  redis 127.0.0.1:6379> msetnx key1 hehe key3 hoho              //因为这是一个原子的操作,所以key1已经存在,所以整体失败了!
  (integer) 0
  redis 127.0.0.1:6379> mget key1 key2 key3                     // 找不到所要的key3
  1) "haha"
  2) "hehe"
  3) (nil)
  redis 127.0.0.1:6379> 
  --------------------------------------
  1.6 GETSET
  GETSET key value 设置一个key的value,并获取设置前的值 。相当于重置功能。
  实践:
  --------------------------------------
  redis 127.0.0.1:6379> incrby count 10 
  (integer) 10
  redis 127.0.0.1:6379> getset count "5"    // 这个时候返回的是10,不是5
  "10"
  redis 127.0.0.1:6379> get count 
  "5"
  redis 127.0.0.1:6379> 
  --------------------------------------
  有时我们需要获取计数器的值,并且自动将其重置为0
  1.7 GETRANGE 获取存储在一个关键的一个子字符串
  实践:
  --------------------------------------
  redis 127.0.0.1:6379> set longworld "hello world!"
  OK
  redis 127.0.0.1:6379> getrange  longworld 0 5 
  "hello "
  redis 127.0.0.1:6379> getrange longworld -6 -1 
  "world!"
  redis 127.0.0.1:6379> 
  redis 127.0.0.1:6379> getrange longworld 5 100     // 超出范围的数据只取最后位
  " world!"
  --------------------------------------
  1.8 SETRANGE 类似于GETRANGE 覆盖在指定的偏移量开始的关键字符串的一部分
  实践:
  --------------------------------------
  redis 127.0.0.1:6379> setrange longworld 6 "redis"
  (integer) 12
  redis 127.0.0.1:6379> get longworld 
  "hello redis!"
  redis 127.0.0.1:6379> 
  --------------------------------------
  1.9 STRLEN  计算长度
  语法:
  STRLEN key 
  实践:
  --------------------------------------
  redis 127.0.0.1:6379> strlen longworld 
  (integer) 12
  --------------------------------------
  1.10 append 追加数据 ,setrange是截取字符
  语法:
  append key str
  实践:
  --------------------------------------
  redis 127.0.0.1:6379> append longworld "!!!"
  (integer) 15
  redis 127.0.0.1:6379> get longworld 
  "hello redis!!!!"
  --------------------------------------
  3.INCR :对于一个数值做递增,步伐是1。
  限制:
  只允许对于数值类型做操作,若是字符串类型则报错。
  是否线程安全:是的,是一个原子操作,不用担心多线程并发修改同一个值得问题。
  即不会出现一下情况:
  --------------------------------------
  Client A reads count as 10.
  Client B reads count as 10.
  Client A increments 10 and sets count to 11.
  Client B increments 10 and sets count to 11.
  --------------------------------------
  若是希望递增的频率不是1呢,那么使用INCRBY 
  --------------------------------------
  redis 127.0.0.1:6379> set ee 10 
  OK
  redis 127.0.0.1:6379> incrby ee 2     // 第三个参数是步频
  (integer) 12
  redis 127.0.0.1:6379> get ee 
  "12"
  --------------------------------------
  扩展:
  INCR &&INCRBY 对应的命令是 DECR ,DECRBY
  4.如何设置一个key的过期时间呢?
  简单,通过 EXPIRE来设置,通过TTL命令查看。
  --------------------------------------
  redis 127.0.0.1:6379> set ee 10
  OK
  redis 127.0.0.1:6379> expire ee 10          // 设置过期时间为10秒
  (integer) 1
  redis 127.0.0.1:6379> ttl ee
  (integer) 8
  redis 127.0.0.1:6379> ttl ee
  (integer) 3
  redis 127.0.0.1:6379> ttl ee                // 已经过期了。
  (integer) -1
  redis 127.0.0.1:6379> get ee                // 已经取不到值了  
  (nil)
  redis 127.0.0.1:6379>                  
  --------------------------------------
  若是不设置expire ,只是set 一个值后,再通过ttl 查看 返回结果是 -1 ,代表永远不过期。
  --------------------------------------
  redis 127.0.0.1:6379> set ee 10 
  OK
  redis 127.0.0.1:6379> ttl ee 
  (integer) -1
  redis 127.0.0.1:6379> get ee 
  "10"
  --------------------------------------
  一个整体结构图:
  图太大 还是自己贴地址吧:
  http://dl.iyunv.com/upload/picture/pic/115893/840bfd7b-765e-3884-8253-0c7b3ec9db4c.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-315715-1-1.html 上篇帖子: 配置多个redis 下篇帖子: 闲聊Redis【转】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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