Redis常用数据结构使用(二)

59 阅读4分钟

说明

个人网站:文章地址如下: www.invokerx.com/2022/03/16/…

几种常用redis命令操作学习记录

  • string
  • list
  • set
  • hash
  • zset

其他类型

  • geospatial
  • bitmaps
  • hyperloglog

当前说明set hash zset常用命令

正文

三、Set

set的特点是 数据不重复,可用来做一些成员唯一的场景的使用,支持交并补运算

sadd

smembers

sismember

127.0.0.1:6379[2]> sadd key member [member ...] #向无序的set中添加memeber return int,not add return 0
127.0.0.1:6379[2]> smembers key 								# 查看set中的memebers return members of set
127.0.0.1:6379[2]> sismember key member					# member is set's member or not ,return 0 | 1
127.0.0.1:6379[2]> sadd myset hello how are you
(integer) 4
127.0.0.1:6379[2]> smembers myset
1) "you"
2) "are"
3) "hello"
4) "how"
127.0.0.1:6379[2]> sadd myset you
(integer) 0
127.0.0.1:6379[2]> sismember myset you
(integer) 1
127.0.0.1:6379[2]> sismember myset world
(integer) 0

scard

127.0.0.1:6379[2]> scard key #获取并返回set中member的个数
127.0.0.1:6379[2]> scard myset
(integer) 4

srem

  • 可一次删除多个,删除的多个member中,如果有一个不在set中也会删除成功
127.0.0.1:6379[2]> srem key member [member ...]  #remove member from set
127.0.0.1:6379[2]> smembers myset
1) "hello"
2) "are"
3) "you"
4) "how"
127.0.0.1:6379[2]> srem myset world
(integer) 0
127.0.0.1:6379[2]> srem myset hello
(integer) 1
127.0.0.1:6379[2]> smembers myset
1) "are"
2) "you"
3) "how"
127.0.0.1:6379[2]> srem myset are world
(integer) 1
127.0.0.1:6379[2]> smembers myset
1) "you"
2) "how"

srandmember

set为无序不重复集合,随机抽一个元素,随机数

127.0.0.1:6379[2]> srandmember key [count]
127.0.0.1:6379[2]> smembers myset
1) "you"
2) "how"
3) "learner"
4) "I"
5) "new"
6) "a"
7) "am"
27.0.0.1:6379[2]> srandmember myset
"new"
127.0.0.1:6379[2]> srandmember myset
"how"
127.0.0.1:6379[2]> srandmember myset 2
1) "I"
2) "learner"
127.0.0.1:6379[2]> srandmember myset 2
1) "how"
2) "am"

spop

随机移除一个元素/抽奖?

127.0.0.1:6379[2]> spop key [count]
127.0.0.1:6379[2]> smembers myset
1) "you"
2) "how"
3) "learner"
4) "I"
5) "new"
6) "a"
7) "am"
127.0.0.1:6379[2]> spop myset
"how"
127.0.0.1:6379[2]> smembers myset
1) "you"
2) "learner"
3) "I"
4) "new"
5) "a"
6) "am"

smove

将一个memeber移动到另外的set中

127.0.0.1:6379[2]> smove source destination member
  • 移动的destination如果不存在,创建新的set
127.0.0.1:6379[2]> sadd myset "hello" "world" "redis"
(integer) 3
127.0.0.1:6379[2]> smove myset yourset hello
(integer) 1
127.0.0.1:6379[2]> smembers yourset
1) "hello"

sdiff sinter sunion

  • set的交并补
  • 适用场景:关注的人,粉丝, 好友,共同好友,二度好友(推荐好友)
127.0.0.1:6379[2]> sdiff key [key ...]
127.0.0.1:6379[2]> sinter key [key ...]
127.0.0.1:6379[2]> sunion key [key ...]
127.0.0.1:6379[2]> sadd key1 a b c d
(integer) 4
127.0.0.1:6379[2]> sadd key2 c d e f
(integer) 4
127.0.0.1:6379[2]> sdiff key key2
(empty list or set)
127.0.0.1:6379[2]> sdiff key1 key2
1) "b"
2) "a"
127.0.0.1:6379[2]> sinter key1
1) "b"
2) "d"
3) "c"
4) "a"
127.0.0.1:6379[2]> sinter key1 key2
1) "d"
2) "c"
127.0.0.1:6379[2]> sunion key1 key2
1) "b"
2) "f"
3) "d"
4) "e"
5) "c"
6) "a"

四、Hash

hash可存一些经常变动的对象的信息,比如用户信息(姓名,年龄等等)

hset hget hmset hmget hdel

