一、缓存简介

缓存简介

二、缓存分类

缓存分类

三、常见缓存

常见缓存

四、Redis使用

Redis 有 5 ⼤基础数据类型:

  • String——字符串类型
  • Hash——字典类型
  • List——列表类型
  • Set——集合类型
  • ZSet——有序集合类型

其中最常⽤的是字符串和字典类型。

1.字符串类型

字符串类型(Simple Dynamic Strings 简称 SDS),译为:简单动态字符串,它是以键值key-value 的形式进⾏存储的,根据 key 来存储和获取 value 值,它的使⽤相对来说⽐较简单,但在实际项⽬中应⽤⾮常⼴泛。

127.0.0.1:6379> set k1 v1 # 添加数据
OK
127.0.0.1:6379> get k1 # 查询数据
"v1"
127.0.0.1:6379> strlen k1 # 查询字符串的⻓度
(integer) 2

我们也可以使⽤ ex(expires)参数来设置字符串的过期时间,如下代码所示:

127.0.0.1:6379> set k1 v1 ex 1000 # 设置 k1 1000s 后过期(删除)
OK


2.字典类型

127.0.0.1:6379> hset myhash key1 value1 # 添加数据
(integer) 1
127.0.0.1:6379> hget myhash key1 # 查询数据
"value1"

3.列表类型

127.0.0.1:6379> lpush list 1 2 3 # 添加数据
(integer) 3
127.0.0.1:6379> lpop list # 获取并删除列表的第⼀个元素
3

4.集合类型

127.0.0.1:6379> sadd myset v1 v2 v3 # 添加数据
(integer) 3
127.0.0.1:6379> smembers myset # 查询集合中的所有数据
1) "v3"
2) "v1"
3) "v2"

5.有序集合类型

127.0.0.1:6379> zadd zset1 3 golang 4 sql 1 redis # 添加数据
(integer) 3
127.0.0.1:6379> zrange zset1 0 -1 # 查询所有数据
1) "redis"
2) "golang"
3) "sql"

五、持久化

Redis 持久化的⽅式有以下 3 种:

  • 快照⽅式(RDB, Redis DataBase)将某⼀个时刻的内存数据,以⼆进制的⽅式写⼊磁盘;
  • ⽂件追加⽅式(AOF, Append Only File),记录所有的操作命令,并以⽂本的形式追加到⽂件
    中;
  • 混合持久化⽅式,Redis 4.0 之后新增的⽅式,混合持久化是结合了 RDB 和 AOF 的优点,在写⼊的时候,先把当前的数据以 RDB 的形式写⼊⽂件的开头,再将后续的操作命令以 AOF 的格式存⼊⽂件,这样既能保证 Redis 重启时的速度,⼜能减低数据丢失的⻛险。

RDB 优点

  • RDB 的内容为⼆进制的数据,占⽤内存更⼩,更紧凑,更适合做为备份⽂件;
  • RDB 对灾难恢复⾮常有⽤,它是⼀个紧凑的⽂件,可以更快的传输到远程服务器进⾏ Redis 服务
    恢复;
  • RDB 可以更⼤程度的提⾼ Redis 的运⾏速度,因为每次持久化时 Redis 主进程都会 fork() ⼀个⼦进程,进⾏数据持久化到磁盘,Redis 主进程并不会执⾏磁盘 I/O 等操作;
  • 与 AOF 格式的⽂件相⽐,RDB ⽂件可以更快的重启。

RDB 缺点

  • 因为 RDB 只能保存某个时间间隔的数据,如果中途 Redis 服务被意外终⽌了,则会丢失⼀段时间内的 Redis 数据;
  • RDB 需要经常 fork() 才能使⽤⼦进程将其持久化在磁盘上。如果数据集很⼤,fork() 可能很耗时,并且如果数据集很⼤且 CPU 性能不佳,则可能导致 Redis 停⽌为客户端服务⼏毫秒甚⾄⼀秒钟。

AOF 优点

  • AOF 持久化保存的数据更加完整,AOF 提供了三种保存策略:每次操作保存、每秒钟保存⼀次、
    跟随系统的持久化策略保存,其中每秒保存⼀次,从数据的安全性和性能两⽅⾯考虑是⼀个不错的选择,也是 AOF 默认的策略,即使发⽣了意外情况,最多只会丢失 1s 钟的数据;
  • AOF 采⽤的是命令追加的写⼊⽅式,所以不会出现⽂件损坏的问题,即使由于某些意外原因,导致
    了最后操作的持久化数据写⼊了⼀半,也可以通过 redis-check-aof ⼯具轻松的修复;
  • AOF 持久化⽂件,⾮常容易理解和解析,它是把所有 Redis 键值操作命令,以⽂件的⽅式存⼊了
    磁盘。即使不⼩⼼使⽤ flushall 命令删除了所有键值信息,只要使⽤ AOF ⽂件,删除最后的 flushall 命令,重启 Redis 即可恢复之前误删的数据。

AOF 缺点

  • 对于相同的数据集来说,AOF ⽂件要⼤于 RDB ⽂件;
  • 在 Redis 负载⽐较⾼的情况下,RDB ⽐ AOF 性能更好;
  • RDB 使⽤快照的形式来持久化整个 Redis 数据,⽽ AOF 只是将每次执⾏的命令追加到 AOF ⽂件中,因此从理论上说,RDB ⽐ AOF 更健壮。

