Redis总结(看着一篇就够啦)

要了解redis 首先你得有redis

下载地址

1、Github下载地址:Releases · microsoftarchive/redis · GitHub
2、百度网盘下载地址 百度网盘 请输入提取码 密码:kdfq

正文

 一:为什么使用redis

        1.单线程

        2.速度快

        3.丰富的数据类型(set,zset,list,hash,string)

        4.支持持久化

        5.存储在硬盘上

        6.单个key或value可达1G

二:redis中keys和scan对比

        redis中的keys是返回符合条件的key并且是精准的不会有重复的

        scan是在数量未知或数量较大的情况下使用scan遍历获取所有的key

三:什么是雪崩,穿透,击穿

        1.雪崩:是指缓存中的数据在同一时间大面积失效,所有请求来到服务器上,从而导致服务器宕机。

         解决方式: 1.给key设置不同的过期时间 2.保证redis高可用 搭集群

        2.穿透:穿透是指用户恶意访问数据库和缓存中不存在的数据 这时请求会来的缓存中,若查无此数据,则会来到数据库中进行查询,数据库中也没有,这个时候就会导致服务器宕机

        解决方式:1.给缓存中设置一个null值 2.使用布隆过滤器(布隆过滤器(Bloom Filter)详解 - 李玉龙 - 博客园 (cnblogs.com))

        3.击穿:是指一条数据过期时,所有请求都来到了数据库中

        解决方式:1.设置热点数据永不过期2.加锁:每次只能让一个人进行访问,访问过后把数据加载到缓存中

四:redis删除大key

redis删除大key(hash,list,set,zset)时,由于redis是单线程的,在删除或清理千万级别的key是,主线程会忙于删除key,从而导致redis服务异常

        如何解决:1.分批删除key 2.采用unlink(4.0之后新推出)开启一个线程来执行删除操作

 unlink和del的区别

 unlink基本可以代替del 但个别场景还需要del.例如在空间累积量过快的时候不适合用unlink,因为unlink不是立刻释放空间

五:redis定时删除策略

        reids会把设置了过期时间的key放到字典数据中,每100ms扫描一次

六:redis序列化的几种方式

 1.jdk序列化方式(默认)javaSerializationRedisSerizatir,这个序列化方式必须时间serialiable接口,不方便人工排查

2.json序列化方式GenericJackson2JsonRedisSerialize 这个redis会获取数据失败,原因是jdk1.8之后会增加一个LockDate的类 GenericJackson2JsonRedisSerialize只能识别一个@Class属性,

添加这个属性解决了反序列化,但是json字符串占用较大

3.String序列化,如果redis中key和value都是string类型 那么可以用此序列化方式

4.xml序列化

七:解决缓存和数据库双写不一致的问题

        1. 先更新数据库在更新缓存(脏读)
        脏读 一个事务读取了另一个事务未提交的数据
        2. 先更新数据库 在删除缓存
        3. 先增加数据库 在更新缓存
  11.reids持久化的方式
   RDB: redisDataBase 
   AOF: appendOnlyFile
   RDB主要存储快照,会造成数据丢失 AOF不会造成数据丢失,但是如果数据量过大的时候,出现删除操作,恢复是比较慢的 
   建议两种方式一起使用


版权声明:本文为qq_64612259原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。