首页 > SQL学习 > Redis的键(key)命令
2019
08-07

Redis的键(key)命令

redis是Key-Value数据库,redis中所有的数据都是保存为键值对的形式,常见的redis的key命令有:

del key [key1 key2...]:删除指定的一个或多个key,不存在的key会被忽略,返回被删除key的数量

dump key:序列化指定的key并返回序列化之后的值(key不存在返回nil)

序列化生成的值有以下几个特点:
    带有64位的校验和,用于检测错误,在进行反序列化之前会先检查校验和。
    值的编码格式和RDB文件保持一致。
    RDB版本会被编码在序列化值当中,如果因为Redis的版本不同造成RDB格式不兼容,那么Redis会拒绝对这个值进行反序列化操作。
    序列化的值不包括任何生存时间信息。

restore key pttl serialized-value:反序列化给定的序列化值,并将它和给定的key关联。

    参数ttl以毫秒为单位为key设置过期时间,为0则表示不设置过期时间
    如果反序列化成功那么返回 OK ,否则返回一个错误

exists key:检查给定key是否存在,若存在则返回1,否则返回0

设置、删除和查看key的过期时间:

    expire key seconds:以秒为单位设置过期时间,设置成功返回1,否则返回0
    expireat key timestamp:以UNIX时间戳(精确到秒)设置过期时间,设置成功返回1,否则返回0
    pexpire key milliseconds:以毫秒为单位设置过期时间,设置成功返回1,否则返回0
    pexpireat key milliseconds-timestamp:以UNIX时间戳(精确到毫秒)设置过期时间,设置成功返回1,否则返回0
    persist key:移除指定key的过期时间,移除成功返回1,否则返回0
    ttl key:以秒为单位返回key的剩余过期时间,key不存在返回-2,key没有设置过期时间返回-1,否则正常
    pttl key:以毫秒为单位返回key的剩余过期时间,key不存在返回-2,key没有设置过期时间返回-1,否则正常返回

keys pattern:查找符合pattern模式的所有的key并返回所有查找到的key列表

migrate host port key destination-db timeout [copy] [replace]:

    将key传送到目标服务器的指定数据库,一旦传送成功,当前实例上的key会被删除。
    timeout超时时间单位为毫秒
    copy:不删除当前实例上的key
    replace:覆盖替换目标服务器上已存在key
    传送成功返回OK,否则返回相应的错误

move key db:将当前数据库的指定key移动到指定的数据库db中,如目标数据库中已存在相同的key,则不进行移动操作,移动成功返回1 ,失败则返回0

dbsize:返回当前数据库中key的数量

flushdb:清空当前数据库中的所有key,此命令从不失败,总是返回OK

flushall:清空整个Redis服务器的数据(删除所有数据库的所有key),此命令从不失败,总是返回OK

object command key:从内部察看给定key的Redis对象,通常用在除错或者了解为了节省空间而对key使用特殊编码的情况。

    command有三个可能的值refcount、encoding、idletime
    refcount返回给定key引用所储存的值的次数
    encoding返回给定key所储存的值所使用的内部编码
    idletime返回给定key自储存以来的空转(没有被读取也没有被写入)时间,以秒为单位
    redis的内部编码:
    字符串被编码为raw(长的数字也被编码为raw)
    小的数字被编码为int
    列表被编码为ziplist(较小的列表)或linkedlist
    集合被编码为intset(只储存数字的小集合)或者hashtable
    哈希表可以编码为zipmap(小哈希表)或者hashtable
    有序集合可以被编码为ziplist(小的有序集合)或者skiplist格式

randomkey:从当前数据库中随机返回一个key,数据库为空时返回nil

rename oldkey newkey:将oldkey改名为newkey,当newkey已存在将覆盖旧值,改名成功返回OK,当新旧key相同或oldkey不存在返回一个错误

renamenx oldkey newkey:仅当newkey不存在时,将oldkey改名为newkey,修改成功返回1,newkey已存在返回0,oldkey不存在返回一个错误

type key:返回key所储存的值的类型,可能的返回值none(key不存在)、string(字符串)、list(列表)、set(集合)、zset(有序集)、hash(哈希表)

sort key [by pattern] [limit offset count] [get pattern [get pattern ...]] [asc | desc] [alpha] [store save_key]

    返回或保存给定列表、集合、有序集合中经过排序的元素。排序默认以数字作为对象,值被解释为双精度浮点数,然后进行比较。
    by pattern:根据指定的模式获取某个其他的key并根据这些key进行排序,如果指定的模式没有匹配的key则跳过排序操作,直接返回原始结果
    get pattern:根据排序的结果获取符合指定模式的key的值,当pattern为井号(#)表示获取被排序键的值
    哈希表也可以作为by或get的参数,用key->name的格式来获取哈希表中的name的值,key和name中都可以使用通配符
    limit:对排序之后的返回元素的数量进行限制offset表示要跳过显示的元素数量,count指定一共返回多少个元素
    asc:从小到大排序(默认)
    desc:从大到小排序
    alpha:以字符串为对比对象进行排序
    store save_key:将排序结果保存到save_key键上,如果被指定的save_key已存在,那么原有的值将被覆盖。
    不使用store参数返回列表形式的排序结果,使用store参数返回排序结果的元素数量

增量式迭代(遍历)命令:

scan用于迭代当前数据库中的所有键

sscan用于迭代集合键中的元素

hscan用于迭代哈希键中的键值对

zscan用于迭代有序集合中的元素(包括元素成员和元素分值)

上面四个增量式迭代命令的工作方式都非常相似,参数的也基本相同,唯一不同的是:sscan、hscan、zscan第一个参数必须是一个键,scan命令则不需要(scan迭代的是当前数据库中的所有键)

下面讲一下scan的使用,另外三个用法基本相同:

scan cursor:增量式迭代(遍历)当前数据库中的所有键

    游标参数被设置为0时,服务器将开始一次新的迭代,而当返回值第一个元素为0时,表示迭代已结束
    scan并不保证每次都返回固定数量的元素,返回的元素数量甚至可能为0,但只要命令返回的游标不是0,迭代就没有结束
    迭代的所有状态都保存在游标里面,服务器无须为迭代保存任何状态
    返回一个包含两个元素的数组,第一个元素是用于进行下一次迭代的新游标, 而第二个元素是包含了所有被迭代的元素组成的数组。

count num:告知迭代命令在此次迭代中应该从数据集里返回多少元素,默认值为10, count选项只是一种提示(hint),并不保证每次都返回该选项指定数量的元素,但是在大多数情况下,这种提示都是有效的。

match pattern:只返回和给定模式(pattern)相匹配的元素

因为scan命令仅仅使用游标来记录迭代状态, 所以这些命令带有以下缺点:

    同一个元素可能会被返回多次。 
    如果一个元素是在迭代过程中被添加到数据集的,又或者是在迭代过程中从数据集中被删除的,那么这个元素是不确定是否会返回。
    增量式迭代命令并不保证每次执行都返回某个给定数量的元素。  
最后编辑:
作者:qingheluo
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。