Redis数据结构之String

打印 上一主题 下一主题

主题 1911|帖子 1911|积分 5733

1.概述


  • String是最常用的数据类型,一个key对应一个value。
  • String是二进制安全的,可以包含任何数据(比方图片和序列化对象),支持序列化。
  • 单个Value最大512MB。

2.常见操纵

2.1 SET/GET

语法:
[ ]是可选的参数
  1. SET key value [NX | XX] [GET] [EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]
复制代码
SET命令有EX、PX、NX、XX以及KEEPTTL五个可选参数,其中KEEPTTL为6.0版本添加的可选参数,其它为2.6.12版本添加的可选参数。

  • EX seconds 以秒为单位设置逾期时间
  • PX milliseconds 以毫秒为单位设置逾期时间
  • EXAT timestamp 设置以秒为单位的UNIX时间戳所对应的时间为逾期时间
  • PXAT milliseconds-timestamp 设置以毫秒为单位的UNIX时间戳所对应的时间为逾期时间
  • NX 键不存在的时候设置键值
  • XX 键存在的时候设置键值
  • KEEPTTL 保存设置前指定键的生存时间
  • GET 返回指定键原本的值,若键不存在时返回nil
SET命令使用EX、PX、NX参数,其效果等同于SETEX、PSETEX、SETNX命令。根据官方文档的描述,将来版本中SETEX、PSETEX、SETNX命令可能会被镌汰。
EX,NX可用于分布式锁。
案例:最常用的set/get
  1. 127.0.0.1:6379> set k1 v1
  2. OK
  3. 127.0.0.1:6379> get k1
  4. "v1"
复制代码
案例:NX,键不存在才华创建,否则不能创建
  1. 127.0.0.1:6379> set k1 v1 nx
  2. OK
  3. 127.0.0.1:6379> set k1 v1 nx
  4. (nil)
复制代码
案例:XX,已存在的才创建,否则不能创建
  1. 127.0.0.1:6379> set k1 v1
  2. OK
  3. 127.0.0.1:6379> set k1 v1 xx
  4. OK
  5. 127.0.0.1:6379> get k2
  6. (nil)
  7. 127.0.0.1:6379> set k2 v2 xx
  8. (nil)
复制代码
案例:GET,设置新的值前先把旧的值返回
  1. 127.0.0.1:6379> set k1 v1
  2. OK
  3. 127.0.0.1:6379> set k1 v2 get
  4. "v1"
复制代码
案例:EX,10秒逾期
  1. 127.0.0.1:6379> set k1 v1 ex 10
  2. OK
  3. 127.0.0.1:6379> ttl k1
  4. (integer) 8
  5. 127.0.0.1:6379> ttl k1
  6. (integer) 6
  7. 127.0.0.1:6379> ttl k1
  8. (integer) 4
复制代码
set ex是原子操纵,和先set key value然后expire key是不同的,后者不是原子的
案例:PX,9000毫秒逾期
  1. 127.0.0.1:6379> set k1 v1 px 9000
  2. OK
  3. 127.0.0.1:6379> ttl k1
  4. (integer) 7
  5. 127.0.0.1:6379> ttl k1
  6. (integer) 5
  7. 127.0.0.1:6379> ttl k1
  8. (integer) 4
复制代码
案例:KEEPTTL
同一个key如果设置了新的值,又没有追加逾期时间,redis会令其立即逾期
  1. 127.0.0.1:6379> set k1 v1 ex 40
  2. OK
  3. 127.0.0.1:6379> ttl k1
  4. (integer) 37
  5. 127.0.0.1:6379> set k1 v2
  6. OK
  7. 127.0.0.1:6379> ttl k1
  8. (integer) -1
复制代码
如果必要续接逾期时间,就必要用到参数KEEPTTL,设置新值后,逾期时间会被续接下来
  1. 127.0.0.1:6379> set k1 v1 ex 50  
  2. OK
  3. 127.0.0.1:6379> ttl k1
  4. (integer) 46
  5. 127.0.0.1:6379> set k1 v1 keepttl
  6. OK
  7. 127.0.0.1:6379> ttl k1
  8. (integer) 33
复制代码
2.2 MSET/MGET/MSETNX

案例:MSET同时设置和获取多个值
  1. 127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
  2. OK
  3. 127.0.0.1:6379> mget k1 k2 k3
  4. 1) "v1"
  5. 2) "v2"
  6. 3) "v3"
