首页 > 数据库 >Redis基本知识

Redis基本知识

时间:2024-03-02 11:22:53浏览次数:27  
标签:AOF 缓存 数据库 基本知识 Redis 访问 数据

一、什么是Redis
Redis是一种基于内存的数据库,对数据的读写操作都是在内存中完成,因此读写速度非常快,用于存储键值对、缓存、消息队列、分布式锁等。

二、Redis和mencached的区别
相同:都是基于内存的数据库,读写都很快
不同:
1.Redis支持的数据类型更丰富(string、list、hash、set、zset);而mencached只支持string
2.Redis支持数据的持久化,可以将内存中数据保存在磁盘中,重启的时候可以重新加载使用;mencached没有持久化功能
3.Redis原生支持集群模式

三、Redis实现持久化
1.AOF日志:Redis在执行完一条写操作命令后,把该命令以追加的方式写入到一个文件里面(先执行后写入),重启Redis时会读取该文件里的命令逐一操作来进行数据恢复
2.AOF重写机制:当AOF日志过大时,读取每一条键值对最新的操作命令记录到新的AOF文件中。相当于压缩了AOF日志。
3.RDB快照:每次执行把内存中所有的数据都记录到磁盘中,这样恢复数据的效率会比AOF高些。用save(主线程里执行)和bgsave命令。
4.混合持久化:工作在AOF日志重写的过程。新的AOF文件前半部分是RDB格式的全量数据,后半部分是AOF格式的增量数据。重启时由于前半部分是RDB全量数据所以加载速度会很快,后半部分的增量数据会使丢失的数据更少。

四、Redis实现服务高可用
1.主从复制:主服务器进行读写操作;从服务器只进行读操作;主服务器将写操作同步到从服务器
2.哨兵模式:哨兵群进行监控,当主服务器发生故障,选举出新的主服务器

五、Redis过期删除策略
1.惰性删除:数据库访问key时才检测key是否过期
2.定期删除:每隔一段时间随机从数据库中取出一定数量的key进行检查

六、Redis内存淘汰算法
1.LRU(least recently used,最近最少使用算法):最新操作的键会被移动到表头
2.Redis采用的近似LRU算法:在Redis对象结构体中添加一个额外字段来记录此数据的最后一次访问时间,使用随机采样的方式淘汰数据

七、Redis的三大缓存问题
1.缓存雪崩:大量数据同时过期,或Redis故障宕机,大量请求直接访问数据库导致数据库压力骤增
解决方法:
(1)均匀设置过期时间
(2)设置互斥锁。访问到过期数据,在对其进行缓存重构时加锁(锁要设置超时时间避免阻塞)。未能获得互斥锁的要么等待要么返回默认值或空值
(3)后台更新缓存
(4)服务器熔断或请求限流
(5)构建高可用的Redis主从集群
2.缓存击穿:频繁被访问的热点数据过期了,也会导致大量请求直接访问数据库
解决方法:
(1)互斥锁
(2)后台更新缓存
3.缓存穿透:数据在缓存和数据库里都没有。缓存里找不到->访问数据库->数据库找不到无法重构缓存
解决方法:
(1)限制非法请求
(2)设置空值或默认值,后续请求得到该值后不会继续访问数据库
(3)使用布隆过滤器(位图+哈希函数)。写入数据库数据时用布隆过滤器做标记,缓存失效后去布隆过滤器里快速判断数据是否存在。这样请求只会访问混存和布隆过滤器

八、Redis保证数据库和缓存一致性
先更新数据库,再删除缓存。并用以下两种方法异步操作缓存
1.重试机制:引入消息队列记录删除缓存的操作。删除缓存失败的话可以从消息队列中读数据重试删除操作
2.订阅MySQL binlog:更新数据库的时候产生一条日志记录在binlog里,通过订阅binlog日志拿到具体要操作的数据再去删除缓存

参考文档:小林coding图解Redis

