Redis的基本使用命令(GET,SET,KEYS,EXISTS,DEL,EXPIRE,TTL,TYPE)
- KEY 是唯一的 只对应 String类型
- 值(VALUE)支持多种数据类型(String,Set,Hash,List,Sorted Set.....)
redis中命令不区分大小写
进入redis中
redis-cli
root@iZbp122ygczhdyhc5r271kZ:~# redis-cli 127.0.0.1:6379> 127.0.0.1:6379> 127.0.0.1:6379> 127.0.0.1:6379> 127.0.0.1:6379> 127.0.0.1:6379>
SET
SET命令用于在 Redis 中设置一个键值对。基本语法是SET key value
1)set方法
127.0.0.1:6379> set key1 value1 OK 127.0.0.1:6379> set key2 value2 OK 127.0.0.1:6379> set key3 value3 OK
2)过期时间设置(EX 和 PX)
EX用于设置键值对的过期时间,单位是秒。
127.0.0.1:6379> set key4 value4 ex 20 OK 127.0.0.1:6379> ttl key4 (integer) 15
ttl查询剩余多少秒
PX则是用于设置过期时间,单位是毫秒
127.0.0.1:6379> set key5 value5 px 5000 OK 127.0.0.1:6379> ttl key5 (integer) 2
3)条件设置(NX 和 XX)
NX(Not eXists)表示只有当键不存在时才设置键值对
127.0.0.1:6379> keys * 1) "key3" 2) "key2" 3) "key1" 127.0.0.1:6379> set key4 value4 nx OK 127.0.0.1:6379> get key4 1) "value4"
GET
GET命令用于获取指定键(key)对应的的值(value)。如果键不存在,GET命令会返回nil。
127.0.0.1:6379> get key1 "value1" 127.0.0.1:6379> get key2 "value2" 127.0.0.1:6379> get key3 "value3" 127.0.0.1:6379> get key4 (nil)
如果存在根据key值 返回对应的value 否则将返回一个nil
- 在 Redis 中,
keys命令是一个用于查找符合特定模式(pattern)的键(keys)的命令。它返回所有与给定模式匹配的键的列表。
通配符介绍
*:可以匹配任意数量(包括零个)的字符。例如,keys *会返回所有的键,因为它匹配任何键名。而keys user:*会返回所有以user:开头的键,像user:1、user:abc等都符合这个模式。
?:匹配一个任意的字符。例如,keys user:??会匹配像user:12、user:ab这样长度为固定 4 个字符(user:加上后面两个任意字符)的键,因为?只匹配一个字符。
先设置好一些值,以便演示
127.0.0.1:6379> set heool 1 OK 127.0.0.1:6379> set hello 2 OK 127.0.0.1:6379> set hllow 3 OK 127.0.0.1:6379> set hallo 4 OK 127.0.0.1:6379> set hhhhhh 5 OK 127.0.0.1:6379> set heool 6 OK

