Redis全局命令

"那篝火在银河尽头~"


Redis-cli命令启动

现如今,我们已经启动了Redis服务,下⾯将介绍如何使⽤redis-cli连接、操作Redis服务。客户端与服务端交互的方式有两种:

● 第⼀种是交互式⽅式: 后续所有的操作都是通过交互式的⽅式实现,不需要再执⾏redis-cli了。

bash 复制代码
redis-cli-h{host}-p{port}

进入redis后,我们可以敲下使用redis的一个命令:

● 第⼆种是命令⽅式: 就可以直接得到命令的返回结果.

bash 复制代码
reids-cli -h {host} -p {port} {command}

这里有两点需要注意由于我们连接的Redis服务位于127.0.0.1,端⼝也使⽤的是默认的6379端⼝。所以很多时候,所以可以省略-h{host}-p{port}。


Redis全局命令:

如何理解全局命令?

(1) set与get

redis中最核心的两个命令就是: "set" 和 "get".set是用来把 "key" 和 "value"存储进去,而"get"是用来通过 "key" 获取 "value".

set命令使用:

set后面可以携带很多参数,但是开始学习阶段,我们就采取它最简单的用法。

对于上述的key value,如果你要表示字符串可以不用加 "",即便加上redis也不会报错。

get命令使用:

你说你现在设置了两个key就设置了嘛?你总得给我看看你设置的key是什么吧!

nil vs null:

null和nil都可以表示没有或者在价值上为0的概念,其中我们使用 "null"大多数用在数学、编程、商业等等,另一方面,在体育竞技或游戏方面使用 "nil"。

(2) Keys

|-----------|--------------------|
| 参数 | 效果 |
| ? | 匹配任意一个字符 |
| * | 匹配0个或多个任意字符 |
| [abcde] | 只能匹配到这个选型的任意一个 |
| [^e] | 匹配字符但 不包括e |
| [a-b] | 匹配a~b这个范围,范围都是闭区间 |

设置部分keys。

keys *:

keys命令的时间复杂度是O(n),这很好理解,就是遍历redis服务器是上存储的所有key。"keys *"其效果就是遍历访问 redis上的所有设置过的key!在生产环境中,一般会禁止使用"keys *"命令, 因为执行 " keys *"命令所花费的时间非常长,而Redis是一个单线程进程,此时就会导致redis服务器被阻塞住了,无法给其他客户端提供服务!

(3) EXISTS

redis中支持很多数据结构,指的是value可以是一些复杂的数据结构。相对于redis自身的键值对,是通过哈希表的方式来组织的。

为什么redis很多命令可以进行多参数传递?

这两次写法有什么区别?

我们需要了解,redis是一个网络服务,它的服务端和客户端的交流方式一定是以这样的形式:

如果输入多条命令,也就是需要多次网络传输网络通信,相反,如果将这些命令打包成一条命令,那么仅仅需要进行一次网络传输即可!大大减少了网络IO次数,提高数据处理的能力!

(4) DEL

(5) (P)EXPIRE\(P)TTL

返回值:1表⽰设置成功。0表⽰设置失败。

这里我们可以联想我们手机收到的验证码,什么几分钟内有效。

返回值:剩余过期时间。-1表⽰没有关联过期时间,-2表⽰key不存在。

对计算机而言,秒实在是很慢,所以你也会看到p开头的诸如 "pexpire\pttl"它们的时间是以毫秒为单位。

(6) type

当然这些数据结构,会在后面的篇幅中讲解。我们现在只需要观察结果,不用在意敲击的命令是什么意思。

我们通过type可以很快地知道,每个redis中存在的key存储的value是什么类型。


Redis中的过期策略

我们可以使用Expire命令设置key的到期时间。可是一个redis中一定不止一个key设置了过期时间,这些key一定需要什么管理其来,到一定的时间对这些key进行释放。redis咋可能知道哪些key已经过期需要被删除呢,哪些可以还没有过期呢?

可是Redis是一个单线程进程,如果是遍历所有的key,这样显然是行不通的,效率太低了,那么redis采取的过期策略是什么呢?

虽然上述两种策略相结合,但是仍然会残存很多的过期Key,没有得到及时的删除。因此,redis还提供了一系列内存淘汰的策略,解决这个问题。

有兴趣可以看看这篇讲解redis的内存淘汰策略的文章:

https://baijiahao.baidu.com/s?id=1729630215002937706&wfr=spider&for=pc

redis并没有选择使用定时器的方式来实现对key的过期删除,如果存在多个key需要被过期删除,那么一个定时器可以高效、节省cpu资源的前提下,完成对过期key的清理。

所以,借着这个机会,我们来看看定时器思想的两种实现方法。

定时器思想:

1) 基于优先级队列实现的定时器:

2) 基于时间轮实现的定时器

再次注意,redis中并没有采取这两种方案的任何一种来解决过期key的清理,但这两种方案都是高效的定时器实现方式,还是有一定的了解必要。


小结:

当前我们已经学了 redis几个基本的全局命令: get\set是redis的核心命令
① keys: 用来匹配规则pattern的所有key.

② exists: 用来判定指定的key是否存在.

③ (p)expire: 给key设置过期时间. ---> redis的过期策略

④ (p)ttl: 查询key的过期时间.

⑤ type: 查询key对应的value类型.

⑥ del: 删除指定的key


感谢你的阅读

祝你好运,向阳而生~

相关推荐
CodingBrother39 分钟前
mysql常见死锁的分析
数据库·mysql
ln-x1 小时前
苍穹外卖05-Redis相关知识点
数据库·redis·缓存
MXsoft6181 小时前
Intel AMT技术在服务器硬件监控中的应用与解读
服务器·网络·数据库
计算机-秋大田1 小时前
基于Spring Boot的美术馆管理系统的设计与实现,LW+源码+讲解
java·数据库·论文阅读·spring boot·后端·spring
卡布达ovo2 小时前
Django Admin
数据库·python·django
期待着20132 小时前
ClickHouse创建分布式表
数据库·clickhouse
新手小袁_J3 小时前
全文检索ElasticSearch到底是什么?
java·大数据·数据库·redis·elasticsearch·搜索引擎·全文检索
繁婲卍似錦3 小时前
MongoDB——服务端连接及查询
数据库·mongodb
李同学va3 小时前
Redis相关技术内容
数据库·redis·缓存
Jason-河山3 小时前
反射API与AOP:日志记录与审计的超级英雄
开发语言·数据库·python