目录
3. 数据类型命令及落地应用
3.1 备注
3.2 Redis字符串(String)
单值单value
多值操作
获取指定区间范围内的值
数值增减
获取字符串长度和内容追加
分布式锁
getset(先get后set)
3.3 Redis列表(List)
简单说明
单key 多value
3.4 Redis哈希(Hash)
KV模式不变,但是V是一个键值对
3. 数据类型命令及落地应用
3.1 备注
命令不区分大小写,而key是区分大小写的
永远的帮助命令,help @类型
help @
3.2 Redis字符串(String)
单值单value
set key value
SET命令有EX、PX、NX、XX以及KEEPTTL五个可选参数
-
EX seconds:以秒为单位设置过期时间
-
Px milliseconds: 以毫为单位设置过期时间
-
EXAT timestamp:设置以秒为单位的UNIX时间戳所对应的时间为过期时间
-
PXAT milliseconds-timestamp:设置以毫秒为单位的UNIX时间戳所对应的时间为过期时间
-
NX:键不存在的时候设置键值
-
XX:键存在的时候设置键值
-
KEEPTTL:保留设置前指定键的生存时间
-
GET:返回指定键原本的值,若键不存在时返回ni1
最常用的是
set key value
keepttl
get key
多值操作
设置多个key value
mset k1 v1 k2 v2 k3 v3
获取多个值
mget k1 k2 k3
获取指定区间范围内的值
-
getrange/setrange
#获取全部
getrange 0 -1
set k1 abcd1234
setrange k1 1 xxyy
#输出
axxyy234
数值增减
一定是数字才能加减
-
incr key / decr key
-
incrby key / decrby key
set k1 100
get k1 #输出100
incr k1 #输出101
set k1 100
get k1 #输出100
incrby k1 3 #输出103
incrby k1 5 #输出108
set k1 100
get k1 #输出100
decr k1 #输出99
set k1 100
get k1 #输出100
decrby k1 5 #输出95
获取字符串长度和内容追加
-
strlen key
-
append key value
set k1 abcd
get k1 #输出“abcd”
strlen k1 #输出 (integer)4
append k1 xxxx
get k1 #输出 “abcdxxxx”
分布式锁
-
setnx key value
-
setex(set with expire)键秒值/setnx(set if not exist)
getset(先get后set)
3.3 Redis列表(List)
简单说明
一个双端链表的结构,容量是2的32次方减1个元素,大概40多亿,主要功能有push/pop等,一般用在栈、队列、消息队列等场景。
left、right都可以插入添加;
如果键不存在,创建新的链表:
如果键已存在,新增内容;
如果值全移除,对应的键也就消失了。
-
它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差
单key 多value
微信公众号订阅的消息 一个人 订阅了多个公众号 中有多个消息
-
lpush / rpush / lrange
lpush list1 1 2 3 4 5 #输出 5
rpush list2 11 22 33 44 55 #输出 5
type list1 #输出 list
lrange list1 0 -1 #输出 5 4 3 2 1
lrange list2 0 -1 #输出 11 22 33 44 55
-
lpop / rpop
lpush list1 1 2 3 4 5 #输出 5
lrange list1 0 -1 #输出 5 4 3 2 1
lpop list1 #输出 5(从左边弹)
lrange list1 0 -1 #输出 4 3 2 1
rpop list1 #输出 1(从右边弹)
lrange list1 0 -1 #输出 4 3 2
-
lindex,按照索引下标获得元素的个数(从上到下)
lrange list1 0 -1 #输出 4 3 2
lindex list1 0 #输出 4
-
llen,获取列表中元素的个数
llen list1 #输出 3
llen list2 #输出 5
-
lrem key 数字N 给定值v1
删除N个值等于v1的元素
list允许有重复的元素
del list1
lpush list1 1 1 1 1 2 2 2 3 3 4 5 #输出 11
lrang list1 0 -1 #输出 5 4 3 3 2 2 2 1 1 1 1
lrem list1 3 1
lrang list1 0 -1 #输出 5 4 3 3 2 2 2 1
-
ltrim key 开始index 结束index,截取指定范围的值后在赋值给key
lrang list1 0 -1 #输出 5 4 3 3 2 2 2 1
ltrim list1 4 7 #输出 ok
lrang list1 0 -1 #输出 2 2 2 1
-
rpoplpush 源列表 目的列表
移除列表的最后一个元素,并将该元素添加到另一个列表并返回
lrang list1 0 -1 #输出 2 2 2 1
lrang list2 0 -1 #输出 11 22 33 44 55
rpoplpush list1 list2 #输出 1
lrang list1 0 -1 #输出 2 2 2
lrang list2 0 -1 #输出 1 11 22 33 44 55
-
lset key index value
lrang list1 0 -1 #输出 2 2 2
lset list1 1 mysql #输出 ok
lrang list1 0 -1 #输出 2 mysql 2
-
linsert key before / after 已有值 插入的新值
lrang list1 0 -1 #输出 2 mysql 2
linsert list1 mysql java
lrang list1 0 -1 #输出 2 java mysql 2
3.4 Redis哈希(Hash)
KV模式不变,但是V是一个键值对
Map < String , Map < Object , Object > >
-
hset / hget / hmset / hgetall / hdel
hset user:001 id 11 name zs age 25 #输出 3
hget user:001 id #输出 11
hget user:001 name #输出 zs
hmset user:001 id 12 name ls age 26 #输出 ok
hmget user:001 id name age #输出 12 ls 26
hgetall user:001 #输出 id 12 name ls age 26
hdel user:001 age #输出 1
hgetall user:001 #输出 id 12 name ls
-
hlen
hgetall user:001 #输出 id 12 name ls
hlen user:001 #输出 2
-
hexists key 在key里面的某个值的key
hexists user:001 name #输出 1
hexists user:001 score #输出 0
-
hkeys / hvals
hkeys user:001 #输出 id name
hvals user:001 #输出 12 ls
-
hincrby / hincrbyfloat 对数据相关的操作
hest user:001 age 25 score 99.5 #输出 2
hgetall user:001 #输出 id 12 name ls age 25 score 99.5
hincrby user:001 age 2 #输出 27
hgetall user:001 #输出 id 12 name ls age 27 score 99.5
hincrbyfloat user:001 score 0.5 #输出 100
hgetall user:001 #输出 id 12 name ls age 27 score 100
-
hsetnx
不存在 输出1 并添加
存在 输出0
hsetnx user:001 class 1 #输出 1
hsetnx user:001 class 1 #输出 0