Redis 是什么?
Redis是一种基于内存的数据库,对数据的读写操作都是在内存中完成,因比读写速度非常快,常用于缓存,消息队列、分布式锁等场景。 Redis提供了多种数据类型来支特不同的业务场景,比如String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合,、Bitmaps(位图)、HyperLogLog(基数统计)、GEO(地理信息)、Stream(流),并且对数据类型的操作都是原子性的,因为执行命令由单线程负责的,不存在并发竞争的问题。除此,之外,Redis还支特事务、持久化、Lua脚本、多种集群方案(主从复制模式、哨兵模式、切片机群模式)、发布/订阅模式,内存淘汰机制、过期删除机制等等。
Redis 的键操作命令是 Redis 中最基础也是使用频率较高的一类命令,用于对键进行各种管理和查询操作;redis
的命令不区分大小写,下面进行详细介绍:
SET
set key value
- 将指定的键
key
的值设置为value
。如果键已经存在,其原有值将被覆盖;如果键不存在,则会创建一个新的键值对。 key
和value
都是字符串,可以加单引号或双引号,也可以不加。
GET
get key
- 获取指定键
key
的值。如果键不存在,返回nil
。
127.0.0.1:6379> set key 'hello redis'
OK
127.0.0.1:6379> get key
"hello redis"
KEYS
keys pattern
- 查找所有符合给定模式
pattern
的键。 - 该命令在键数量较多时可能会阻塞服务器,不建议在生产环境中频繁使用。
常见的正则符号:
?
:匹配一个任意字符。*
:匹配任意多个任意字符。[abc]
:只能匹配a
、b
、c
三者之一,匹配一次。[^a]
:排除e
,其它的都能匹配,匹配一次。[a-c]
:匹配a
到c
范围内的字符,匹配一次。
127.0.0.1:6379> keys key*
1) "key1"
2) "key2"
3) "key"
EXISTS
exists key [key ...]
- 判断一个或多个
key
是否存在。如果键存在,返回存在键的个数;否则,返回0
。
DEL
del key [key ...]
- 删除一个或多个指定的键。如果键不存在,该命令会忽略该键,不会报错。
可以发现上述的
EXISTS
和DEL
命令支持一次查询或删除多个键,因为Redis 是基于网络实现,每个命令要从客户端向服务器端发送请求,而如果客户端只需一次请求就能完成多个键的操作,就可以避免多次网络往返,减少处理请求的总次数。
EXPIRE
expire key seconds
- 为指定的
key
添加秒级的过期时间。若键存在且成功设置了过期时间,返回1
。若键不存在,返回0
。
127.0.0.1:6379> set hello 1
OK
127.0.0.1:6379> expire hello 5
(integer) 1
127.0.0.1:6379> get hello
"1"
127.0.0.1:6379> get hello
(nil)
TTL
ttl key
- 获取
key
的秒级过期时间。
127.0.0.1:6379> set hello 1
OK
127.0.0.1:6379> expire hello 5
(integer) 1
127.0.0.1:6379> ttl hello
(integer) 2
127.0.0.1:6379> ttl hello
(integer) 1
127.0.0.1:6379> ttl hello
(integer) -2
Redis
是如何实现定期删除的?下面是常见的三种过期删除策略,Redis采用定期删除 + 惰性删除:
定时删除:在设置键的过期时间时,创建一个定时器,让定时器在键的过期时间来临时,立即执行对键的删除操作。(Redis未采用)
定期删除:Redis 会每隔一段时间,从数据库中随机抽取一部分键进行检查,将其中过期的键删除。
惰性删除:当客户端尝试访问某个键时,Redis 会先检查该键是否过期,如果过期则将其删除,并返回空结果给客户端。也就是说,过期键不会主动被删除,而是在被访问时才会进行检查和删除操作。
TYPE
type key
- 返回指定键
key
的对应value
数据类型。
OBJECT ENCODING
object encoding key
- 查看指定键所对应值的编码类型
127.0.0.1:6379> set key1 123
OK
127.0.0.1:6379> set key2 hello
OK
127.0.0.1:6379> set key3 helloooooooooooooooooooooooooooooooooooooooooooooo
OK
127.0.0.1:6379> object encoding key1
"int"
127.0.0.1:6379> object encoding key2
"embstr"
127.0.0.1:6379> object encoding key3
"raw"
FLUSHALL
flushall
- 删除
Redis
中所有数据。生产环境中禁止使用。