1)?匹配一个字符
127.0.0.1:6379> keys h?llo 1) "hallo" 2) "hello"
2)* 匹配0个或多个字符
127.0.0.1:6379> keys h* 1) "hallo" 2) "heool" 3) "hello" 4) "hhhhhh" 5) "hllow"
3)【abcde】只能匹配abcde,别的不行 相当与固定选项
127.0.0.1:6379> keys h[ab]llo 1) "hallo"
4)【^e】 只有e匹配不了 其他都可以匹配
127.0.0.1:6379> keys h[^e]* 1) "hallo" 2) "hhhhhh" 3) "hllow"
5)【a-b】可以匹配a-b区间的字符 包括俩侧
127.0.0.1:6379> keys h[a-e]llo 1) "hallo" 2) "hello"
注意: KEYS * 慎用 因为为把所有的结果显示出来,有可能会使系统崩溃,导致所有的数据丢失 keys的时间复杂度:O(N)
EXISTS
在 Redis 中,exists命令用于检查给定的一个或多个键(keys)是否存在。它返回一个整数值,表示给定键存在的数量。 语法为exists key [key...]。
127.0.0.1:6379> keys * 1) "hallo" 2) "heool" 3) "hello" 4) "hhhhhh" 5) "hllow" 127.0.0.1:6379> exists hallo (integer) 1 127.0.0.1:6379> exists hallo heool hello (integer) 3 127.0.0.1:6379> exists a (integer) 0
如果存在则返回1,不存在返回0。如果同时检查多个键,它会返回存在的键的数量。 时间复杂度:O(1)
DEL
del命令是 Redis 中用于删除一个或多个键(keys)及其对应的值(values)的命令。其语法是del key [key...]。
127.0.0.1:6379> keys * 1) "hallo" 2) "heool" 3) "hello" 4) "hhhhhh" 5) "hllow" 127.0.0.1:6379> del hallo (integer) 1 127.0.0.1:6379> del heool dello (integer) 1 127.0.0.1:6379> del hhhhhh hllow (integer) 2 127.0.0.1:6379> del a (integer) 0
如果键不存在,del命令会返回0,表示没有键被删除;如果键存在并成功删除,会返回1(如果同时删除多个键,返回成功删除的键的数量)。
时间复杂度:O(1)
EXPIRE
在 Redis 中,expire命令用于为一个已经存在的键(key)设置过期时间。语法为expire key seconds,其中key是要设置过期时间的键,seconds是过期时间的秒数。
127.0.0.1:6379> keys * 1) "key3" 2) "hello" 3) "key2" 4) "key1" 127.0.0.1:6379> expire key1 10 (integer) 1 127.0.0.1:6379> ttl key1 (integer) 6 127.0.0.1:6379> get key1 (nil)
一旦过期时间到达,Redis 会自动删除这个键值对。 时间复杂度:O(1)
TTL
- 在 Redis 中,
ttl(Time To Live)命令用于获取一个键(key)的剩余生存时间(以秒为单位)。语法是ttl key。
127.0.0.1:6379> keys * 1) "key3" 2) "hello" 127.0.0.1:6379> expire hello 10 (integer) 1 127.0.0.1:6379> ttl hello (integer) 6 127.0.0.1:6379> ttl hello (integer) -2 127.0.0.1:6379> ttl key3 (integer) -1 127.0.0.1:6379> get hello (nil)
- 例如,对于一个已经设置了过期时间的键,执行命令会返回该键剩余的生存时间秒数。如果键不存在或者没有设置过期时间,
ttl命令返回-1;如果键已经过期,ttl命令返回-2。
redis中的过期策略是怎么实现的(面试)
惰性删除(Lazy Deletion):
- 当客户端访问一个键时,Redis 会检查这个键是否已经过期。如果键已经过期,那么在执行相应的操作(如
GET、SET等)之前,Redis 会先删除这个过期的键,然后返回键不存在的结果(如nil)。
- 例如,当执行
GET key操作时,Redis 内部会有一个检查机制,先判断键是否过期。如果key已经过期,Redis 会执行删除操作,然后返回nil,就好像这个键从来不存在一样。
定期删除
- Redis 会定期从设置了过期时间的键中随机抽取一部分键进行检查,将其中过期的键删除。这个检查过程是在 Redis 的内部循环事件(Event Loop)中进行的,有一定的时间间隔和检查数量限制。
- 具体来说,Redis 会使用一个近似的 LRU(Least Recently Used)算法来确定要检查的键。它会维护一个过期键的样本池,每次从这个样本池中抽取一定比例的键进行检查。例如,可能会每次抽取 100 个键进行检查,发现过期的键就立即删除。
Redis 过期策略的综合应用
- 在实际的 Redis 应用中,惰性删除和定期删除是结合使用的。这种综合策略的目的是在保证内存使用效率的同时,尽量减少对系统性能的影响。
- 例如,对于一个高流量的缓存系统,大部分时间依靠惰性删除来处理过期键,因为缓存数据通常是频繁访问的,过期键在被访问时能够及时被删除。同时,定期删除机制会在后台默默地工作,定期清理那些长时间未被访问的过期键,以防止内存占用过多。通过这种方式,Redis 能够在高效利用内存和提供高性能服务之间取得平衡。
参考:https://cloud.tencent.com.cn/developer/article/2467909
浙公网安备 33010602011771号