Redis基本用法(二)

接上篇,继续介绍数据类型

其他数据类型

集合Set

集合包含一堆不重复的字符串,内部实现采用哈希表,增删改查的时间复杂度都是O(1)

  1. SADD key value... - 向一个集合中添加一个或多个元素,如果集合key不存在,则新建一个集合,如果集合中已经存在指定的值,这个值则会被忽略,返回成功插入集合元素的个数,如果key已经存在但是不是集合类型,则会返回一个错误WRONGTYPE
  2. SCARD key - 返回集合中元素的个数
  3. SMEMBERS key - 返回集合中的所有元素
  4. SDIFF key1 [key2...] - 返回集合key1与key2的差集,key2可以有多个
  5. SINTER key1 [key2..] - 和上面一条类似,返回所有参数集合的交集
  6. SUNION key [key2...] - 同上,返回所有参数集合的并集,另外,这三个命令还有对应的一组,即SDIFFSTORE dest key1 [key2...],以此类推,在命令后面加STORE。此时参数也要增加一个dest到第一个参数的位置,作用为把后面若干个集合key1…的差集/交集/并集储存到第一个参数指定的集合dest中,并返回dest中的元素个数
  7. SREM key value1... - 移除集合中一个或多个元素,不存在的元素会被忽略,最后返回成功移除的元素的个数

有序集合Sorted Set

有序集合和普通集合类似,同样是用来存储一系列不重复的字符串的,区别是有序集合中的每个元素会关联一个score(double类型,可重复)用来排序

  1. ZADD key score member - 向一个有序集合中添加一个元素member,指定分数为score,也可以添加多个score和member的组合
  2. ZREM key member - 从一个有序集合中移除一个元素,也可以是多个
  3. ZCARD key - 统计有序集合中元素个数
  4. ZCOUNT key min max - 统计有序集合中分数处于min和max之间的元素个数
  5. ZRANGEBYSCORE key min max - 返回分数处于min和max之间的所有元素

发布订阅

Redis中的发布和订阅是一种消息通讯的模式,订阅者可以接收到发布者发布的消息。消息通过频道channel传递,互相之间都是多对多的关系,当新消息被某个发布者通过某个channel发布时,订阅了这个channel的所有订阅者都会接收到这条信息
我们开启两个redis-cli客户端,其中一个作为订阅者:

1
2
3
4
5
redis 127.0.0.1:6379> SUBSCRIBE testChannel
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "testChannel"
3) (integer) 1

这样一来就订阅了频道testChannel,然后另一个客户端作为发布者,向频道testChannel发送消息:

1
2
3
4
redis 127.0.0.1:6379> PUBLISH testChannel "This is a message."
(integer) 1
redis 127.0.0.1:6379> PUBLISH testChannel "This is another message."
(integer) 1

此时第一个客户端(订阅者)将会收到以下信息:

1
2
3
4
5
6
1) "message"
1) "testChannel"
2) "This is a message."
3) "message"
4) "testChannel"
5) "This is a message."

3条一组,分别为固定字符串"message",频道名"testChannel",以及发布者发布的消息