Redis之五种数据类型

0 阅读7分钟

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(最大值)做汇总,默认值是sum
    
    127.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"