前言
书本中这一章节讲得是使用redis-cli来操作redis的各种数据类型及操作命令, 其中还穿插了博客的小例子
redis的键
Redis的keys命令用于管理键。使用Redis的keys命令语法如下所示:1
redis 127.0.0.1:6379> COMMAND KEY_NAME
比如:
热身
- 获取符合规则的键名列表
keys pattern
pattern: 正则 - 设置键值
set bar 1
- 判断键知否存在
如果存在返回1, 否则返回0exists key
- 删除键
del key [key ...]
可以删除一个或者多个键, 返回值是删除的键的个数 - 获取键值的数据类型
type key
字符串类型
赋值和取值
1
2set key value
get key递增数字
如果是存储的整数形式, 可以使用incr让当前键值递增,并返回递增后的值
当要操作的键不存在的时候, 默认值就是0 ,所以加1就是1了
如果操作的是字符串类型, 就会报错- 增加指定的整数
前面incr是增加1, 如果想一次增加更多的值incrby key increment
- 减少指定的值
decr
和decrby
和上面的增加的类似 - 向尾部增加值
append key value
如果不存在key, 则类似set key value
的功能, 返回的是追加后的字符串的总长度
我们可以看到对于整数类型, 也是可以操作的 - 获取字符串长度
strlen key
不存在则返回0
注意的是: 中文使用的utf-8编码, 所以一个中文长度是3 - 同时获取和设置多个键值
mget key [key …]
mset key value [key value …] - 位运算
自行研究
散列类型
我们可以这样理解, 我们有一个对象, 比如: student, 他有name, age, address三个属性, 如果按照键值对存储student信息就是这样:
如果按照散列方式, 就是面向对象的方式存储了
- 赋值和取值
hset key field value
hget key field
- 判断字段是否存在
hexists key field
- 当字段不存在时赋值
hsetx key field value
与hset
类似, 区别在于如果字段存在将不做任何操作 - 增加数字
hincrby key field increment
- 删除字段
可以删除多个字段, 返回删除的个数hdel key field [field ...]
- 只获取字段名或者字段的值
hkeys key
hvals key
- 获取字段数量
hlen key
列表类型
列表: list, 很简单理解这种类型, redis使用的是双向链表的数据结构来实现队列, 所以能理解的是: 在双向链表中插入和删除数据是很快的, 时间复杂度是O(1), 但是通过索引访问元素却很慢
redis的列表在很多场景下很有用, 比如:我们只关心社交网络的最新的数据, 这个时候用redis来存储这些数据, 获取最新的100条数据就变得相当简单快速, 而且在两端插入记录也是非常快.
redis用作队列来使用也是非常常见
下面的操作其实就是数据结构中的常用操作
- 向列表两端增加元素
lpush key value [value ...]
向列表左边增加元素, 返回增加元素后列表的长度rpush key value [value ...]
向列表右边增加元素 - 从列表两端弹出元素
lpop key
rpop key
这两个操作可以应用在队列中 - 获取列表中元素的个数
llen key
时间复杂度是O(1), 而不是像有些数据库遍历所有整个表 - 获取列表片段
lrange key start stop
start和stop是包含关系, 索引也是从0开始的, 同时还支持负的索引 - 删除列表中指定的值
lrem key count value
删除前count个值为value的元素, 返回删除个数 - 获得/设置指定索引的元素值
类似对数组的操作lindex key index
返回指定索引元素, 从index开始lset key index value
- 只保留列表的指定片段
ltrim key start stop
- 向列表中插入元素
linsert key before|after privot value
- 将元素从一个列表转到另一个列表
rpoplpush source destination
集合类型
列表是list, 集合就是set
list是有序的, 按照插入的顺序排列, 且可以重复
set是无序的, 不可以重复
redis使用的是值为空的散列表(hash table)实现, 所以操作的时间复杂度也是O(1), 最方便的就是可以在多个集合类型键之间进行交集, 并集, 和差集运算
- 增加和删除元素
sadd key member [member ...]
srem key member [member ...]
- 获得元素中所有元素
smembers key
- 元素是否存在
sismember key member
时间复杂度O(1) - 集合间运算
sdiff key [key ...]
sinsert key [key ...]
sunion key [key ...]
- 获取元素中集合个数
scard key
- 随机获得集合中元素
srandmember key [count]
- 从集合中弹出一个元素
spop key
有序集合
类似的sortedSet
- 增加元素
zadd key score member [score member ...]
zadd向有序集合中加入一个元素和该元素的分数. 如果该元素已经存在, 则会用心的分数替换原来的分数, 分数不仅支持整数还支持浮点数 - 获取元素的分数
zscore key member
- 获得排名在某个范围的元素列表
zrange key start stop [withscores]
zrevrange key start stop [withscores]
- 获取指定分数范围
zrangebyscore key min max [withscores] [limit offset count]
- 增加某个元素的分数
zincrby key increment member
- 获取元素中集合的数量
zcard key
- 获取指定分数范围内的元素个数
zcount key min max
- 删除一个或多个元素
zrem key member [member ...]
- 按照排名范围删除元素
zremrangebyrank key start stop
- 按照分数范围删除元素
zremrangebyscore key min max
- 获得元素的排名
zrank key member
zrevrank key member