Spring整合redis

将redis整合到项目查询中:(在service中)

  • 1、缓存的简单设计:
    • 连接缓存
    • 查询缓存
    • 缓存中没有,查询sql
    • sql查询到的数据存入redis
  • redis的整合步奏
    • 设计数据存储策略
      • 数据对象名key设计:数据对象id:对象属性(user(表):wz(主键id):password)

    • 加入一个redis的工厂单例bean,
      • 写一个reids工具类,用来将redis的池初始化到spring容器中

      • 写一个spring整合redis的配置类:将redis的连接池创建到spring容器中

  • 缓存在高并发和安全压力下的问题:
    • 缓存穿透:查询一个数据库中不存在的数据,比如商品详情,查询一个不存在的ID,每次都会访问DB,如果有人恶意破坏,很可能直接对DB造成过大地压力。
      • 解决方案:
        • 1.当通过某一个key去查询数据的时候,如果对应在数据库中的数据都不存在,我们将此key对应的value设置为一个默认的值,比如“NULL”,并设置一个缓存的短暂的过期时间,这时在缓存失效之前,所有通过此key的访问都被缓存挡住了。后面如果此key对应的数据在DB中存在时,缓存失效之后,通过此key再去访问数据,就能拿到新的value了。
        • 2.常见的则是采用布隆过滤器(可以用很小的内存保留很多的数据),将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。(布隆过滤器:实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。)
    • 缓存雪崩:缓存中集体key失效,
      • 解决:在原有的失效时间上加一个随机值,这样每一个缓存的失效时间的重复率降低,很难引起集体失效
    • 缓存击穿:缓存的热点key失效,导致大量的sql访问db,
      • 解决:使用redis数据库的分布式锁,解局mysql的压力问题
        • 1、redis自带的分布式锁,set ex nx
          • set nx :当key不存在的时候,才能成功。当多个请求同时请求redis的时候,只会有1个请求set成功,其他请求返回nil。等待过期时间结束,其他请求才能set

        • 2、redisson框架(NIO):一个redis的juc的实现,既有jedis的功能,又有juc的lock功能的客户端实
        • 将redis整合到项目查询中:(在service中)
        • 1、缓存的简单设计:
          • 连接缓存
          • 查询缓存
          • 缓存中没有,查询sql
          • sql查询到的数据存入redis
        • redis的整合步奏
          • 设计数据存储策略
            • 数据对象名key设计:数据对象id:对象属性(user(表):wz(主键id):password)

          • 加入一个redis的工厂单例bean,
            • 写一个reids工具类,用来将redis的池初始化到spring容器中

            • 写一个spring整合redis的配置类:将redis的连接池创建到spring容器中

        • 缓存在高并发和安全压力下的问题:
          • 缓存穿透:查询一个数据库中不存在的数据,比如商品详情,查询一个不存在的ID,每次都会访问DB,如果有人恶意破坏,很可能直接对DB造成过大地压力。
            • 解决方案:
              • 1.当通过某一个key去查询数据的时候,如果对应在数据库中的数据都不存在,我们将此key对应的value设置为一个默认的值,比如“NULL”,并设置一个缓存的短暂的过期时间,这时在缓存失效之前,所有通过此key的访问都被缓存挡住了。后面如果此key对应的数据在DB中存在时,缓存失效之后,通过此key再去访问数据,就能拿到新的value了。
              • 2.常见的则是采用布隆过滤器(可以用很小的内存保留很多的数据),将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。(布隆过滤器:实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。)
          • 缓存雪崩:缓存中集体key失效,
            • 解决:在原有的失效时间上加一个随机值,这样每一个缓存的失效时间的重复率降低,很难引起集体失效
          • 缓存击穿:缓存的热点key失效,导致大量的sql访问db,
            • 解决:使用redis数据库的分布式锁,解局mysql的压力问题
              • 1、redis自带的分布式锁,set ex nx
                • set nx :当key不存在的时候,才能成功。当多个请求同时请求redis的时候,只会有1个请求set成功,其他请求返回nil。等待过期时间结束,其他请求才能set

              • 2、redisson框架(NIO):一个redis的juc的实现,既有jedis的功能,又有juc的lock功能的客户端实现
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值