当前位置: 首页 > news >正文

Redis:安装与常用命令

🌈 个人主页:Zfox_
🔥 系列专栏:Redis

🔥 安装 Redis

  1. 使⽤apt安装
apt install redis -y
  1. ⽀持远程连接
  • 修改 /etc/redis/redis.conf
    • 修改 bind 127.0.0.1bind 0.0.0.0
    • 修改 protected-mode yesprotected-mode no
  1. 控制Redis启动
  • 启动Redis服务
service redis-server start
  • 停⽌Redis服务
service redis-server stop
  • 重启Redis服务
service redis-server restart
  • 查看Redis服务状态
service redis-server status
  • 持久化⽂件存储⽬录
 /var/lib/redis/

Redis持久化⽣产的RDB和AOF⽂件都默认⽣成于该⽬录下。后边章节我们讲到持久化时会观察这边持久化的⼀些现象。

  • ⽇志⽂件⽬录
/var/log/redis/

/var/log/redis/⽬录下会保存Redis运⾏期间⽣产的⽇志⽂件,默认按照天进⾏分割,并且会将⼀定⽇期的⽇⼦⽂件使⽤gzip格式压缩保存。可以使⽤任意⽂本编辑器打开,后边章节我们会通过⽇志来观察⼀些现象。

🔥 Redis命令⾏客户端

🐳 现在我们已经启动了Redis服务,下⾯将介绍如何使⽤ redis-cli连接、操作Redis服务。

redis-cli 可以使⽤两种⽅式连接Redis服务器。

  • 第⼀种是交互式⽅式:通过redis-cli-h{host}-p{port} 的⽅式连接到Redis服务,后续所有的操作都是通过交互式的⽅式实现,不需要再执⾏redis-cli了,例如:
[root@host ~]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set key hello
OK
127.0.0.1:6379> get key
"hello"
  • 第⼆种是命令⽅式:⽤ redis-cli-h{host}-p{port}{command}就可以直接得到命令的返回结果,例如:
[root@host ~]# redis-cli -h 127.0.0.1 -p 6379 ping
PONG
[root@host ~]# redis-cli -h 127.0.0.1 -p 6379 set key hello
OK
[root@host ~]# redis-cli -h 127.0.0.1 -p 6379 get key
"hello"

这⾥有两点要注意:
1)由于我们连接的Redis服务位于127.0.0.1,端⼝也使⽤的是默认的6379端⼝,所以可以省略-h{host}-p{port}
2)Redis是学习Redis的重要⼯具,后续的⼤量章节都是⽤它来做讲解。
有关redis-cli提供的更为强⼤的功能将在后续章节做详细介绍。

Redis客⼾端与服务端的交互过程
在这里插入图片描述

🔥 Redis 常用命令

本篇开始对于 Redis 的命令进行学习,当然只是学习一些常见的

🦋 get 和 set

🦈 Redis 中是使用键值对来进行存储的,所以 get 是根据 key 来取 Value 的,而 set 是来设置键值对的

set  \colorbox{pink}{ set }  set 

set [key] [value]
127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> set key3 value3
OK
127.0.0.1:6379> set 'key2' "value2"
OK

get  \colorbox{pink}{ get }  get 

get [key]
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 key100
(nil)

🦋 Redis 全局命令

keys

Redis 可以看成是一个网络版本的哈希表,它支持很多的数据结构,key 固定是字符串,但是 Value可以是多种多样的数据结构,下面讲述的就是全局命令,可以搭配各种各样的数据结构

keys [pattern]

该命令可以看到的是每一个 key 的模样,同时也可以允许存在通配符等

时间复杂度:O(N)

pattern 是什么?

表示的意思是,一个包含特殊符号的字符串,存在的意义是来描述,找的字符串是什么样子的

  • h?llo 匹配 hello , hallo 和 hxllo
  • h*llo 匹配 hllo 和 heeeello
  • h[ae]llo 匹配 hello 和 hallo 但不匹配 hillo
  • h[^e]llo 匹配 hallo , hbllo , … 但不匹配 hello
  • h[a-b]llo 匹配 hallo 和 hbllo

