天天看点

Redis-全局命令

Redis全局命令

对于键值数据库而言,基本的数据模型是 key-value 模型,Redis 支持的 value 类型包括了 String、哈希表、列表、集合等,而Memcached支持的 value 类型仅为 String 类型,所以Redis 能够在实际业务场景中得到广泛的应用,就是得益于支持多样化类型的 value。

Redis里面有16个库,但是Redis的分库功能没啥意义(默认就是0号库,尤其是集群操作的时候),我们一般都是默认使用0号库进行操作。

在了解Rediskey-value 模型之前,Redis的有一些全局命令,需要我们提前了解。

keys命令

keys *
keys L*      

查看所有键(支持通配符):

Redis-全局命令

但是这个命令请慎用,因为keys命令要把所有的key-value对全部拉出去,如果生产环境的键值对特别多的话,会对Redis的性能有很大的影响,推荐使用dbsize。

keys命令会遍历所有键,所以它的时间复杂度是o(n),当Redis保存了大量键时线上环境禁止使用keys命令。

dbsize命令

dbsize命令会返回当前数据库中键的总数。

Redis-全局命令

dbsize命令在计算键总数时不会遍历所有键,而是直接获取 Redis内置的键总数变量,所以dbsize命令的时间复杂度是O(1)。

exists

检查键是否存在,存在返回1,不存在返回0。

Redis-全局命令

del

删除键,无论值是什么数据结构类型,del命令都可以将其删除。返回删除键个数,删除不存在键返回0。同时del命令可以支持删除多个键。

Redis-全局命令
Redis-全局命令

键过期

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命令可以将键的过期时间清除:

Redis-全局命令

4)对于字符串类型键,执行set命令会去掉过期时间,这个问题很容易在开发中被忽视。

Redis-全局命令

5 ) Redis不支持二级数据结构(例如哈希、列表)内部元素的过期功能,不能对二级数据结构做过期时间设置。

type

返回键的数据结构类型,例如键lijin是字符串类型,返回结果为string。键mylist是列表类型,返回结果为list,键不存在返回none

Redis-全局命令

randomkey

随机返回一个键,这个很简单,请自行实验。

Redis-全局命令

rename

键重命名

但是要注意,如果在rename之前,新键已经存在,那么它的值也将被覆盖。

Redis-全局命令

为了防止被强行rename,Redis提供了renamenx命令,确保只有newKey不存在时候才被覆盖。

Redis-全局命令

从上面我们可以看出,由于重命名键期间会执行del命令删除旧的键,如果键对应的值比较大,会存在阻塞Redis的可能性。

键名的生产实践

Redis没有命令空间,而且也没有对键名有强制要求。但设计合理的键名,有利于防止键冲突和项目的可维护性,比较推荐的方式是使用“业务名:对象名: id : [属性]”作为键名(也可以不是分号)。、

继续阅读