redis cluster的批量操作

之前项目中都在使用redis的单机或者主从,后来迁移到集群的时候,出现了一系列问题,下面整理一下redis集群方面的知识。

阅读更多

Redis基础数据类型

Redis 有 5 种基础数据结构,分别为:String (字符串)、Hash (哈希)、List (列表)、Set (集合) 和 Sorted Set (有序集合)

String (字符串)

String 数据结构是简单的 key-value 类型。
最常见的用途就是缓存信息。我们可以将需要缓存结构体使用 JSON 序列化成字符串来缓存,取出来的时候再反序列化一下。

常用命令 说明 示例
set 设置指定 key 的值 set name zubin
get 获取指定 key 的值 get name
del 删除指定 key del key
mset 批量设置指定 key 的值 mset name zubin age 18
mget 批量获取指定 key 的值 mget name age
setex 如果设置指定 key 的值和过期时间(秒) setex name 5 zubin
setnx 只有 key 不存在时设置 key 的值 setnx name zubin
incr 将 key 中存储的数字值增 1 incr age
incyby 将 key 所储存的值加上给定的增量值 incrby age 5
decr 将 key 中存储的数字值减 1 decr age
strlen 返回指定 key 中 value 的长度 strlen name
append 将字符串追加到指定 key 中值的末尾。 append name 1

Hash (哈希)

Redis hash 是一个 string 类型的 field 和 value 的映射表,是无序字典, 特别适合用于存储对象。每个 hash 可以存储2^32 - 1(4294967295) 键值对。

常用命令 说明 示例
hset 设置 hash 表中 field 的值 hset user name zubin
hmset 设置 hash 表中多个 field 的值 hmset user name zubin age 18
hsetnx field 不存在时设置哈希表字段的值 hsetnx user name zubin
hget 获取指定字段的值 hget user name
hmget 获取多个字段的值 hmget user age name
hgetall 获取 hash 表中所有字段的值 hgetall user
hdel 删除一个或多个 hash 字段 hdel user age
hexists 判断 hash 表中指定的字段是否存在 hexists user age
hincrby 为 hash 表中指定的整数值字段加上增量 hincrby user age 5
hkeys 获取 hash 表中所有的字段 hkeys user
hvals 获取 hash 表中所有的值 hvals user
hlen 获取 hash 表中字段的数量 hlen user

List (列表)

Redis 列表是简单的字符串列表,按照插入顺序排序,注意它是链表而不是数组,一个列表最多可以包含 2^32 - 1 个元素 (4294967295, 每个列表超过 40 亿个元素)。
list 的插入和删除操作非常快,时间复杂度为 O(1),但是索引定位很慢,时间复杂度为 O(n)。
list 常用来做异步队列使用,你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

常用命令 说明 示例
lpush 将一个或多个值插入到列表头部 lpush skills Node Golang Java
lpushx 将一个或多个值插入到已存在的列表头部 lpushx skills Node Golang Java
lpop 移除列表第一个元素 lpop skills
blpop 移除列表第一个元素, 列表为空会阻塞,直到超时或者有可移除的元素 blpop skills 100
rpush 将一个或多个值插入到列表尾部 rpush skills Node Golang Java
rpushx 将一个或多个值插入到已存在的列表尾部 rpushx skills Node Golang Java
rpop 移除列表最后一个个元素 rpop skills
brpop 移除列表最后一个个元素, 列表为空会阻塞,直到超时或者有可移除的元素 brpop skills 100
brpoplpush 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它 brpoplpush skills list1 500
lindex 通过索引获取列表中的元素 lindex skills 1
lset 通过索引来设置元素的值 lset skills 0 Python
llen 获取列表长度 llen skills
lrange 获取列表指定范围内的元素 lrange skills 1 2
lrem 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素 lrem skills 0 node
ltrim 修剪列表,只保留指定区间内的元素 ltrim skills 1 2

Set (集合)

Redis 的 Set 是 String 类型的无序集合。它内部的键值对是无序的唯一的,这就意味着集合中不能出现重复的数据,集合中最大的成员数为 2^32 - 1 (4294967295)。
Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

常用命令 说明 示例
sadd 向集合添加一个或多个元素 sadd skills python go java go
scard 获取集合的成员数 scard skills
sismember 判断是否集合中的成员 sismember skills go
smembers 返回集合中的所有成员 smembers skills
spop 随机移除并返回集合中的一个元素 spop skills
sinter 返回指定集合的交集 sinter key1 key2
sunion 返回指定集合的并集 sunion key1 key2
sdiff 返回指定集合的差集 sdiff key2 key2

Sorted Set (有序集合)

Redis 有序集合和集合一样也是 string 类型元素的集合,一方面它是一个 set,保证了内部 value 的唯一性,另一方面它可以给每个 value 赋予一个 score(分数),代表这个 value 的排序权重。集合中最大的成员数为 2^32 - 1(4294967295)。
Redis 正是通过分数来为集合中的成员进行从小到大的排序,有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

常用命令 说明 示例
zadd 添加一个或多个成员或者更新已存在成员的分数 zadd userscore zubin 1
zcard 获取有序集合的成员数 zcard userscore
zcount 获取有序集合指定区间分数的成员数 zcount userscore 1 3
zincrby 给指定成员的分数加上增量 zincrby userscore 1 zubin
zrange 返回指定区间内的成员 zrange userscore 0 -1
zrangebyscore 返回 score 区间内的成员 zrangebyscore userscore -inf +inf
zrem 移除一个或多个元素 zrem userscore 0 -1
zrevrange 返回指定分数区间内的成员,按分数递减 zrevrange userscore 0 -1
zrevrank 返回成员 member 的排名 zrevrank userscore zubin
zscore 返回 score 的 score 值 zscore userscore zubin