
Redis 是什么






keys [pattern] 获取符合要求的所有key。时间复杂度为 O(n),一般在生产环境中不使用,因为 Redis 是单线程的,执行耗时的任务会阻塞其他任务。一般会使用 scan 命令替代(非阻塞)。

dbsize 获取当前存储数据个数。
exists key 判断是否存在该key
del key 删除指定数据
type key 获取指定key的数据类型
rename key newkey 重命名

expire key seconds 为某个 key 设置过期时间。
ttl key 查看某个 key 的剩余时间,返回正数代表剩余的时间,-1代表永久,-2代表已过期或不存在。



set key value 设置值
get key 获取某个 key 的值
mset key1 value1 key2 value2 批量设置并且是原子的,可以用来减少网络时间消耗
mget key1 key2 批量获取并且是原子的,可以用来减少网络时间消耗

incr key 自增指定 key 的值
decr key 自减指定 key 的值
incrby key value 自增指定数值
decrby key value 自减指定数值
incrbyfloat key floatvalue 增加指定浮点数,前面几个操作就可以用来实现计数器的功能。

setnx key value 如果不存在该key则可以设置成功,否则会失败,加上过期时间限制,则是redis实现分布式锁的一种方式(后面会提到)。
set key value xx 与前面相反,如果存在则设置成功,否则失败(相当于更新操作)

getset key newvalue 设置新值并返回旧值
append key value 为原本内容追加内容
strlen key 获取字符串长度
getrange key start end 获取指定范围的内容
setrange key index value 设置指定范围的内容

setex key seconds value 设置值且设置过期时间
set key value ex seconds nx 为不存在的 key 设置值且设置过期时间,分布式锁的实现方式。



hset key field value 设置字典中某个 key 的值
hsetnx key field value 设置字典中某个 key 的值(不存在的)
hmset key field1 value1 field2 value2……批量设置
hget key field 获取字典中某个 key 的值
hmget key field1 field2 批量获取
hgetall key 获取全部

hdel key field 删除某个 key
hexists key field 判断是否存在
hlen key 获取指定 key 对应的字典中的存储个数
hvals key 返回所有的 value
hkeys key 返回所有的 key

hincrby key field increValue 增加某个 value 的值(也可以增加负数)
hincrbyfloat key field floatValue 增加某个 value 的值(浮点数)



lpush key item1 item2 item3... 从左入栈
rpush key item1 item2 item3... 从右入栈
lpop key 从左出栈
rpop key 从右出栈
lindex key index 获取指定索引的元素 O(n) 谨慎使用
lrange key start end 获取指定范围的元素 O(n) 谨慎使用

linsert key before|after item newitem 在指定元素的前面或者后面添加新元素
lrem key count value 删除指定个数值为 value 的元素
count = 0:删除所有值为 value 的元素
count > 0:从左到右删除 count 个值为 value 的元素
count < 0:从右到左删除 |count| 个值为 value 的元素
ltrim key start end 保留指定范围的元素
lset key index newValue 更新某个索引的值

blpop key timeout 没有则阻塞(timeout 指定阻塞时间为 0 代表永久)
brpop key timeout 没有则阻塞(timeout指定阻塞时间为 0 代表永久)这两个可以用来实现消费者生产者

总结来说我们可以使用左入右出或者右入左出来实现队列,左入左出或者右入右出来实现栈。
lpush + lpop = Stack
rpush + rpop = Stack
lpush + rpop = Queue
rpush + lpop = Queue
lpush/rpush + ltrim = Capped List(定长列表)
lpush + brpop = Message Queue(消息队列)
rpush + blpop = Message Queue(消息队列)

sadd key value 添加元素
sdel key value 删除某个元素
sismember key value 判断是否是集合中的元素
srandmember key count 随机获取指定个数的元素(不会影响集合结构)
spop key count 从集合中随机弹出元素(会破坏结合结构)
smembers key 获取集合所有元素 O(n) 复杂度
scard key 获取集合个数

sinter set1 set2 ... 获取所有集合中的交集
sdiff set1 set2 ... 获取所有集合中的差集
sunion set1 set2 ... 获取所有集合中的并集



zadd key score element 添加,score用于排序,value需要唯一,由于使用的跳表,时间复杂度为 O(logn)。
zrem key element 删除某元素 O(1) 时间复杂度
zscore key element 获取某个元素的分数
zincrby key incrScore element 增加某个元素的分数
zrange key start end [withscores] 获取指定索引范围的元素加上withscores则返回分数 O(logn + m) 时间复杂度
zrangebyscore key minScore maxScore [withscores] 获取指定分数范围的元素加上 withscores 则返回分数,O(logn + m) 时间复杂度
zcard key 获取有序集合长度




multi 事务开始的标志
exec 事务执行

discard 清除在这个事务中放入队列的所有命令,即解除整个事务。
watch key 在事务开始前监控某个元素,如果在提交事务的时候发现这个元素的值被其他客户端更改了则事务会运行失败。
unwatch key 解除监控



本文转载自:「掘金」,原文:https://tinyurl.com/qqxnuba,版权归原作者所有。欢迎投稿,投稿邮箱:
editor@hi-linux.com
。


你可能还喜欢
点击下方图片即可阅读
你还在命令行下管理 Redis 吗?是时候使用这款全平台客户端工具了!
点击上方图片,打开小程序,加入「玩转 Linux」圈子

更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!