先插入几个键值对:

127.0.0.1:6379> set hello 1
OK
127.0.0.1:6379> set hallo 2
OK
127.0.0.1:6379> set hbllo 3
OK
127.0.0.1:6379> set hllo 4
OK
127.0.0.1:6379> set heeeeeeeeeeeeelo 5
OK

?匹配的是任意一个字符

127.0.0.1:6379> keys h?llo
1) "hallo"
2) "hello"
3) "hbllo"
  • 匹配的是0个或者任意字符
127.0.0.1:6379> keys h*llo
1) "hllo"
2) "hallo"
3) "hello"
4) "hbllo"

[abcde]表示匹配这里面的某个选项

127.0.0.1:6379> keys h[abc]llo
1) "hallo"
2) "hbllo"

[^e] 表示排除e,除了e都行

127.0.0.1:6379> keys h[^a]llo
1) "hello"
2) "hbllo"

[a-b] 表示的是a-b范围内的字符都行

127.0.0.1:6379> keys h[a-b]llo
1) "hallo"
2) "hbllo"

注意事项

keys 命令的时间复杂度是O(N),所以一般会禁止使用keys,尤其是keys *

127.0.0.1:6379> keys *
1) "hllo"
2) "heeeeeeeeeeeeelo"
3) "hallo"
4) "hello"
5) "key1"
6) "key3"
7) "hbllo"
8) "key2"

Redis 是单线程的,所以当执行 keys 的时候可能会导致阻塞,这是一件不可容忍的事,因此一般禁止

Redis 经常会用于做缓存,挡在 mysql 前面,替 mysql 负重前行的人,万一 Redis 被一个 keys*阻塞住了,此时其他的查询 Redis 操作就超时了此时这些请求就会直接查数据库,突然一大波请求过来了, mysql 措手不及,就容易挂了,整个系统就基本瘫痪了

EXISTS

exists key [key ...]
127.0.0.1:6379> keys *
1) "hllo"
2) "heeeeeeeeeeeeelo"
3) "hallo"
4) "hello"
5) "key1"
6) "key3"
7) "hbllo"
8) "key2"127.0.0.1:6379> exists hello hallo
(integer) 2

那为什么要这样进行一次请求多个呢?这是考虑到了网络服务,Redis 和 HTTP 的请求响应机制是一样的,这就意味着如果每次都请求,会消耗一定的网络资源,但是如果采用一次去检查多个的情况(减少网络通信的次数),就不会这样,相当于会节省一部分的网络资源

DEL

删除指定 key

DEL key [key ...]

这个命令相对比较简单,这里就不再进行赘述了,就是一个删除的命令

127.0.0.1:6379> keys *
1) "hllo"
2) "heeeeeeeeeeeeelo"
3) "hallo"
4) "hello"
5) "key1"
6) "key3"
7) "hbllo"
8) "key2"127.0.0.1:6379> del hllo hallo
(integer) 2127.0.0.1:6379> keys *
1) "heeeeeeeeeeeeelo"
2) "hello"
3) "key1"
4) "key3"
5) "hbllo"
6) "key2"

这里值得注意的是,Redis 数据被删除,要看它是否是一个数据库,如果它作为缓存,那问题不算特别大,但是如果是作为数据库,那就相当于在 MySQL 中丢失了数据,这就是一个比较严重的错误了

针对于 Redis 的误删数据的错误,要根据具体情况具体分析

EXPIRE

expire 的作用是给指定的 key 设置过期时间,key 存活时间超过这个指定的值,就会被自动删除

expire key seconds

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

要注意的是,expire 的 key 值,必须得是已经存在的 key 值,如果不是存在的 key 值是不可以被设置过期时间的

