Redis-全局命令
Redis全局命令
对于键值数据库而言,基本的数据模型是 key-value 模型,Redis 支持的 value 类型包括了 String、哈希表、列表、集合等,而Memcached支持的 value 类型仅为 String 类型,所以Redis 能够在实际业务场景中得到广泛的应用,就是得益于支持多样化类型的 value。
Redis里面有16个库,但是Redis的分库功能没啥意义(默认就是0号库,尤其是集群操作的时候),我们一般都是默认使用0号库进行操作。
在了解Rediskey-value 模型之前,Redis的有一些全局命令,需要我们提前了解。
keys命令
keys *
keys L*
查看所有键(支持通配符):
但是这个命令请慎用,因为keys命令要把所有的key-value对全部拉出去,如果生产环境的键值对特别多的话,会对Redis的性能有很大的影响,推荐使用dbsize。
keys命令会遍历所有键,所以它的时间复杂度是o(n),当Redis保存了大量键时线上环境禁止使用keys命令。
dbsize命令
dbsize命令会返回当前数据库中键的总数。
dbsize命令在计算键总数时不会遍历所有键,而是直接获取 Redis内置的键总数变量,所以dbsize命令的时间复杂度是O(1)。
exists
检查键是否存在,存在返回1,不存在返回0。
del
删除键,无论值是什么数据结构类型,del命令都可以将其删除。返回删除键个数,删除不存在键返回0。同时del命令可以支持删除多个键。
键过期
expire
Redis支持对键添加过期时间,当超过过期时间后,会自动删除键,时间单位秒。
ttl命令会返回键的剩余过期时间,它有3种返回值:
大于等于0的整数:键剩余的过期时间。
-1:键没设置过期时间。
-2:键不存在
除了expire、ttl命令以外,Redis还提供了expireat、pexpire,pexpireat、pttl、persist等一系列命令。
expireat key timestamp: 键在秒级时间截timestamp后过期。
ttl命令和pttl都可以查询键的剩余过期时间,但是pttl精度更高可以达到毫秒级别,有3种返回值:
大于等于0的整数:键剩余的过期时间(ttl是秒,pttl是毫秒)。
-1:键没有设置过期时间。
-2:键不存在。
pexpire key milliseconds:键在milliseconds毫秒后过期。
pexpireat key milliseconds-timestamp键在毫秒级时间戳timestamp后过期。
在使用Redis相关过期命令时,需要注意以下几点。
1)如果expire key 的键不存在,返回结果为0:
2)如果过期时间为负值,键会立即被删除,犹如使用del命令一样:
3 ) persist命令可以将键的过期时间清除:
4)对于字符串类型键,执行set命令会去掉过期时间,这个问题很容易在开发中被忽视。
5 ) Redis不支持二级数据结构(例如哈希、列表)内部元素的过期功能,不能对二级数据结构做过期时间设置。
type
返回键的数据结构类型,例如键lijin是字符串类型,返回结果为string。键mylist是列表类型,返回结果为list,键不存在返回none
randomkey
随机返回一个键,这个很简单,请自行实验。
rename
键重命名
但是要注意,如果在rename之前,新键已经存在,那么它的值也将被覆盖。
为了防止被强行rename,Redis提供了renamenx命令,确保只有newKey不存在时候才被覆盖。
从上面我们可以看出,由于重命名键期间会执行del命令删除旧的键,如果键对应的值比较大,会存在阻塞Redis的可能性。
键名的生产实践
Redis没有命令空间,而且也没有对键名有强制要求。但设计合理的键名,有利于防止键冲突和项目的可维护性,比较推荐的方式是使用“业务名:对象名: id : [属性]”作为键名(也可以不是分号)。、
例如MySQL 的数据库名为mall,用户表名为order,那么对应的键可以用"mall:order:1", "mall:order:1:name"来表示,如果当前Redis 只被一个业务使用,甚至可以去掉“order:”。
在能描述键含义的前提下适当减少键的长度,从而减少由于键过长的内存浪费。
转载自:https://juejin.cn/post/7158714561473249317