混合持久化优点

  • 混合持久化结合了 RDB 和 AOF 持久化的优点,开头为 RDB 的格式,使得 Redis 可以更快的启
    动,同时结合 AOF 的优点,有减低了⼤量数据丢失的⻛险。

混合持久化缺点

  • AOF ⽂件中添加了 RDB 格式的内容,使得 AOF ⽂件的可读性变得很差;
  • 兼容性差,如果开启混合持久化,那么此混合持久化 AOF ⽂件,就不能⽤在 Redis 4.0 之前版本
    了。

六、拓展

缓存雪崩

 加锁排队随机化过期时间设置二级缓存

缓存穿透

缓存空结果

缓存击穿

加锁排队
设置永不过期

缓存预热

Redis的使用【Redis】相关推荐

  1. Redis 配置文件介绍——redis.conf

    Units单位 # Note that in order to read the configuration file, Redis must be # started with the file p ...

  2. python redis连接池获取后关闭_python通过连接池连接redis,操作redis队列

    在每次使用redis都进行连接的话会拉低redis的效率,都知道redis是基于内存的数据库,效率贼高,所以每次进行连接比真正使用消耗的资源和时间还多.所以为了节省资源,减少多次连接损耗,连接池的作用 ...

  3. php redis管理系统,php+redis实现小型的用户管理系统

    1.redis.php ,用于连接redis数据库 //实例化 $redis = new Redis(); //连接服务器 $redis->connect("localhost&quo ...

  4. 深入剖析Redis系列(七) - Redis数据结构之列表

    前言 列表(list)类型是用来存储多个 有序 的 字符串.在 Redis 中,可以对列表的 两端 进行 插入(push)和 弹出(pop)操作,还可以获取 指定范围 的 元素列表.获取 指定索引下标 ...

  5. redis(二)redis实战 使用redis进行文章的排序

    2019独角兽企业重金招聘Python工程师标准>>> http://www.beckbi.cn/?p=172 redis实战使用redis进行文章的排序 转载于:https://m ...

  6. Linux下安装Redis php-redis扩展 redis重启shell脚本 超详细!

    前言 前面刚写过nosql其中三款热门产品的对比,这次主要写关于Redis的一些事情,Redis的介绍.安装以及扩展(php-redis,因为我是phper)安装等等.同时是写给我的朋友(cccjjj ...

  7. Redis学习笔记~Redis在windows环境下的安装

    Redis是一个key-value的存储系统,它最大的特点就是可以将数据序列化到文件中. redis存储在服务器的内存或者文件中,它不是session,不是cookies,它只是个更安全,更稳定,更可 ...

  8. php redis 管道技术,Redis管道技术这么厉害,你都用对了吗

    Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务.这意味着通常情况下一个请求会遵循以下步骤: 客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响 ...

  9. Redis系列-远程连接redis并给redis加锁

    假设两台Redis服务器,ip分别为:192.168.1.101和192.168.1.103,如何在101上通过redis-cli访问103上的redis呢?在远程连接103之前,先讲下redis-c ...

  10. Redis概述与Redis集群(一)

    2019独角兽企业重金招聘Python工程师标准>>>   今天给大家分享的是Redis,如有不足之处,敬请指正,那么什么是Redis呢? 一.Redis简介 1.1 Redis是什 ...

最新文章

  1. 翻译的艺术 —— 无能为力的翻译,搞笑的音译
  2. 想学习linux服务器、做运维、部署项目的同学看这,linux部署
  3. Java 异常处理中对于 finally 的一些思考
  4. glib-2.28.6 的编译和安装 以及错误的解决方法
  5. linux 升级java_linux 升级jdk1.8
  6. 动画学信奥 漫画学算法 CSP-J入门级 (二)、C++程序设计 数据结构(依据「NOI大纲」)
  7. 集设分享最全字体帮合集,愿这些作品能给你带来灵感和启迪。
  8. 大型网站技术架构(三)架构核心要素
  9. oracle ora-01476: 除数为 0,Oracle常见错误:ORA-01403 的根本原因和解决方案
  10. 【笔试/面试】—— 奇葩 C/C++ 语法题(二)
  11. Macs Fan Control Pro for mac(电脑风扇控制软件)v1.5.10中文
  12. eclipse搭建简单的web服务,使用tomcat服务
  13. springboot项目PageHelper分页插件的使用
  14. pandas.DataFrame.sample随机抽样
  15. ENVI 5.3 下载及安装
  16. 相关滤波跟踪·MOSSE算法的梳理
  17. 64位win10专业版下载地址
  18. Python+tkinter动态显示与隐藏窗口上的组件
  19. 学周刊杂志学周刊杂志社学周刊编辑部2022年第24期目录
  20. Me_STM32学习笔记

热门文章

  1. 树莓派制作路由器,手机连接wifi
  2. 数说IN语丨万豪酒店再敲警钟!防数据泄露,数博士有妙招!
  3. ChatGPT在教育行业如何应用?
  4. 多网聚合路由系统打通“融媒体”5G丝绸之路
  5. 字节跳动 |go 后端开发工程师社招一二三四五面面经|2022
  6. 工具学习——有哪些好用的语音转文字app
  7. 微信小程序----返回上一页刷新或当前页刷新
  8. MOOS程序解析记录(6)uSimMarine解析1
  9. 如何实现微信小程序的横屏及适配
  10. 框架篇—MVC、MVP、MVCS、MVVM、VIPER使用关系总结