127.0.0.1:6379[2]> hset key field value
127.0.0.1:6379[2]> hget key field
127.0.0.1:6379[2]> hmset key field value [field value ...]
127.0.0.1:6379[2]> hmget key field [field ...]
127.0.0.1:6379[2]> hgetall key
127.0.0.1:6379[2]> hdel key field [field ...]
127.0.0.1:6379[2]> hset myhash name maxu
(integer) 1
127.0.0.1:6379[2]> hset myhash age 20
(integer) 1
127.0.0.1:6379[2]> hget myhash age
"20"
127.0.0.1:6379[2]> hmset myhash from china location se13gh
OK
127.0.0.1:6379[2]> hmget myhash name age from
1) "maxu"
2) "20"
3) "china"
127.0.0.1:6379[2]> hgetall myhash
1) "name"
2) "maxu"
3) "age"
4) "20"
5) "from"
6) "china"
7) "location"
8) "se13gh"
127.0.0.1:6379[2]> hdel myhash age
(integer) 1
127.0.0.1:6379[2]> hgetall myhash
1) "name"
2) "maxu"
3) "from"
4) "china"
5) "location"
6) "se13gh"

Hlen

127.0.0.1:6379[2]> hlen key
127.0.0.1:6379[2]> hgetall myhash
1) "name"
2) "maxu"
3) "from"
4) "china"
5) "location"
6) "se13gh"
127.0.0.1:6379[2]> hlen myhash
(integer) 3

Hexists

127.0.0.1:6379[2]> HEXISTS key field
127.0.0.1:6379[2]> HEXISTS myhash name
(integer) 1
127.0.0.1:6379[2]> HEXISTS myhash age
(integer) 0
127.0.0.1:6379[2]> HEXISTS myhash1 age
(integer) 0
127.0.0.1:6379[2]> HEXISTS myhash1 name
(integer) 0

hkeys hvals

127.0.0.1:6379[2]> hkeys key
127.0.0.1:6379[2]> hvals key
127.0.0.1:6379[2]> hvals myhash
1) "maxu"
2) "china"
3) "se13gh"
127.0.0.1:6379[2]> hkeys myhash
1) "name"
2) "from"
3) "location"
127.0.0.1:637

Hincrby

127.0.0.1:6379[2]> hincrby key field increment
127.0.0.1:6379[2]> HINCRBY myhash age -1
(integer) 19
127.0.0.1:6379[2]> HINCRBY myhash age 1
(integer) 20

hsetnx

127.0.0.1:6379[2]> hsetnx key field value
127.0.0.1:6379[2]> hkeys myhash
1) "name"
2) "from"
3) "location"
4) "age"
127.0.0.1:6379[2]> hsetnx myhash name 20
(integer) 0
127.0.0.1:6379[2]> hsetnx myhash birthday 19920410
(integer) 1

五、zset

Zset 有序集合,在set基础上加一个score进行排序;

带权重计算或区分数据;排名等可以使用zset

zadd zrange zrevrange

127.0.0.1:6379[2]> zadd key [NX|XX] [CH] [INCR] score member [score member ...]
127.0.0.1:6379[2]> zrange key start stop [WITHSCORES]
127.0.0.1:6379[2]> ZREVRANGE key start stop [WITHSCORES]
127.0.0.1:6379[2]> zadd myzset 1 "maxu" 2 "hi" 0 "how are u"
(integer) 3
127.0.0.1:6379[2]> zrange myzset 0 -1 withscores
1) "how are u"
2) "0"
3) "maxu"
4) "1"
5) "hi"
6) "2"
127.0.0.1:6379[2]> zrange myzset 0 -1
1) "how are u"
2) "maxu"
3) "hi"

zrangebyscore

zrevrangebyscore

  • Zrangebyscore key min max只能从小到大排序
127.0.0.1:6379[2]> ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
127.0.0.1:6379[2]> ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
127.0.0.1:6379[2]> zrangebyscore myzset -inf +inf
1) "how are u"
2) "maxu"
3) "hi"
127.0.0.1:6379[2]> zrangebyscore myzset -inf +inf withscores
1) "how are u"
2) "0"
3) "maxu"
4) "1"
5) "hi"
6) "2"
127.0.0.1:6379[2]> zrangebyscore myzset -inf 1 withscores
1) "how are u"
2) "0"
3) "maxu"
4) "1"

127.0.0.1:6379[2]> zrevrangebyscore myzset inf -inf withscores
1) "hi"
2) "2"
3) "maxu"
4) "1"
5) "how are u"
6) "0"

zrem zcard zcount

127.0.0.1:6379[2]> zrem key member [member ...]
127.0.0.1:6379[2]> ZCARD key
127.0.0.1:6379[2]> zcount key min max #返回score区间内的member的数量
127.0.0.1:6379[2]> zrevrangebyscore myzset inf -inf withscores
1) "hi"
2) "2"
3) "maxu"
4) "1"
5) "how are u"
6) "0"
127.0.0.1:6379[2]> zrem myzset hi
(integer) 1
127.0.0.1:6379[2]> zrevrangebyscore myzset inf -inf withscores
1) "maxu"
2) "1"
3) "how are u"
4) "0"
127.0.0.1:6379[2]> ZCARD myzset
(integer) 2


127.0.0.1:6379[2]> ZrevRANGebyscore myzset inf -inf withscores
1) "learn redis zset"
2) "100"
3) "be proud of you"
4) "100"
5) "maxu"
6) "1"
7) "how are u"
8) "0"
127.0.0.1:6379[2]> zcount myzset 0 100
(integer) 4
127.0.0.1:6379[2]> zcount myzset 99 100
(integer) 2
127.0.0.1:6379[2]> zcount myzset 99 (100
(integer) 0