Redis学习笔记

技术分享  / 倒序浏览   ©

#楼主# 2020-4-15

跳转到指定楼层

马上注册,分享更多源码,享用更多功能,让你轻松玩转云大陆。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
标签: redis
1.redis是什么

redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可长期化的Key-Value数据库。
2.redis特点

redis以内存作为数据存储介质,读写数据的效率极高。
redis跟memcache不同的是,储存在redis中的数据是长期化的,断电或重启,数据也不会丢失。
redis的存储分为内存存储、磁盘存储和log文件。
redis可以从磁盘重新将数据加载到内存中,也可以通过配置文件对其举行配置,因此,redis才能实现长期化。
redis支持主从模式,可以配置集群,更利于支撑大型的项目。
2.redis应用场景

众多语言都支持Redis,由于redis交换数据快,在服务器中常用来存储一些需要频繁调取的数据,节省内存开销,也极大的提升了速度。将一些热点数据存储到redis中,要用的时间,直接从内存取,极大的提高了速度和节约了服务器的开销。
会话缓存(最常用)、消息队列(支付)、活动排行榜或计数、发布,订阅消息(消息通知)、商品列表评论列表。
3.redis数据类型

字符串String、哈希表Hash、列表List、集合Set、有序集合SortedSet。
4.redis长期化

长期化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。
redis 提供了两种长期化方式:RDB(默认)和AOF。
4.1  RDB

RDB长期化是把当前进程数据生成快照保存到硬盘的过程,触发RDB长期化过程分为手动触发和自动触发。
4.1.1  RDB手动触发

手动触发分别对应save和bgsave下令:
save下令:阻塞当前Redis服务器,直到RDB过程完成为止,对于内存比力大的实例会造成长时间阻塞,线上环境不建议使用。
bgsave下令:redis进程执行fork操作创建子进程,RDB长期化过程由子进程负责,完成后自动结束。阻塞只发生在fork阶段,时间很短。
4.1.2  RDB自动触发

redis内部还存在自动触发RDB的长期化机制,例如一了局景:

  • 使用save相关配置,如‘save m n’表现m秒之内数据集存在n次修改时,自动触发bgsave。
    2)如果从节点执行全量复制操作,主节点自动执行bgsave生成RDB文件并发送给从节点。
    3)执行debug reload下令重新加载redis时,也会自动触发save操作。
    4)默认情况下执行shutdown下令时,如果没有开启AOF长期化功能则自动执行bgsave。
4.1.3  RDB的优点

RDB是一个紧凑压缩的二进制文件,代表redis在某一个时间点上的数据快照。非常适合用于备份,全量复制等场景。比如每6小时执行bgsave备份,并把RDB文件拷贝到远程机器或者文件系统中(如hdfs),用于灾难恢复。Redis加载RDB恢复数据远远快于AOF方式。
4.1.4  RDB的缺点

RDB方式数据没办法做到实时长期化/秒级长期化。由于bgsave每次运行都要执行fork操作创建子进程,属于重量级操作,频繁执行本钱过高。RDB文件使用特定二进制格式保存,Redis版本演进过程中有多个格式的RDB笨笨,存在老版本Redis服务无法兼容新版RDB格式的标题。
针对RDB不适合实时长期化的标题,Redis提供了AOF长期化方式来解决
4.2  AOF

AOF(append only file)长期化:以独立日记的方式记录每次写下令,重启时再重新执行AOF文件中下令到达恢复数据的目的。AOF的主要作用是解决了数据长期化的实时性,目前已经是Redis长期化的主流方式。
4.2.1  使用AOF

开启AOF功能需要设置配置:appendonly yes,默认不开启。
AOF文件通过appendfilename配置设置,默认文件名是appendonly.aof。保存路径同RDB长期化方式一致。通过dir配置指定。AOF的工作流程操作:下令写入(append)、文件同步(sync)、文件重写(rewrite)、重启加载(load),工作流程如下:
1) 所有的写入下令会追加到aof_buf(缓冲区)中。
2) AOF缓冲区根据对应的计谋向硬盘做同步操作。
3) 随着AOF文件越来越大,需要定期对AOF文件举行重写,到达压缩的目的。
5.缓存穿透

一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统查找(比如DB)。一些恶意的哀求会故意查询不存在的key,哀求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透。
如何避免?
1) 对查询结果为空的情况也举行缓存,缓存时间设置短一点,或者该key对应的数据insert了之后清理缓存。
2) 对肯定不存在的key举行过滤。可以把所有的大概存在的key放到一个大的Bitmap中,查询时通过该bitmap过滤。
6.缓存雪崩

当缓存服务器重启或者大量缓存集中在某一个时间段失效,如许在失效的时间,会给后端系统带来很大压力。导致系统崩溃。
如何避免?
1) 在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等候。
2) 做二级缓存,A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2设置为长期。
3) 不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。
参考文章
Redis 下令参考
Redis常见面试题
超强、超详细Redis入门教程
什么是redis,redis能做什么,redis的应用场景
redis 长期化详解,RDB和AOF是什么?他们优缺点是什么?运行流程是什么?
分享淘帖
回复

使用道具

您的回复是对作者最大的奖励

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于作者

璃猫ljr

新手猿

  • 主题

    5

  • 帖子

    5

  • 关注者

    0

Archiver|手机版|小黑屋|云大陆 | 赣ICP备18008958号-4|网站地图
Powered by vrarz.com!  © 2019-2020版权所有云大陆