Redis 是一个 客户端-服务器 结构的程序,这与 MySQL 是类似的,这点需要牢记!!!
Redis 固然好,但也不是任何场景都适合使用 Redis,一定要根据当前的业务需求来选择是否使用 Redis
Redis 通用命令
Redis 的命令有很多,借助官方文档可以更快的找到自己想要的命令
Redis 命令参考
set get
set key value
get key
get
和 set
是 Redis 最基本的命令,用于获取和设置键值对。
如果键不存在,get
会返回 nil
,set
会创建一个新键。
What Is the Difference Between ‘Null’ and ‘Nil’
‘Null’ and ‘Nil’ are synonymous and both mean ‘zero’ or ‘nothing’ in value. The two words differ by what field we use them in. We use ‘Null’ mostly in maths, programming, business, and legal matters. On the other hand, we use ‘Nil’ in sports and games.
key
和value
都是字符串类型,不需要加上引号,加上单引号和双引号也不会报错,但是不推荐。
Redis 的命令是不区分大小写的,但是推荐使用小写,因为更好看~~
keys
keys pattern
keys
命令用于获取所有键的名称。
pattern
表示匹配模式,Redis 官方提供了多种匹配模式,可以根据需要选择:
h?llo
matches hello, hallo and hxllo ? 匹配任何单个字符。
h*llo
matches hllo and heeeello*
匹配任何数量的字符。
h[ae]llo
matches hello and hallo, but not hillo [ae] 只能匹配 a 和 e。
h[^e]llo
matches hallo, hbllo, … but not hello[^e]
匹配除了 e 之外的任何字符。
h[a-b]llo
matches hallo and hbllo, but not hello or hillo[a-b]
匹配 a 到 b 之间的任何字符。
注意事项:
keys * 可以获取所有键,但是不推荐使用,因为 Redis 使用的是单线程,如果数据库里有大量的键,会导致查询速度缓慢,从而影响其他客户端的请求响应。
当使用 Redis 作为缓存数据库(MySQL)时,若 Redis 服务器阻塞,则可能会导致全量数据库的请求突增,导致数据库崩溃。
exists
exists key [key...]
exists
命令用于判断键是否存在。
返回值为 key 存在的个数,如果 key 不存在,则返回 0。
一次性可以查询多个键是否存在。
如果有一次性查询多个键的需求,也更推荐一次性查询完所有需要查询的。由于 Redis 客户端 和 Redis 服务器之间是通过网络通信的,每发起一次查询都会构造一个请求,多次查询会导致效率比较低。
del
del key [key...]
del
命令用于删除键。
返回值为被删除的 key 数量。
如果作为 缓存数据库,可以使用 del 命令删除一些没用的键,因为数据还是存储在全量数据库里。
如果作为 全量数据库,则不推荐使用 del 命令
如果作为消息队列,则根据业务需求来看
expire
expire key seconds
expire
命令用于设置键的过期时间。
返回 1 表示设置成功,0 表示设置失败。
pexpire
pexpire key milliseconds-timeout
pexpire
命令用于设置键的过期时间,单位是毫秒。
返回 1 表示设置成功,0 表示设置失败。
ttl
ttl key
ttl
命令用于获取键的剩余过期时间。
返回值是秒数,-1 表示没有设置过期时间,-2 表示键不存在。
pttl
pttl key
pttl
命令用于获取键的剩余过期时间,单位是毫秒。
返回值是毫秒数,-1 表示没有设置过期时间,-2 表示键不存在。
type
type key
type
命令用于获取改键对应的值的类型。
返回值可以是 string, list, set, zset, hash, stream…
Redis 键的过期策略
Redis 键的过期策略主要有两种:
- 定期删除:Redis 会在一定时间内,抽取一部分键,查看其是否过期,如果过期,则删除。由于 Redis 是单线程的,所以需要尽可能这个过程足够快,不然会影响其他客户端的请求响应。
- 惰性删除:Redis 不会主动删除过期的键,而是客户端每次获取键时,检查是否过期,如果过期,则删除该键,同时返回一个 nil。