标签:AOF,缓存,数据库,基本知识,Redis,访问,数据
From: https://www.cnblogs.com/fly-smart/p/18048421

相关文章

  • Redis Docekr WARNING Memory overcommit must be enabled! Without it, a background
    Docker容器ssr-redis|1:C01Mar202422:00:46.869#oO0OoO0OoO0OoRedisisstartingoO0OoO0OoO0Oossr-redis|1:C01Mar202422:00:46.869#Redisversion=7.0.10,bits=64,commit=00000000,modified=0,pid=1,juststartedssr-redis|1:C01Mar......
  • Nginx基本知识
    一、什么是nginxNginx是高性能的HTTP和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负载的考验,有报告表明能支持高达50000个并发连接数。二、正向/反向代理正向代理:nginx作为客户端去访问服务器。反向代理:nginx作为服务器接收请求。此时反向代理服务器和目标服务......
  • redis自学(9)List
    ListRedis的List类型可以从首、尾操作列表中的元素:  哪一个数据结构能满足上述特征? LinkedList:普通链表,可以从双端访问,内存占用较高,内存碎片较多 ZipList:压缩列表,可以从双端访问,内存占用低,存储上限低 QuickList:LinkedList+ZipList,可以从双端访问,内存占用较低,......
  • ubuntu22.04安装配置redis
    本操作在虚拟机上安装Redis1)更新系统sudoaptupdatesudoaptupgrade2)安装Redissudoaptinstallredis-server3)测试Redis是否工作redis-cli--versionsystemctlstatusredis#注意:如果你的服务器上仅用了ipv6,将会启动失败。4)登入redis-cliredis-cli配置Redis......
  • 面试必备:一线大厂Redis缓存设计规范与性能优化
    说在前面你是否在使用Redis时,不清楚Redis应该遵循的设计规范而苦恼?你是否在Redis出现性能问题时,不知道该如何优化而发愁?你是否被面试官拷问过Redis的设计规范和性能优化而回答不出来别慌,看这篇文章就行了本文,已收录于,我的技术网站aijiangsir.com,有大厂完整面经,工作技术,架构......
  • 亿级电商流量,高并发下Redis与MySQL的数据一致性如何保证
    前言:只要使用到缓存,无论是本地缓存还是使用Redis做缓存,那么就会存在数据同步不一致的问题。先读取缓存,缓存数据有,则立即返回结果如果缓存中没有数据,则从数据库中读取数据把读取到的数据同步到缓存中,提供下次读请求返回数据这样的作法是大多数人使用缓存的方式,这样能......
  • Redis基础数据结构
    简单动态字符串SDS在Redis里面字符串随处可见比如//设置一个(key,value)为msg和helloworld的键值对setmsg"helloworld"在这里,msg和helloworld都是一个字符串.Redis自己构建了一个名为SDS(SimpleDynamicString简单动态字符串)的类,用于作为Redis底层字符串的默认实......
  • Redis使用方法
    Widows版下载Windows版安装包 Redis-x64-3.2.100,由于Redis是绿色软件,解压后即可使用。我放在c盘programfiles中。 使用命令行开启Redis服务 在Redis-x64-3.2.100文件夹内,地址栏输入cmd,弹出命令行窗口,输入redis-server.exeredis.windows.conf,即可开启服务。可见本服务......
  • Redis哨兵模式部署
    Redis哨兵模式部署集群架构这里我们搭建一个三节点形成的Sentinel集群,来监管Redis主从集群,架构如下:这里在3台服务器中开启3个redis实例,信息如下:ipport角色172.18.1.106379/27001master172.18.1.116379/27001slave172.18.1.136379/27001slave安装r......
  • Redis Watch机制
    作用在事务被EXEC执行之前如果被监视的KEY发生了变化则拒绝执行当前事务不支持事务已经执行的命令回滚watch机制作用于事务开始之前的检查而非事务中某一条被监视的Key命令执行前检查。Redis事务没有回滚机制。Redis事务不支持回滚的原因是:Redis官方认为Redis命令执行不......