Redis五种数据类型
1、字符串
- 设置值
set key value [ex seconds] [px milliseconds] [nx|xx]
# ex seconds :为键设置秒级过期时间
# px milliseconds:为键设置毫秒级过期时间
# nx:键必须不存在才可以设置成功
# xx:键必须存在才可以设置成功
#设置键为hello值为suifeng的键值对
127.0.0.1:6379> set hello suifeng
OK
#设置10秒过期时间
127.0.0.1:6379> set hello suifeng ex 10
OK
#设置10000毫秒过期时间
127.0.0.1:6379> set hello suifeng px 10000
OK
#键hello已存在设置失败
127.0.0.1:6379> set hello suifeng nx
(nil)
#键hello已存在设置成功
127.0.0.1:6379> set hello redis xx
OK
- 获取值
get key
127.0.0.1:6379> get hello
"redis"
#值不存在
127.0.0.1:6379> get hello1
(nil)
- 批量设置值
mset key value [key value]
127.0.0.1:6379> mset a 1 b 2 c 3 d 4
OK
- 批量获取值
mget key [key ...]
127.0.0.1:6379> mget a b c d
1) "1"
2) "2"
3) "3"
4) "4"
#有键不存在
127.0.0.1:6379> mget a b c f
1) "1"
2) "2"
3) "3"
4) (nil)
- 计数
#自增操作
#值不是整数,返回错误
#值是整数,返回自增后的结果
#键不存在,按照值为0自增,返回结果为1
incr key
#值不存在
127.0.0.1:6379> exists hello
(integer) 0
127.0.0.1:6379> incr hello
(integer) 1
127.0.0.1:6379> incr hello
(integer) 2
#值不是整数
127.0.0.1:6379> set hello suifeng xx
OK
127.0.0.1:6379> incr hello
(error) ERR value is not an integer or out of range
#decr key 自减
#incrby key increment 自增指定数字
#decrby key decrement 自减指定数字
#incrbyfloat key increment 自增浮点数
- 追加值
append key value
127.0.0.1:6379> set hello hello xx
OK
127.0.0.1:6379> get hello
"hello"
127.0.0.1:6379> append hello world
(integer) 10
127.0.0.1:6379> get hello
"helloworld"
- 字符串长度
strlen key
127.0.0.1:6379> get hello
"helloworld"
127.0.0.1:6379> strlen hello
(integer) 10
- 设置并返回原值
getset key
127.0.0.1:6379> get hello
"helloworld"
127.0.0.1:6379> getset hello world
"helloworld"
127.0.0.1:6379> get hello
"world"
- 设置指定位置字符
setrange key offeset value
127.0.0.1:6379> get hello
"world"
127.0.0.1:6379> setrange hello 4 f
(integer) 5
127.0.0.1:6379> get hello
"worlf"
- 获取部分字符串
getrange key start end
127.0.0.1:6379> get hello
"worlf"
127.0.0.1:6379> getrange hello 0 3
"worl"
2、哈希
- 设置值
hset key field value
127.0.0.1:6379> hset user:1 name tom
(integer) 1
- 获取值
hget key field
127.0.0.1:6379> hget user:1 name
"tom"
- 删除field
hdel key field [field ...]
127.0.0.1:6379> hdel user:1 name
(integer) 1
- 统计field个数
hlen key
127.0.0.1:6379> hset user:1 name tom
(integer) 1
127.0.0.1:6379> hset user:1 age 18
(integer) 1
127.0.0.1:6379> hlen user:1
(integer) 2
- 批量设置/获取field-value
hmget key field [field ...]
hmset key field value [field value]
127.0.0.1:6379> hmset user:2 name suifeng age 18
OK
127.0.0.1:6379> hmget user:2 name age
1) "suifeng"
2) "18"
- 判断field是否存在
hexists key field
127.0.0.1:6379> hexists user:2 name
(integer) 1 #存在返回1 不存在返回0
- 获取所有filed
hkeys key
127.0.0.1:6379> hkeys user:2
1) "name"
2) "age"
- 获取所有value
hvals key
127.0.0.1:6379> hvals user:2
1) "suifeng"
2) "18"
- 获取所有field-value
hgetall key
127.0.0.1:6379> hgetall user:2
1) "name"
2) "suifeng"
3) "age"
4) "18"
- hincrby hincrbyfloat自增
hincrby key field
hincrbyfloat key field
- 计算value字符串长度(需要Redis3.2以上)
hstrlen key field
3、列表
-
添加操作
- 从右边插入元素
rpush key value [value ...] 127.0.0.1:6379> rpush list c b a (integer) 3- 从左边插入元素
lpush key value [value ...]- 向某个元素前或者后插入元素
linsert key before|after b value #在b前面添加d 127.0.0.1:6379> linsert list before b d (integer) 4 -
查找
- 获取指定范围内的元素列表
#从左到右 0 ~ N -1 从右到左 -1 ~ -N lrange key start end 127.0.0.1:6379> lrange list 1 3 1) "d" 2) "b" 3) "a"- 获取列表指定下标元素
lindex key index 127.0.0.1:6379> lindex list -1 "a"- 获取列表长度
llen key 127.0.0.1:6379> llen list (integer) 4 -
删除
- 从列表左侧弹出元素
lpop key 127.0.0.1:6379> lpop list "c" 127.0.0.1:6379> lrange list 0 -1 1) "d" 2) "b" 3) "a"- 从列表右侧弹出
rpop key- 删除指定元素
#count>0,从左到右,删除最多count个元素。 #count<0,从右到左,删除最多count绝对值个元素。 #count=0,删除所有。 lrem key count value- 按照索引范围修剪列表
ltrim key start end 127.0.0.1:6379> ltrim list 0 1 OK 127.0.0.1:6379> lrange list 0 -1 1) "d" 2) "b" -
修改
- 修改指定索引下标的元素
lset key index newValue 127.0.0.1:6379> lset list 0 a OK 127.0.0.1:6379> lrange list 0 -1 1) "a" 2) "b"
4、集合
-
集合内操作
- 添加元素
sadd key element [element ...] 127.0.0.1:6379> exists myset (integer) 0 127.0.0.1:6379> sadd myset a b c #返回添加成功个数 (integer) 3 127.0.0.1:6379> sadd myset a b (integer) 0- 删除元素
srem key element [element ...] 127.0.0.1:6379> srem myset a b #返回删除成功个数 (integer) 2 127.0.0.1:6379> srem myset suifeng (integer) 0- 统计个数
scard key 127.0.0.1:6379> scard myset (integer) 1- 判断元素是否在集合中
sismenber key element 127.0.0.1:6379> sismember myset a #在返回1不在返回0 (integer) 0 127.0.0.1:6379> sismember myset c (integer) 1- 随机返回指定个数元素,弹出元素不会从集合删除
srandmember key count 127.0.0.1:6379> sadd myset a b (integer) 2 127.0.0.1:6379> srandmember myset 2 1) "a" 2) "b"- 从集合中随机弹出元素,弹出元素会从集合删除
spop key 127.0.0.1:6379> spop myset "a" 127.0.0.1:6379> spop myset "c"- 获取所有元素
smembers key 127.0.0.1:6379> sadd myset a b c d (integer) 3 127.0.0.1:6379> smembers myset 1) "d" 2) "a" 3) "b" 4) "c" -
集合间操作
127.0.0.1:6379> sadd user:1 a b c d (integer) 4 127.0.0.1:6379> sadd user:2 c d f e (integer) 4- 多个集合的交集
sinter key [key ...] 127.0.0.1:6379> sinter user:1 user:2 1) "d" 2) "c"- 多个集合的并集
sunion key [key ...] 127.0.0.1:6379> sunion user:1 user:2 1) "e" 2) "d" 3) "f" 4) "b" 5) "a" 6) "c"- 多个集合的差集
sdiff key [key ...] 127.0.0.1:6379> sdiff user:1 user:2 1) "a" 2) "b"- 将交集,并集,差集的结果保存
sinterstore destination key [key ...] suionstore destination key [key ...] sdiffstore destination key [key ...] 127.0.0.1:6379> sinterstore user:1_2:inter user:1 user:2 (integer) 2 127.0.0.1:6379> smembers user:1_2:inter 1) "d" 2) "c"
5、有序集合
-
集合内
- 添加成员
zadd key score member [score member ...] 127.0.0.1:6379> zadd user:ranking 50 suifeng 2 tom 8 john 6 mary #返回成功个数 (integer) 4- Redis3.2为zadd命令添加了nx、xx、ch、incr四个选项
·nx:member必须不存在,才可以设置成功,用于添加。 ·xx:member必须存在,才可以设置成功,用于更新。 ·ch:返回此次操作后,有序集合元素和分数发生变化的个数 ·incr:对score做增加- 计算成员个数
zcard key 127.0.0.1:6379> zcard user:ranking (integer) 4- 查看某个成员分数
zscore key member 127.0.0.1:6379> zscore user:ranking tom #存在返回 "2" 127.0.0.1:6379> zscore user:ranking test #不存在返回 (nil) 127.0.- 计算成员的排名
zrank key member #从第到高 zrevrank key member #从高到低 127.0.0.1:6379> zrank user:ranking tom (integer) 0 127.0.0.1:6379> zrevrank user:ranking tom (integer) 3- 删除成员
zrem key member [member ...] 127.0.0.1:6379> zrem user:ranking tom #返回删除成功的个数 (integer) 1- 增加成员分数
zincrby key increment member 127.0.0.1:6379> zincrby user:ranking 10 suifeng "60"- 返回指定排名范围的成员
zrange key start end [withscores] zrevrange ket start end [withscores] 127.0.0.1:6379> zrange user:ranking 0 2 withscores 1) "mary" 2) "6" 3) "john" 4) "8" 5) "suifeng" 6) "60" 127.0.0.1:6379> zrevrange user:ranking 0 2 withscores 1) "suifeng" 2) "60" 3) "john" 4) "8" 5) "mary" 6) "6"- 返回指定分数范围的成员
zrangebyscore key min max [whitscores] [limit offset count] zrevrangebyscore key min max [whitscores] [limit offset count] 127.0.0.1:6379> zrangebyscore user:ranking 6 +inf withscores # inf 表示无穷大 1) "mary" 2) "6" 3) "john" 4) "8" 5) "suifeng" 6) "60"- 返回指定分数范围成员个数
zcount key min max 127.0.0.1:6379> zcount user:ranking 8 60 (integer) 2- 删除指定排名内的升序元素
zremrangebyrank key start end 127.0.0.1:6379> zremrangebyrank user:ranking 0 1 (integer) 2- 删除指定分数范围的成员
zremrangebyscore key min max 127.0.0.1:6379> zremrangebyscore user:ranking (5 +inf #删除5分以上的元素 (integer) 1 -
集合间操作
- 交集
zinterstore destination numkeys key [key ...] [weights weight [weight ...]][aggregate sum|min|max] ·destination:交集计算结果保存到这个键。 ·numkeys:需要做交集计算键的个数。 ·key[key...]:需要做交集计算的键 ·weights weight[weight...]:每个键的权重,在做交集计算时,每个键中的每个member会将自己分数乘以这个权重,每个键的权重默认是1。 ·aggregate sum|min|max:计算成员交集后,分值可以按照sum(和)、min(最小值)、max(最大值)做汇总,默认值是sum127.0.0.1:6379> zadd user:ranking:1 1 kris 91 mike 200 frank 220 tim 250 martin 251 tom (integer) 6 127.0.0.1:6379> zadd user:ranking:2 8 james 77 mike 625 martin 888 tom (integer) 4 127.0.0.1:6379> zinterstore user:ranking:1_inter_2 2 user:ranking:1 user:ranking:2 (integer) 3 127.0.0.1:6379> zrange user:ranking:1_inter_2 0 -1 withscores 1) "mike" 2) "168" 3) "martin" 4) "875" 5) "tom" 6) "1139" 127.0.0.1:6379> zinterstore user:ranking:1_inter_2 2 user:ranking:1 user:ranking:2 weights 1 0.5 aggregate max #让user:ranking:2的权重变为0.5,并且聚合效果使用max (integer) 3 127.0.0.1:6379> zrange user:ranking:1_inter_2 0 -1 withscores 1) "mike" 2) "91" 3) "martin" 4) "312.5" 5) "tom" 6) "444"- 并集
zunionstore destination numkeys key [key ...] [weights weight [weight ...]][aggregate sum|min|max] 127.0.0.1:6379> zunionstore user:ranking:1_union_2 2 user:ranking:1 user:ranking:2 (integer) 7 127.0.0.1:6379> zrange user:ranking:1_union_2 0 -1 withscores 1) "kris" 2) "1" 3) "james" 4) "8" 5) "mike" 6) "168" 7) "frank" 8) "200" 9) "tim" 10) "220" 11) "martin" 12) "875" 13) "tom" 14) "1139"