美文网首页
redis相关以及redis做分布式锁可能出现的问题

redis相关以及redis做分布式锁可能出现的问题

作者: 李彬燊666 | 来源:发表于2019-07-11 23:53 被阅读0次

    链接  : https://blog.csdn.net/ligupeng7929/article/details/79603060

    在Redis中,允许用户设置最大使用内存大小server.maxmemory,当Redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。1.volatile-lru:从已设置过期的数据集中挑选最近最少使用的淘汰2.volatile-ttr:从已设置过期的数据集中挑选将要过期的数据淘汰3.volatile-random:从已设置过期的数据集中任意挑选数据淘汰4.allkeys-lru:从数据集中挑选最近最少使用的数据淘汰5.allkeys-random:从数据集中任意挑选数据淘汰6.noenviction:禁止淘汰数据redis淘汰数据时还会同步到aof

    相关知识:redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。

    redis 提供 6种数据淘汰策略:

    voltile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰

    volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰

    volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰

    allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰

    allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰

    no-enviction(驱逐):禁止驱逐数据

    redis的数据类型

    http://www.imooc.com/article/255861

    五大数据类型的区别:

    list  ------>有序的集合,可重复数据,可插入多个null值   【linedList 或者ziplist】

    set  ----->它是一个无序集合,包含的元素不重复,只能插入一个null值

    hash---->  结构  :key  value[field,value]

    Sorted sets 类型(有序集合类型) :[ziplist,skiplist+hashtable]

    类似于Map的key-value对,key有序 ,不重复

    value : 浮点数,称为 score有序 :内部按照score 从小到大的顺序排列  

    STring :

    使用redis做事务:

    redis做缓存可能出现的问题

    1:缓存穿透

            问题缓存穿透是指查询一个一定不存在的数据

            解决方案:    空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。

    2:缓存雪崩

            问题:缓存雪崩是指在我们设置缓存时采用了相同的过期时间,导致缓存在某一时刻同时失效,请求全部转发到DB,DB瞬时压力过重雪崩。

               解决方案: 原有的失效时间基础上增加一个随机值,比如1-5分钟随机,这样每一个缓存的过期时间的重复率就会降低,就很难引发集体失效的事件。

    3:缓存击穿

            问题:缓存在某个时间点过期的时候,恰好在这个时间点对这个Key有大量的并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮

            解决方案:分布式锁

    在访问数据库资源之前,我们使用redis给访问数据库的程序加上锁,以及在结束的时候释放锁

              代码:Long lock = jedis.setnx("lock", "23");

                释放锁:jedis.del("lock");

    4:缓存的使用模式

            Cache-Aside和Cache As SoR

    Cache-Aside:  业务代码围绕Cache编写,由业务代码维护缓存;

    双写模式

    5:分布式锁的问题:

    5.1:reisdis 或者 redison

    redison:Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务

    6:redis主从复制和Mysql 的主从复制

    Mysql 的主从复制:

    Mysql数据库的主从复制:

    步骤一:主库db的更新事件(update、insert、delete)被写到binlog 

    步骤二:从库发起连接,连接到主库 

    步骤三:此时主库创建一个binlog dump thread线程,把binlog的内容发送到从库 

    四:从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到relay log. 

    五:还会创建一个SQL线程,从relay log里面读取内容,从Exec_Master_Log_Pos位置开始执行读取到的更新事件,将更新内容写入到slave的db. 

    redis 的主从复制:

    redis主从复制的原理:

    全量同步:

    -从服务器连接主服务器,发送SYNC命令; 

    -  主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令; 

    -  主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令; 

    -  从服务器收到快照文件后丢弃所有旧数据,载入收到的快照; 

    -  主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令; 

    -  从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令;

    redis的哨兵模式:

    redis的数据模型中年String 中的key最多可以放多少个?int 的最大值(2的32次方)

    redis有一个他的最大内存,超过之后会怎么样?怎么解决?
    1:淘汰策略

    2:集群

    Redis 的分布式锁:
    https://www.cnblogs.com/linjiqin/p/8003838.html

    相关文章

      网友评论

          本文标题:redis相关以及redis做分布式锁可能出现的问题

          本文链接:https://www.haomeiwen.com/subject/sufzwqtx.html