127.0.0.1:6379> keys *
1) "heeeeeeeeeeeeelo"
2) "hello"
3) "key1"
4) "key3"
5) "hbllo"
6) "key2"127.0.0.1:6379> expire key2 3
(integer) 1127.0.0.1:6379> keys *
1) "heeeeeeeeeeeeelo"
2) "hello"
3) "key1"
4) "key3"
5) "hbllo"
6) "key2"127.0.0.1:6379> expire key2 3
(integer) 0127.0.0.1:6379> keys *
1) "heeeeeeeeeeeeelo"
2) "hello"
3) "key1"
4) "key3"
5) "hbllo"

TTL

查询过期时间的命令叫做 ttl,全称是 time to live

TTL key

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

redis> SET mykey "Hello"
"OK"
redis> EXPIRE mykey 10
(integer) 1
redis> TTL mykey
(integer) 10

EXPIRETTL命令都有对应的⽀持毫秒为单位的版本:PEXPIREPTTL,详细⽤法就不再介绍了

键的过期机制

在这里插入图片描述

🦋 Redis 的删除策略

对于删除来说,到底该选用哪种策略呢?下面给出两种策略

  • 先说一下 「惰性删除」:

假设现在这个 key 已经到达过期时间了,但是暂时还没删除它,key 还是存在的,当下一次进行访问的时候,正好用到了这个 key,此时就会让 Redis 触发删除的操作,并且返回一个 nil

  • 下面说一下「定期删除」:

定期删除,就是在一个定期时间内进行检测,但是定期删除是要有一定条件的,原因在于 Redis 是一个单线程的程序,如果扫描 key 的时间太多,就会导致被阻塞,形成的效果和 keys * 差不多

TYPE

返回key对应的 value 数据类型。

TYPE key

返回值: none , string , list , set , zset , hash and stream

redis> SET key1 "value"
"OK"
redis> LPUSH key2 "value"
(integer) 1
redis> SADD key3 "value"
(integer) 1
redis> TYPE key1
"string"
redis> TYPE key2
"list"
redis> TYPE key3
"set"

本⼩结只是抛砖引⽟,给出⼏个通⽤的命令,为5种数据结构的使⽤做⼀个热⾝,后续章节将对键管理做⼀个更为详细的介绍。

🔥 共勉

😋 以上就是我对 Redis:安装与常用命令 的理解, 觉得这篇博客对你有帮助的,可以点赞收藏关注支持一波~ 😉
在这里插入图片描述

相关文章:

  • 基于ZYNQ ARM+FPGA异构平台的声呐数据采集系统设计
  • ARM P15协处理器指令详解:架构、编程与应用实践
  • 支持向量机(SVM):解锁数据分类与回归的强大工具
  • C#语音识别:使用Whisper.net实现语音识别
  • PySide6 GUI 学习笔记——常用类及控件使用方法(标签控件QLabel)
  • 鸿蒙OS基于UniApp的区块链钱包开发实践:打造支持鸿蒙生态的Web3应用#三方框架 #Uniapp
  • LeetCode 热题 100 155. 最小栈
  • unix/linux source 命令,其高级使用
  • 历史数据分析——广州港
  • C#里与嵌入式系统W5500网络通讯(3)
  • Java补充(Java8新特性)(和IO都很重要)
  • 零基础安装 Python 教程:从下载到环境配置一步到位(支持 VSCode 和 PyCharm)与常用操作系统操作指南
  • 【Go-6】数据结构与集合
  • 【Java】JDK 命令行工具
  • WIN11+VSCODE搭建的c/c++环境调试报错解决
  • 数据要素×AI:高质量数据集如何成为智能时代的“新石油“
  • Python 中 dpkt 库的详细使用指南(强大的 Python 数据包解析库)
  • git 如何解决分支合并冲突(VS code可视化解决+gitLab网页解决)
  • 238除自身以外数组的乘积
  • Go 语言 select 语句详解
  • 朋友 合同 网站制作/百度学术官网论文查重免费
  • 深圳优秀网站建设定制/浏览器打开是2345网址导航
  • 建设一个怎样的自己的网站/产品运营方案
  • 江门官网建站公司/网站推广引流最快方法
  • 服务区里可以做多少个网站/广东seo推广费用
  • 什么网站建设最便宜/品牌推广的三个阶段