Redis 是一种键值(key-value)型的缓存型数据库,它将数据全部以键值对的形式存储在内存中,并且 key 与 value 一一对应。这里的 key 被形象的称之为密钥,Redis 提供了诸多操作这把“密钥”的命令,从而实现了对存储数据的管理。
可以把 key 看成 value 的变量,通过检索 key 就可以找到对应的 value 值:
- key 的类型
- key 的命名规范
- key 的过期时间
了解key的特点
1) key的类型
key 的类型对应着 value 的类型,同样也有五种(string、list、hash、set、zset)。如果 key 指向的是一个字符串类型的值,那么 key 的类型就是字符串。我们可以通过TYPE
命令来查看 key 的类型,示例如下
# 字符串 redis> SET weather "sunny" OK redis> TYPE weather string # 列表 redis> LPUSH book_list "programming in scala" (integer) 1 redis> TYPE book_list list # 集合 redis> SADD pat "dog" (integer) 1 redis> TYPE pat set
2) key的命名规范
key 的命名需要遵循以下规则:
- key 取值不可以太长,否则会影响 value 的查找效率,并且浪费内存空间。
- key 取值也不能过短,否则会使得 key 可读性变差。
3) key过期时间
Redis 允许你为 key 设置一个过期时间(使用 EXPIRE 等命令),也就是“到点自动删除”,这在实际业务中是非常有用的,一是它可以避免使用频率不高的 key 长期存在,从而占用内存资源;二是控制缓存的失效时间。
Redis 会把每个设置了过期时间的 key 存放到一个独立的字典中,并且会定时遍历这个字典来删除到期的 key。除了定时遍历之外,它还会使用“惰性策略”来删除过期的 key。所谓“惰性策略”指的是当客户端访问这个 key 的时候,Redis 对 key 的过期时间进行检查,如果过期了就立即删除。Redis 使用两种方式相结合的方法来处理过去的 key。
过期时间,有许多的应用场景,比如购物 App 会在特定的时间节点推出相关的活动,比如双十一、双十二、618购物节等,这些活动都是一年一度如期开办,因此当下一期举行时,上一期的活动的数据就没有意义了,在这种情景下就可以给 key 设置一个过期时间,从而减少无用数据占用内存资源。
Redis key命令格式
和 key 相关的命令,它的语法格式如下所示:
redis 127.0.0.1:6379> COMMAND KEY_NAME
- COMMAND:表示 key 的命令;
- KEY_NAME:表示 key 的名字。
示例: DEL
代表删除命令,而 cc 是键。如果成功删除了键,则将的返回整数 1,否则将返回整数 0。如下:
redis 127.0.0.1:6379> SET cc "你好" OK #删除key redis 127.0.0.1:6379> DEL cc (integer) 1 #若键不存在删除失败 redis 127.0.0.1:6379> DEL age (integer) 0
Redis键命令汇总
下表对常用的 Redis 键命令做了简单的总结:
命令 | 说明 |
---|---|
DEL key | 若键存在的情况下,该命令用于删除键。 |
DUMP key | 用于序列化给定 key ,并返回被序列化的值。 |
EXISTS key | 用于检查键是否存在,若存在则返回 1,否则返回 0。 |
EXPIRE key | 设置 key 的过期时间,以秒为单位。 |
EXPIREAT key | 该命令与 EXPIRE 相似,用于为 key 设置过期时间,不同在于,它的时间参数值采用的是时间戳格式。 |
PEXPIRE key | 设置 key 的过期,以毫秒为单位。 |
PEXPIREAT key | 与 PEXPIRE 相似,用于为 key 设置过期时间,采用以毫秒为单位的时间戳格式。 |
KEYS pattern | 此命令用于查找与指定 pattern 匹配的 key。 |
MOVE key db | 将当前数据库中的 key 移动至指定的数据库中(默认存储为 0 库,可选 1-15中的任意库)。 |
PERSIST key | 该命令用于删除 key 的过期时间,然后 key 将一直存在,不会过期。 |
PTTL key | 用于检查 key 还剩多长时间过期,以毫秒为单位。 |
TTL key | 用于检查 key 还剩多长时间过期,以秒为单位。 |
RANDOMKEY | 从当前数据库中随机返回一个 key。 |
RENAME key newkey | 修改 key 的名称。 |
RENAMENX key newkey | 如果新键名不重复,则将 key 修改为 newkey。 |
SCAN cursor | 基于游标的迭代器,用于迭代数据库中存在的所有键,cursor 指的是迭代游标。 |
TYPE key | 该命令用于获取 value 的数据类型。 |