该命令的作用: 将所有的键输出。由于redis是单线程运行,因此线上redis的键值过多时,要谨用该命令,会造成服务器阻塞,如果想在线上遍历所有的键值,最好用scan命令
del和unlink命令的作用都是删除key
不同的是del是阻塞操作,如果删除的key过多的话,可能阻塞时间会很长,unlink操作相比del会产生阻塞,该命令会在另一个线程中回收内存
type命令返回的时当前键的对外数剧结构类型,就是我们说的五种类型:string(字符串),hash(哈希),list(列表),set(集合),zset(有序集合)
object encoding 命令返回的是redis存储value的内部编码
redis定义的所有的内部编码有
REDIS_ENCODING_INTlong类型的整数REDIS_ENCODING_EMBSTRembstr编码的简单动态字符串
REDIS_ENCODING_RAW简单动态字符串REDIS_ENCODING_HT字典REDIS_ENCODING_LINKEDLIST双端链表REDIS_ENCODING_ZIPLIST压缩列表REDIS_ENCODING_INTSET整数集合REDIS_ENCODING_SKIPLIST跳跃表和字典
每种类型的对象都至少使用了两种不同的编码,目前的对应关系如下
三个命令的作用
set 设置值
setnx 键必须不存在,才可以设置成功
setxx 键必须存在,才可以设置成功
联系
setnx,setxx相当于set命令的简化写法
setnx hello world 等同 set hello world nx
setxx hello world 等同 set hello world xx
区别
setnx ,setxx都无法设置过期时间,set命令可以
一个常见的场景是用setnx来做分布式锁,给key设置一个过期时间来作为锁的超时时间,由于setnx命令本身不能设置过期时间所以执行命令大概是setnx(key,value), expire(key,time)是两步执行非原子操作,expire未执行成功的话,会存在死锁的情况。因此要使用set命令来设置原子操作 set key value time nx
如果插入多个值,那么各个 value 值按从左到右的顺序依次插入到表头
lpush mylist a,b,c
最后列表的结果未c,b,a