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

Redis笔记

文章目录

  • Redis笔记
    • 通用命令
      • get和set
      • keys
      • exists
      • del
      • expire
      • ttl
      • Redis的key过期策略
      • 定时器的实现原理
      • type
    • 持久化
      • RDB(Redis DataBase)---定期备份
        • bgsave
      • AOF(Append Only File)---实时备份

Redis笔记

Redis是一个“客户端-服务器”结构的程序,客户端和服务器之间通过网络来进行通信

通用命令

官方文档

get和set

127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> set key2 value2
OK
127.0.0.1:6379> get key1
"value1"
127.0.0.1:6379> get key2
"value2"
127.0.0.1:6379> get key3
(nil)

keys

  • ?:匹配任意一个字符
  • *:匹配0个或多个任意字符
  • [abcde]:只能匹配到abcde中的一个,别的就不行,相当于给出了固定的选项
  • [^e]:排除e,只有e匹配不了,其它的都能匹配
  • [a-e]:表示可以匹配a到e闭区间的一个字符
127.0.0.1:6379> set hello 1
OK
127.0.0.1:6379> set hallo 1
OK
127.0.0.1:6379> set hbllo 1
OK
127.0.0.1:6379> set hllo 1
OK
127.0.0.1:6379> set heeeeeeeeeeello 1
OK
127.0.0.1:6379> set heeeeeeeeello 1
OK
127.0.0.1:6379> keys h?llo
1) "hello"
2) "hbllo"
3) "hallo"
127.0.0.1:6379> keys h*llo
1) "hello"
2) "hbllo"
3) "heeeeeeeeeeello"
4) "hallo"
5) "heeeeeeeeello"
6) "hllo"
127.0.0.1:6379> keys h[abe]llo
1) "hello"
2) "hbllo"
3) "hallo"
127.0.0.1:6379> keys h[^e]llo
1) "hbllo"
2) "hallo"
127.0.0.1:6379> keys h[a-e]llo
1) "hello"
2) "hbllo"
3) "hallo"

时间复杂度是O(n),所以在生产环境上,一般会禁止使用keys命令,尤其是keys *

exists

判断key是否存在,时间复杂度O(1)

127.0.0.1:6379> exists hello
(integer) 1
127.0.0.1:6379> exists key1
(integer) 1
127.0.0.1:6379> exists hello key1
(integer) 2

不能将前两个操作等价于第三个操作,我们知道redis是一个客户端-服务器结构的程序,在一次命令的执行就需要客户端向服务器发送一次请求,这个请求是通过网络进行通信的,网络的IO通信速度正常来说要比磁盘IO都要慢的,所以前两次的请求和第三次的请求所消耗的时间是不一样的

del

删除指定key,返回值是删掉的key个数

127.0.0.1:6379> del key2 key3
(integer) 1

expire

给指定的key设置过期时间

  • expire key second
  • pexpire key 毫秒

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

ttl

获取指定key的过期时间,返回秒,-1表示未设定过期时间,-2表示不存在key

Redis的key过期策略

1、定期删除:每隔一段时间检测Redis中是否有过期的key,并删除。每次抽取一部分验证过期时间,以免阻塞

2、惰性删除:在查询的时候某些key可能没有被删除,但是在查询前会先检查key是否过期,如果过期了就删除key并返回nil

通常是两种结合的方式

定时器的实现原理

  • 优先队列:过期时间越早的,优先级越高—但Redis没有采用
  • 基于时间轮实现:把时间轮划分成很多小段

Redis过期策略并没有采用以上两种方案

type

返回key对应的value

持久化

为了保证速度快,Redis决定内存中存数据,硬盘上也存数据,理论上两份数据是完全相同的。硬盘的数据只是在Redis重启的时候用来恢复内存的

RDB(Redis DataBase)—定期备份

二进制格式记录

触发时机:

1、手动触发:程序员通过redis客户端执行命令触发快照。save和bgsave,一般不用save

2、自动触发:在redis配置文件中配置

在redis重启之后会加载

bgsave

实现原理:多进程实现并发,达到在背后偷偷备份不影响客户端的请求的效果。fork在进行内存拷贝的时候并不是无脑把所有数据拷贝一份,如果父子进程的数据都完全一样,直接共用一份数据。只有当某一方内存数据做了修改才会真正意义上触发数据拷贝。称为写时拷贝

AOF(Append Only File)—实时备份

文本格式记录

AOF并不会影响到Redis的请求速度:

1、AOF机制并非是直接让工作线程把数据写入硬盘,而是先写入缓冲区,积累一波之后才统一写入硬盘,写入硬盘的次数比一次写入硬盘的大小影响更大,就好比嗑瓜子仍瓜子

2、AOF是顺序存储的,硬盘上顺序读写数据要比随机读写快的

触发时机:

1、手动触发:

2、自动触发:

相关文章:

  • 基于Spring Boot的宠物爱心组织管理系统的设计与实现(LW+源码+讲解)
  • elementuiPlus日期范围选择el-date-picker动态禁用时间选择
  • ESP32-C3
  • 阿里 Java 岗个人面经分享(技术三面 + 技术 HR 面):Java 基础 +Spring+JVM+ 并发编程 + 算法 + 缓存
  • C语言操作符详解
  • 蓝桥杯备赛 Day14 素数环
  • 【C++学习篇】C++11
  • AlmaLinux9.5安装samba实现与Windows文件共享 笔记250214
  • Spring Boot 常用依赖详解:如何选择和使用常用依赖
  • 20250213刷机飞凌的OK3588-C_Linux5.10.209+Qt5.15.10_用户资料_R1
  • Box Loss:目标检测中精准框定的秘密武器
  • 自动化测试基本流程
  • RabbitMQ解耦订单模块
  • 在 Android 中实现 H5 文件下载功能:跨版本文件存储机制解析
  • 使用数据库sqlite 筛选人脸信息
  • Tomcat添加到Windows系统服务中,服务名称带空格
  • FreeRTOS低功耗总结
  • 【进阶】JVM篇
  • Kernel之Tcpdump和Netfilter
  • CVE-2022-41352 漏洞分析与利用
  • 海航回应“男团粉丝为追星堵住机舱通道”:已紧急阻止
  • 江苏省委社会工作部部长等多人拟在省志愿服务联合会任职
  • 马克思主义理论研究教学名师系列访谈|董雅华:让学生感知马克思主义理论存在于社会生活中
  • 印度外交秘书:“朱砂行动”不针对军事设施,无意升级事态
  • 见微知沪|优化营商环境,上海为何要当“细节控”自我加压?
  • 吴清:基金业绩差的必须少收管理费,督促基金公司从“重规模”向“重回报”转变