1.概述
- String是最常用的数据类型,一个key对应一个value。
- String是二进制安全的,可以包含任何数据(例如图片和序列化对象),支持序列化。
- 单个Value最大512MB。
2.常见操作
2.1 SET/GET
语法:
[ ]是可选的参数
- 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- 127.0.0.1:6379> set k1 v1
- OK
- 127.0.0.1:6379> get k1
- "v1"
复制代码 案例:NX,键不存在才能创建,否则不能创建- 127.0.0.1:6379> set k1 v1 nx
- OK
- 127.0.0.1:6379> set k1 v1 nx
- (nil)
复制代码 案例:XX,已存在的才创建,否则不能创建- 127.0.0.1:6379> set k1 v1
- OK
- 127.0.0.1:6379> set k1 v1 xx
- OK
- 127.0.0.1:6379> get k2
- (nil)
- 127.0.0.1:6379> set k2 v2 xx
- (nil)
复制代码 案例:GET,设置新的值前先把旧的值返回- 127.0.0.1:6379> set k1 v1
- OK
- 127.0.0.1:6379> set k1 v2 get
- "v1"
复制代码 案例:EX,10秒过期- 127.0.0.1:6379> set k1 v1 ex 10
- OK
- 127.0.0.1:6379> ttl k1
- (integer) 8
- 127.0.0.1:6379> ttl k1
- (integer) 6
- 127.0.0.1:6379> ttl k1
- (integer) 4
复制代码set ex是原子操作,和先set key value然后expire key是不同的,后者不是原子的
案例:PX,9000毫秒过期- 127.0.0.1:6379> set k1 v1 px 9000
- OK
- 127.0.0.1:6379> ttl k1
- (integer) 7
- 127.0.0.1:6379> ttl k1
- (integer) 5
- 127.0.0.1:6379> ttl k1
- (integer) 4
复制代码 案例:KEEPTTL
同一个key如果设置了新的值,又没有追加过期时间,redis会令其立即过期- 127.0.0.1:6379> set k1 v1 ex 40
- OK
- 127.0.0.1:6379> ttl k1
- (integer) 37
- 127.0.0.1:6379> set k1 v2
- OK
- 127.0.0.1:6379> ttl k1
- (integer) -1
复制代码 如果需要续接过期时间,就需要用到参数KEEPTTL,设置新值后,过期时间会被续接下来- 127.0.0.1:6379> set k1 v1 ex 50
- OK
- 127.0.0.1:6379> ttl k1
- (integer) 46
- 127.0.0.1:6379> set k1 v1 keepttl
- OK
- 127.0.0.1:6379> ttl k1
- (integer) 33
复制代码 2.2 MSET/MGET/MSETNX
案例:MSET同时设置和获取多个值- 127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
- OK
- 127.0.0.1:6379> mget k1 k2 k3
- 1) "v1"
- 2) "v2"
- 3) "v3"
复制代码 案例 MSETNX,同时设置多个key的值,且key不存在才设置,只会同时成功或同时失败
失败,因为k1已经存在,k1没有成功修改,k2也根本存不进去- 127.0.0.1:6379> flushdb
- OK
- 127.0.0.1:6379> set k1 v1
- OK
- 127.0.0.1:6379> msetnx k1 a1 k2 v2
- (integer) 0
- 127.0.0.1:6379> get k1
- "v1"
- 127.0.0.1:6379> get k2
- (nil)
复制代码 成功,k1,k2都不存在,全部添加成功- 127.0.0.1:6379> flushdb
- OK
- 127.0.0.1:6379> msetnx k1 v1 k2 v2
- (integer) 1
- 127.0.0.1:6379> mget k1 k2
- 1) "v1"
- 2) "v2"
复制代码 2.3 GETRANGE/SETRANGE
GETRANGE,类似Java中的substring(),字符串截取, 0到-1代表不截取
案例:- 127.0.0.1:6379> set k1 abcdefg
- OK
- 127.0.0.1:6379> getrange k1 0 -1
- "abcdefg"
- 127.0.0.1:6379> getrange k1 1 4
- "bcde"
复制代码 SETRANGE,从第几个字符开始设置新的内容
案例:- 127.0.0.1:6379> set k1 abcdefg
- OK
- 127.0.0.1:6379> setrange k1 1 xxyy
- (integer) 7
- 127.0.0.1:6379> get k1
- "axxyyfg"
复制代码 2.4 INCR(BY)/DECR(BY)
数值的加减,值一定要是数字才能进行这个操作
案例:INCR,每次执行加1- 127.0.0.1:6379> set k1 100
- OK
- 127.0.0.1:6379> get k1
- "100"
- 127.0.0.1:6379> incr k1
- (integer) 101
- 127.0.0.1:6379> incr k1
- (integer) 102
- 127.0.0.1:6379> incr k1
- (integer) 103
- 127.0.0.1:6379> incr k1
- (integer) 104
复制代码 案例:INCRBY,修改步长为5- 127.0.0.1:6379> set k1 0
- OK
- 127.0.0.1:6379> incrby k1 5
- (integer) 5
- 127.0.0.1:6379> incrby k1 5
- (integer) 10
- 127.0.0.1:6379> incrby k1 5
复制代码 案例:DECR,递减1,DECRBY同理- 127.0.0.1:6379> set k1 100
- OK
- 127.0.0.1:6379> decr k1
- (integer) 99
- 127.0.0.1:6379> decr k1
- (integer) 98
- 127.0.0.1:6379> decr k1
- (integer) 97
复制代码- 127.0.0.1:6379> set k1 100
- OK
- 127.0.0.1:6379> decrby k1 5
- (integer) 95
- 127.0.0.1:6379> decrby k1 5
- (integer) 90
- 127.0.0.1:6379> decrby k1 5
- (integer) 85
复制代码 2.5 STRLEN
字符串长度
语法案例- 127.0.0.1:6379> set k1 aaa
- OK
- 127.0.0.1:6379> strlen k1
- (integer) 3
复制代码 2.6 APPEND
字符串追加
语法案例- 127.0.0.1:6379> set k1 aaa
- OK
- 127.0.0.1:6379> append k1 bbb
- (integer) 6
- 127.0.0.1:6379> get k1
- "aaabbb"
复制代码 2.7 GETSET
getset,顾名思义,先取值在设置新的值进去,和set key value get命令相同- 127.0.0.1:6379> set k1 v1
- OK
- 127.0.0.1:6379> getset k1 v2
- "v1"
- 127.0.0.1:6379> get k1
- "v2"
复制代码 3.小结
字符串是一个最基本的数据结构,可用于分布式锁,点赞数量统计等场景。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |