Chapter2 Redis五种数据类型
2.1 字符串类型 string
2.1.1 简介
- Redis 中最基本的数据结构
- 可以存储任何类型的数据,包括二进制数据,序列化后的数据, JSON 化的对象甚至是一张图片
- 单个value最大 512M
2.1.2 常用命令
添加键值对
set key value
查询对应键值
get key
追加数据到value末尾
append key value
获取value长度
strlen key
key不存在则设置值
setnx key value # 或 set key value nx
value值加减
incr key decr key incrby key 步长 decrby key 步长
- 只能对数字值操作
- 若value为空则新增为1
设置多个
mset key1 value1 key2 value2 ...
获取多个
mget key1 key2 ...
msetnx
msetnx key1 value1 key2 value2 ....
- 当且仅当所有给定键都不存在时, 为所有给定键设置值
对值进行切片
getrange key start end
- 前后都包括,闭集
- apple-red:
getrange apple 1 2
- ed
赋值
setrange key offset value
设置带过期时间的值
setex key seconds value # 或 set key value EX seconds set key value PX milliseconds
获取并重新赋值
getset key value
2.2 列表类型 list
2.2.1 简介
- 列表是简单的字符串列表,按照插入顺序排序,元素可以重复。
- 可以添加一个元素到列表的头部(左边)或者尾部(右边) ,底层是个双向链表结构
2.2.2 常用命令
lpush 与 rpush
lpush key value1 value2 ....
- 将一个或多个值 value 插入到列表 key 的最左边(表头)/最右边(表尾), 各个value 值依次插入到表头位置。
- 插入后 valueN 在最前面
- 返回值: 插入之后的列表的长度
lpop 与 rpop
lpop key
- 移除并返回列表 key 头部第一个/最后一个元素, 即列表左侧/右侧的第一个元素。
- 返回值: 列表左侧第一个元素的值;列表 key 不存在,返回 nil
rpoplpush
rpoplpush key1 key2
- key1右侧弹出并插入到key2左侧
- 返回值:被操作的value
lrange
lrange key startIndex endIndex
- 获取列表 key 中指定下标区间内的元素, 下标从 0 开始,到列表长度-1;
- 下标也可以是负数,表示列表从后往前取,-1 表示倒数第一个元素
- startIndex 和 endIndex 超出范围不会报错。
- 返回值: 获取到的元素列表
lindex
lindex key index
- 获取列表 key 中下标为指定 index 的元素, 列表元素不删除, 只是查询。
- 0 表示列表的第一个元素, 1 表示列表的第二个元素; index 也可以负数的下标, -1 表示列表的最后一个元素。
- 返回值: key 存在时,返回指定元素的值;Key 不存在时,返回 nil
llen
llen key
- 获取列表 key 的长度
- 返回值: 数值,列表的长度; key 不存在返回 0
linsert
linsert key before/after pivot value
- 将值 value 插入到列表 key 当中位于值 pivot 之前或之后的位置。 key 不存在或者 pivot 不在列表中,不执行任何操作。
- 返回值: 命令执行成功,返回新列表的长度。没有找到 pivot 返回 -1, key 不存在返回 0
lrem
lrem key count value
- 根据参数 count 的值,移除列表中与参数 value 相等的元素,
- count >0 , 从列表的左侧向右开始移除;
- count < 0 从列表的尾部开始移除;
- count = 0 移除表中所有与 value 相等的值。
- 返回值: 数值,移除的元素个数
- 根据参数 count 的值,移除列表中与参数 value 相等的元素,
ltrim
ltrim key start stop
- 让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除
- 返回值:OK
lset
lset key index value
- 将列表 key 下标为 index 的元素的值设置为 value。
- 设置成功返回 ok ; key 不存在或者 index 超出范围返回错误信息
2.3 集合类型 set
2.3.1 简介
- Set 是 string 类型的无序不重复集合。
- 底层是一个value为null的hash表
2.3.2 常用命令
sadd
sadd key member [member...]
- 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略,不会再加入。
- 返回值: 加入到集合的新元素的个数(不包括被忽略的元素)
smembers: 获取集合 key 中的所有成员元素
smembers key
sismember
sismember key member
- 判断 member 元素是否是集合 key 的元素
- 返回值: member 是集合成员返回 1,其他返回 0
scard: 获取集合里面的元素个数
scard key
srem
srem key member [member...]
- 移除集合中一个或多个元素, 不存在的元素被忽略。
- 返回值: 数字,成功移除的元素个数, 不包括被忽略的元素。
srandmember
srandmember key [count]
- 只提供 key,随机返回集合中一个元素,元素不删除,依然在集合中;
- 提供了 count 时
- count 正数, 返回包含 count 个数元素的集合,集合元素各不重复。
- count 负数,返回一个 count 绝对值的长度的集合,集合中元素可能会重复多次。
- 返回值: 一个元素或者多个元素的集合
spop
spop key
- 随机从集合中删除一个或 count 个元素。
- 返回值: 被删除的元素, key 不存在或空集合返回 nil
smove
smove src dest member
- 将 member 元素从 src 集合移动到 dest 集合
- member 不存在, smove 不执行操作,返回 0
- 如果 dest 存在 member,则仅从 src 中删除 member。
- 可以对同一个集合操作
- 返回值: 成功返回 1 ,其他返回 0
- 将 member 元素从 src 集合移动到 dest 集合
sinter
sinter key1 key2 [key...]
- 返回值: 交集元素组成的集合,如果没有则返回空集合
sdiff
sdiff key1 key2 [key...]
- 返回值: 返回第一个集合中有而后边集合中都没有的元素组成的集合,如果第一个集合中的元素在后边集合中都有则返回空集合
sunion
sunion key1 key2 [key...]
- 返回值: 返回所有集合元素组成的大集合,如果所有 key 都不存在,返回空集合。
2.4 哈希类型 hash
2.4.1 简介
- Redis 的 hash 是一个 string 类型的 key 和 value 的映射表
- hash的 value 是一系列的键值对, hash 特别适合用于存储对象
2.4.2 常用命令
hset
hset key field value [field value...]
- 将键值对 field-value 设置到哈希列表 key 中
- 如果 key 不存在,则新建哈希列表,然后执行赋值
- 如果 key下的 field 已经存在,则 value 值覆盖。
- 返回值: 返回设置成功的键值对个数
- 将键值对 field-value 设置到哈希列表 key 中
hget
hget key field
- 获取哈希表 key 中给定域 field 的值。
- 返回值: field 域的值,如果 key 不存在或者 field 不存在返回 nil
hmset
- 语法、作用与hset相同
- 返回 OK 或 nil
hexists
hexists key field
- 查看哈希表 key 中,给定域 field 是否存在
- 返回值: 如果 field 存在,返回 1,其他返回 0
hkeys
hkeys key
- 查看哈希表 key 中的所有 field 域列表
- 返回值: 包含所有 field 的列表, key 不存在返回空列表
hvals key
hvals key
- 返回哈希表 中所有域的值列表
- 返回值: 包含哈希表所有域值的列表, key 不存在返回空列表
hgetall
hgetall key
- 获取哈希表 key 中所有的域和值
- 返回值: 以列表形式返回 hash 中域和域的值, key 不存在,返回空 hash
hincrby
hincrby key field increment
- 给哈希表 key 中的 field 域增加 int
- 返回值: 返回增加之后的 field 域的值
hsetnx
hsetnx key field value
- 将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在的时候才设置,否则不设置。
- 返回值: 设值成功返回 1,其他返回 0
hdel
hdel key field [field]
- 删除哈希表 key 中的一个或多个指定域 field,不存在 field 直接忽略。
- 返回值: 成功删除的 field 的数量
hlen
hlen key
- 获取哈希表 key 中域 field 的个数
- 返回值: 数值, field 的个数。 key 不存在返回 0
2.5 有序集合类型 zset (sorted set)
2.5.1 简介
- 有序集合zset和集合set一样也是string类型元素的集合,且不允许重复的成员。
- 不同的是 zset 的每个元素都会关联一个分数(score可以重复), redis 通过分数来为集合中的成员进行从小到大的排序
2.5.2 常用命令
zadd
zadd key score member [score member...]
- 将一个或多个 member 元素及其 score 值加入到有序集合 key 中,如果 member 存在集合中,则覆盖原来的值; score 可以是整数或浮点数.
- 返回值: 数字,新添加的元素个数.
zrange
zrange key startIndex endIndex [WITHSCORES]
- 查询有序集合,指定区间的内的元素。 集合成员按 score 值从小到大来排序;
- startIndex 和 endIndex 都是从0 开始表示第一个元素
- startIndex 和 endIndex 都可以取负数-1 表示倒数第一个元素;
- WITHSCORES 选项让 score 和 value 一同返回。
- 返回值: 指定区间的成员组成的集合
- 查询有序集合,指定区间的内的元素。 集合成员按 score 值从小到大来排序;
zrangebyscore
zrangebyscore key min max [WITHSCORES] [LIMIT offset count]
- 获取有序集 key 中,所有 score 值介于 min 和 max 之间(包括 min 和 max)的成员,有序成员是按递增(从小到大)排序;
- 使用符号”(“ 表示包括 min 但不包括 max;
- withscores 显示 score 和 value;
- limit 用来限制返回结果的数量和区间,在结果集中从第 offset 个开始,取 count 个
- 返回值: 指定区间的集合数据
- 获取有序集 key 中,所有 score 值介于 min 和 max 之间(包括 min 和 max)的成员,有序成员是按递增(从小到大)排序;
zrevrange
zrevrange key startIndex endIndex [WITHSCORES]
- 查询有序集合,指定区间的内的元素。集合成员按 score 值从大到小来排序
zrevrangebyscore
zrevrangebyscore key max min [WITHSCORES] [LIMIT offset count]
- 成员按递减(从大到小)排序
zincrby
zincrby key increment value
- 为元素的score加上增量
- 返回值:增加后的score
zrem
zrem key member [member...]
- 删除有序集合 key 中的一个或多个成员,不存在的成员被忽略。
- 返回值: 被成功删除的成员数量,不包括被忽略的成员
zcard
zcard key
- 获取有序集 key 的元素成员的个数。
- 返回值: key 存在, 返回集合元素的个数; key 不存在,返回 0
zcount
zcount key min max
- 返回有序集 key 中, score 值在 min 和 max 之间(包括 score 值等于 min 或 max )的成员的数量。
- 返回值: 指定有序集合中分数在指定区间内的元素数量
zrank
zrank key member
- 获取有序集 key 中成员 member 的排名,有序集成员按 score 值从小到大顺序排列, 从 0 开始排名, score最小的是 0 。
- 返回值: 指定元素在有序集合中的排名;如果指定元素不存在,返回 nil。
zrevrank
zrevrank key member
- 有序集成员按 score 值从大到小顺序排列