复制代码
案例 MSETNX,同时设置多个key的值,且key不存在才设置,只会同时乐成或同时失败
失败,因为k1已经存在,k1没有乐成修改,k2也根本存不进去
  1. 127.0.0.1:6379> flushdb
  2. OK
  3. 127.0.0.1:6379> set k1 v1
  4. OK
  5. 127.0.0.1:6379> msetnx k1 a1 k2 v2
  6. (integer) 0
  7. 127.0.0.1:6379> get k1
  8. "v1"
  9. 127.0.0.1:6379> get k2
  10. (nil)
复制代码
乐成,k1,k2都不存在,全部添加乐成
  1. 127.0.0.1:6379> flushdb
  2. OK
  3. 127.0.0.1:6379> msetnx k1 v1 k2 v2
  4. (integer) 1
  5. 127.0.0.1:6379> mget k1 k2
  6. 1) "v1"
  7. 2) "v2"
复制代码
2.3 GETRANGE/SETRANGE

GETRANGE,类似Java中的substring(),字符串截取, 0到-1代表不截取
案例:
  1. 127.0.0.1:6379> set k1 abcdefg
  2. OK
  3. 127.0.0.1:6379> getrange k1 0 -1
  4. "abcdefg"
  5. 127.0.0.1:6379> getrange k1 1 4
  6. "bcde"
复制代码
SETRANGE,从第几个字符开始设置新的内容
案例:
  1. 127.0.0.1:6379> set k1 abcdefg
  2. OK
  3. 127.0.0.1:6379> setrange k1 1 xxyy
  4. (integer) 7
  5. 127.0.0.1:6379> get k1
  6. "axxyyfg"
复制代码
2.4 INCR(BY)/DECR(BY)

数值的加减,值一定要是数字才华进行这个操纵
案例:INCR,每次执行加1
  1. 127.0.0.1:6379> set k1 100
  2. OK
  3. 127.0.0.1:6379> get k1
  4. "100"
  5. 127.0.0.1:6379> incr k1
  6. (integer) 101
  7. 127.0.0.1:6379> incr k1
  8. (integer) 102
  9. 127.0.0.1:6379> incr k1
  10. (integer) 103
  11. 127.0.0.1:6379> incr k1
  12. (integer) 104
复制代码
案例:INCRBY,修改步长为5
  1. 127.0.0.1:6379> set k1 0
  2. OK
  3. 127.0.0.1:6379> incrby k1 5
  4. (integer) 5
  5. 127.0.0.1:6379> incrby k1 5
  6. (integer) 10
  7. 127.0.0.1:6379> incrby k1 5
复制代码
案例:DECR,递减1,DECRBY同理
  1. 127.0.0.1:6379> set k1 100
  2. OK
  3. 127.0.0.1:6379> decr k1
  4. (integer) 99
  5. 127.0.0.1:6379> decr k1
  6. (integer) 98
  7. 127.0.0.1:6379> decr k1
  8. (integer) 97
复制代码
  1. 127.0.0.1:6379> set k1 100
  2. OK
  3. 127.0.0.1:6379> decrby k1 5
  4. (integer) 95
  5. 127.0.0.1:6379> decrby k1 5
  6. (integer) 90
  7. 127.0.0.1:6379> decrby k1 5
  8. (integer) 85
复制代码
2.5 STRLEN

字符串长度
语法
  1. strlen key
复制代码
案例
  1. 127.0.0.1:6379> set k1 aaa
  2. OK
  3. 127.0.0.1:6379> strlen k1
  4. (integer) 3
复制代码
2.6 APPEND

字符串追加
语法
  1. APPEND key value
复制代码
案例
  1. 127.0.0.1:6379> set k1 aaa
  2. OK
  3. 127.0.0.1:6379> append k1 bbb
  4. (integer) 6
  5. 127.0.0.1:6379> get k1
  6. "aaabbb"
复制代码
2.7 GETSET

getset,顾名思义,先取值在设置新的值进去,和set key value get命令相同
  1. 127.0.0.1:6379> set k1 v1
  2. OK
  3. 127.0.0.1:6379> getset k1 v2
  4. "v1"
  5. 127.0.0.1:6379> get k1
  6. "v2"
复制代码
3.小结

字符串是一个最基本的数据结构,可用于分布式锁,点赞数量统计等场景。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王柳

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表