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

[经验分享] NoSQL----Redis 2.4--String

[复制链接]

尚未签到

发表于 2018-11-6 07:20:39 | 显示全部楼层 |阅读模式
  一、简介:string: 字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。在Redis中字符串类型的Value最多可以容纳的数据长度是512M.
  二、应用场景:
  实时记录网站每天的的PV和UV
  实时新浪微博每个账号关注和被关注人数。
  三、常用操作:
  1、set方法:
  set key value
  将key的值设为value。
  如果key已经存在,set就覆盖旧值。
  例如:redis> set color red
  redis> get color
  "red"
  redis> set color black
  redis> get color
  "black"
  2、setnx方法:
  setnx key value
  将key的值设为value,当且仅当key不存在。
  若key已经存在,则SETNX不覆盖旧值,即保持原值。
  SETNX是”SET if Not eXists”(如果不存在,则SET)的简写。
  例如:
  redis> SETNX job "programmer"
  (integer) 1  job设置成功
  redis> SETNX job "code-farmer"
  (integer) 0  job设置失败
  redis> GET job
  "programmer"  没有被覆盖
  3、setex方法:
  
  SETEX key seconds value
  将key的值设为value,并将key的生存时间设为seconds(以秒为单位)。
  如果key 已经存在,SETEX命令将覆盖旧值。
  注意:这个命令类似于以下两个命令:
  SET key value
  EXPIRE key seconds  # 设置生存时间
  不同之处是,SETEX是一个原子性(atomic)操作,关联值和设置生存时间两个动作会在同一时间内完成,该命令在Redis用作缓存时,非常实用。
  
  4、setrange方法:
  
  setrange key offset value
  用value参数覆写给定key所储存的字符串值,从下标offset开始。
  redis> set email haha@163.com
  redis> get email
  haha@163.com
  redis> setrange email 5 google.com
  redis> get email
  haha@google.com
  redis> setrange email 5 sina.cn
  redis> get email
  haha@sina.cncom
  5、mset方法:
  MSET key value [key value ...]
  同时设置一个或多个key-value对。
  当发现同名的key存在时,MSET会用新值覆盖旧值,如果你不希望覆盖同名key,请使用MSETNX命令。
  MSET是一个原子性(atomic)操作,所有给定key都在同一时间内被设置,某些给定key被更新而另一些给定key没有改变的情况,不可能发生。
redis> MSET date "2015.11.11" time "9.09a.m." weather "sunny"  
OK
  6、append方法:
  
  APPEND key value
  如果key已经存在并且是一个字符串,APPEND命令将value追加到key原来的值之后。
  如果key不存在,APPEND就简单地将给定key设为value,就像执行SET key value一样。
  
# 情况1:对不存在的key执行APPEND  

  
redis> EXISTS myphone  # 确保myphone不存在
  
(integer) 0
  

  
redis> APPEND myphone "mi"  # 对不存在的key进行APPEND,等同于SET myphone "mi"
  
(integer) 5 # 字符长度
  

  

  
# 情况2:对字符串进行APPEND
  

  
redis> APPEND myphone " - 1110"
  
(integer) 12  # 长度从5个字符增加到12个字符
  

  
redis> GET myphone  # 查看整个字符串
  
"mi - 1110"
  7、get方法:
  
  get key
  返回key所关联的字符串值。
  如果key不存在则返回特殊值nil。
  假如key储存的值不是字符串类型,返回一个错误,因为GET只能用于处理字符串值。
redis> GET animate  
(nil)
  

  
redis> SET animate "anohana"
  
OK
  

  
redis> GET animate
  
"anohana"
  8、mget方法:
  MGET key [key ...]
  返回所有(一个或多个)给定key的值。
  如果某个指定key不存在,那么返回特殊值nil。因此,该命令永不失败。
  9、getrange方法:
  GETRANGE key start end
  返回key中字符串值的子字符串,字符串的截取范围由start和end两个偏移量决定(包括start和end在内)。
  负数偏移量表示从字符串最后开始计数,-1表示最后一个字符,-2表示倒数第二个,以此类推。
  GETRANGE通过保证子字符串的值域(range)不超过实际字符串的值域来处理超出范围的值域请求。
  备注:在 SET greeting "hello, my friend"  
OK
  

  
redis> GETRANGE greeting 0 4  # 返回索引0-4的字符,包括4。
  
