当前位置: 首页 > Linux

Redis缓存

时间:2023-04-06 21:26:11 Linux

1.redis1.1什么是redisRedis是一个开源(BSD许可)的内存数据结构存储系统,可作为数据库、缓存和消息中间件使用。它支持多种类型的数据结构,例如字符串、散列、列表、集合、带范围查询的排序集合、位图、hyperloglogs和地理空间(geospatial)索引半径查询。Redis内置了复制、LUA脚本(Luascripting)、LRU驱动事件(LRUeviction)、事务(transactions)和不同级别的磁盘持久化(persistence),并通过Redis哨兵(Sentinel)和自动分区(Cluster)提供高可用性(highavailability)。速度:读:112000/s写:86000/s500000/s1.2redis的作用引入缓存机制,可以有效减少用户访问物理设备的次数,从而提高相应的速度;1.2如何设计缓存?1.缓存如何存储数据?应该采用什么样的数据结构?K-V密钥的唯一性2.缓存数据的容量要动态维护,不需要的数据要提前删除。LRU算法/LFU算法/随机算法/TTL算法3.缓存数据保存在内存中,但断电时内存被擦除。周期性持久化内存数据(写入磁盘)4.单个缓存服务器性能不足,一般需要搭建集群(实现高可用).5.使用C语言开发。2Redis属性说明2.1Redis持久化策略2.1.1Redis中的记录为什么要持久化到内存中?如果内存掉电或者服务器宕机,内存数据会直接丢失。业务这是不允许发生的。因此,数据需要定期维护。2.1.2RDB模式说明:RDB模式是Redis默认的持久化策略。无需手动打开它。特点:1、Redis会定时进行RDB持久化操作。缺点:可能会导致内存数据丢失。2、RDB记录内存数据的快照,后续的快照会覆盖之前的快照。每次只保留最新的数据。它更有效率。命令:1).save命令需要立即执行持久化操作save会造成线程阻塞。2).bgsave命令在后台执行持久化操作,不会造成阻塞。异步操作不能保证立即执行2.1.3AOF模式说明:AOF模式默认关闭,需要手动开启。如果开启AOF模式,RDB模式将失效。但是如果手动执行save命令,也会生成rdb文件。1).开启AOF模式的特点:1、AOF模式记录了程序的执行过程。所以它可以保证数据不会丢失。2、由于AOF记录了程序的运行过程,整个持久化文件比较大,需要定期维护。效率低下。1.4RDB和AOF模式持久化对比1).RDB模式save9001ifin900秒内,如果有更新操作,则持久化一次save30010save6010000操作越快,持久化周期越短。2).AOF模式appendfsyncalways如果用户执行更新操作,会持久化一个异步操作appendfsynceverysec每秒操作一次appendfsyncnonoactiveoperationgeneralNo.2.1.5关于RDB和AOF总结策略:如果允许有少量数据丢失,则首选RDB模式,如果不允许丢失数据,则首选AOF模式。企业战略:既要满足效率,又要满足数据不丢失。Host:使用RDB模式slave:AOF模式2.1.6Question问题1:redis服务器误执行flushAll命令,如何处理?解决方法:需要编辑从库中的AOF文件,删除多余的flushAll命令,然后重启redis。问题2:误删除了aof文件,如何处理???答:杀人祭天!!!2.2Redis内存策略2.2.1LRU算法LRU是LeastRecentlyUsed的缩写,即最近Leastused是一种常用的页面置换算法,选择最长时间未被使用的页面并淘汰掉.这个算法给每个页面一个访问域,用来记录一个页面从上次被访问到现在所经历的时间t。在淘汰一个页面时,选择现有页面中t值最大的页面,即最近最少使用的页面进行淘汰。判断维度:时间T2.2.2LFU算法LFU(leastfrequentlyused(LFU)page-replacementalgorithm)。即最不常用页面替换算法要求在页面替换时替换引用计数最小的页面,因为经常使用的页面应该有更大的引用计数。但是有些页面一开始用的很多,后面就不会用了。这样的页面会在内存中保留很长时间,因此可以将引用计数寄存器每隔一段时间右移一位,形成一个按指数衰减的平均使用次数。判断维度:使用次数2.2.3随机算法随机算法2.2.4TTL算法提前删除剩余时间短的数据。2.2.5Redis内存优化策略volatile-lru使用LRU算法allkeysindatawithtimeout设置-lru所有数据使用LRU算法删除volatile-lfuDatawithtimeout使用LFU算法删除allkeys-lfu所有数据使用LFU算法删除volatile-random设置了超时时间的数据使用随机算法allkeys-random所有数据随机算法volatile-ttl在设置超时时间后使用TTL算法noeviction,什么都不做,只返回错误信息。2.3Redis常见问题2.3.1缓存穿透说明:在高并发环境下,用户既访问数据库又访问缓存。不存在的数据称为缓存穿透。解决方法:1)。禁用IP并限制IP访问。2).将当前访问限制为每秒最多3次。3).布隆过滤器Bloomfilter布隆过滤器(BloomFilter)是布卢姆在1970年提出的,它实际上是一个长二进制向量和一系列随机映射函数。布隆过滤器可用于检索元素是否在集合中。它的优点是空间效率和查询时间都比一般算法好很多,缺点是存在一定的误识别率和删除难度。原理:Bloomfilter优化:问题:如何解决hash碰撞问题知识点:由于hash碰撞问题,可能有多个key位置相同,所以得出结论,如果Bloomfilter认为数据存在,则数据可能存在。如果布隆过滤器认为数据不存在,则数据一定不存在。如何降低hash冲突的概率:答:1.扩大二进制向量的位数。2.在比特数增加/函数适当增加的情况下增加哈希函数的个数,可以有效降低哈希碰撞的概率。默认值为0.032.3.2什么是缓存击穿说明:某(一个)热点数据在缓存中突然失效,导致大量用户直接访问数据库,导致并发压力过大,出现异常。解决方法:1。尽量设置热点数据的超时时间2.采用随机算法设置多级缓存超时时间。2.3.3什么是缓存雪崩描述:在缓存服务器中,由于大量缓存数据失效,导致用户访问命中率低,导致直接访问数据库。问题分析:flushAll命令可能会造成缓存雪崩。在设置超时时间的时候,应该使用随机算法,可以使用多级缓存来有效防止。3.Linux系统安装redis3.1上传Redis1)。上传redis2)。解压redis服务[root@localhostsrc]#tar-xvfredis-5.0.4.tar.gz3)。移动文件/修改文件名3.2安装Redis说明:在Redis的根目录下执行以下命令1).make2).makeinstall3.3修改redis配置文件,修改redis根目录下的redis.conf文件1).删除IP绑定2)。修改保护方式3).启动后台3.4Redis服务器命令说明:Redis服务运行时,必须依赖配置文件redis.conf。操作redis时,最好在根目录下操作1).启动redisredis-serverredis.conf2).进入redis客户端redis-cli-p6379ctrl+c退出客户端3).关闭redisserver方法二:redis-cli-p6379shutdown说明:如果操作端口为默认端口(6379)6379不可写;4redis分片机制4.1redis性能优化说明:单个redis的内存容量是有限的。但是如果需要实现缓存存储的数据量很大,就应该使用多个Redis节点。4.2Redis分片机制定义4.3Redis分片机制配置4.3.1配置规划说明:分别准备3台redis服务器6379/6380/63814.3.2准备3个配置文件,修改各自的端口号为638063814.3.3启动redis服务器4.3.4查看redis启动状态5.Redis哨兵机制5.1Redis分片机制问题描述:如果redis分片中的某个节点宕机,可能会影响整个服务的运行。Redis分片并没有实现高可用。5.2Redis主从结构搭建5.2.1复制配置文件5.2.2准备3redis5.2.3主从构建命令1:info复制命令2:slaveofIPPORT主从挂载命令查看主从结构状态about主从结构说明:master和slave都知道当前master-slave的状态,只有master可以写。从机只能读。5.2Redis哨兵机制的工作原理1).当哨兵启动时,它会首先监控主机,并从主机获取当前所有节点的状态。同时哨兵启动心跳检测机制。2).当主机宕机时,由于哨兵有PING-PONG机制,发现主机宕机,哨兵开始选举。3).选举成功后,选举出新的主机,此时其他节点都是新的主机。5.3编辑哨兵配置文件1)关闭保护模式2)。开启后台运行3).编辑监控配置4).修改选举时间5.4启动sentinel服务命令:redis-sentinelsentinel.conf6集群机制是sharding和sentry机制的结合,不使用sentinel服务。当主机出现故障时,其余主机会选择主机,因此无需担心sentinel宕机和整个服务运行的形象。一般一主两三从,至少三个6.1三主机搭建集群:规划三主机三从,端口号7000~7005;在redis下创建cluster文件夹,在cluster目录下创建6个目录7000~7005,在其中一个目录下复制一个redis.conf文件(在redis个人目录下,未被污染)修改配置文件,见rediscluster详细构建步骤,将修改后的配置文件复制到剩下的五个目录下,然后复制这五个目录下的配置文件,将7000替换成对应的数据(:%S/7000/7001/g),开始/停止创建一个通过脚本命令创建redis集群:redis-cli--clustercreate--cluster-replicas1192.168.126。129:7000192.168.126.129:7001192.168.126.129:7002192.168.126.129:7003192.168.126.129:7004192.168.126.129:70056.2构建成功