"hello"
  

  
redis> GETRANGE greeting -1 -5  # 不支持回绕操作,必须从前往后截取
  
""
  

  
redis> GETRANGE greeting -3 -1  # 负数索引
  
"end"
  

  
redis> GETRANGE greeting 0 -1  # 从第一个到最后一个
  
"hello, my friend"
  

  
redis> GETRANGE greeting 0 1008611  # 值域范围不超过实际字符串,超过部分自动被符略"hello, my friend"
  

  

  
GETSET key value
  
将给定key的值设为value,并返回key的旧值。
  
当key存在但不是字符串类型时,返回一个错误。
  

  
redis> GETSET mail xxx@google.com  # 因为mail之前不存在,没有旧值,返回nil
  
(nil)
  

  
redis> GETSET mail xxx@yahoo.com  # mail被更新,旧值被返回
  
"xxx@google.com"
  

  
strlen key
  
返回key所储存的字符串值的长度。
  
当key储存的不是字符串值时,返回一个错误。
  
当 key不存在时,返回0。
redis> SET mykey "Hello world"  
OK
  

  
redis> STRLEN mykey
  
(integer) 11
  

  
redis> STRLEN nonexisting # 不存在的key长度视为0
  
(integer) 0
  12、incr方法:
  INCR key
  将key中储存的数字值+1。
  如果key不存在,以0为key的初始值,然后执行INCR操作。
  如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
  本操作的值限制在64位(bit)有符号数字表示之内。
redis> SET page_view 20  
OK
  

  
redis> INCR page_view
  
(integer) 21
  

  
redis> GET page_view    # 数字值在Redis中以字符串的形式保存
  
"21"
  13、incrby方法:
  
  INCRBY key increment
  将key所储存的值加上增量increment。
  如果key不存在,以0为key的初始值,然后执行INCRBY命令。
  如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
  本操作的值限制在64位(bit)有符号数字表示之内。
  关于更多递增(increment)/递减(decrement)操作信息,参见INCR命令。
  
# 情况1:key存在且是数字值  

  
redis> SET rank 50  # 设置rank为50
  
OK
  

  
redis> INCRBY rank 20  # 给rank加上20
  
(integer) 70
  

  
redis> GET rank
  
"70"
  

  
redis> INCRBY rank -20  # 给rank加上-20
  
(integer) 50
  

  
# 情况2:key不存在
  

  
redis> EXISTS counter
  
(integer) 0
  

  
redis> INCRBY counter 30
  
(integer) 30
  

  
redis> GET counter
  
"30"
  

  

  
# 情况3:key不是数字值
  

  
redis> SET book "long long ago..."
  
OK
  

  
redis> INCRBY book 200
  
(error) ERR value is not an integer or out of range
  

  
key中储存的数字值-1。
  
如果key不存在,以0为key的初始值,然后执行DECR操作。
  
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
  
本操作的值限制在64位(bit)有符号数字表示之内。
  
关于更多递增(increment)/递减(decrement)操作信息,参见INCR命令。
情况1:对存在的数字值key进行DECR  

  
redis> SET failure_times 10
  
OK
  

  
redis> DECR failure_times
  
(integer) 9
  

  

  
# 情况2:对不存在的key值进行DECR
  

  
redis> EXISTS count
  
(integer) 0
  

  
redis> DECR count
  
(integer) -1
  

  

  
# 情况3:对存在但不是数值的key进行DECR
  

  
redis> SET company YOUR_CODE_SUCKS.LLC
  
OK
  

  
redis> DECR company
  
(error) ERR value is not an integer or out of range
15、decrby方法:  DECRBY key decrement
  将key所储存的值减去减量decrement。
  如果key不存在,以0为key的初始值,然后执行DECRBY操作。
  如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
  本操作的值限制在64位(bit)有符号数字表示之内。
  关于更多递增(increment)/递减(decrement)操作信息,参见INCR命令
# 情况1:对存在的数值key进行DECRBY  

  
redis> SET count 100
  
OK
  

  
redis> DECRBY count 20
  
(integer) 80
  

  

  
# 情况2:对不存在的key进行DECRBY
  

  
redis> EXISTS pages
  
(integer) 0
  

  
redis> DECRBY pages 10
  
(integer) -10
  

  
redis> DECRBY pages -20
  
(integer) 10



运维网声明 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-631244-1-1.html 上篇帖子: 编译安装Redis Stable最新版本 下篇帖子: NoSQL----Redis 2.4--Hash
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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