Redis在SpringBoot框架中使用方法

1什么是Redis

  1. Redis是使用标准C编写实现,而且完全在内存中保存数据
  2. Redis是一个开源的,先迚的 key-value 存储可用于构建高性能,可扩展的 Web 应用程序的解决方案
  3. Redis可以看做“内存中的数据结构服务器”。
  4. 目前Redis 支持列表、集合、可排序集合、哈希等数据结构。 Redis支持多种语言,诸如Java 、PHP、Ruby、Python
    、Lua等
  5. Redis官方网网站是:http://www.redis.io/

2 Redis优点

异常快速 : 每秒可以执行大约110000设置操作,81000个读取操作。
支持丰富的数据类型,例如列表,集合,可排序集合,哈希等数据类型。
支持数据的持久化,Redis提供了一些策略将内存中的数据异步地保存到磁盘上,比如根据时间或更新次数。 
Redis是一个多功能实用工具,具有缓存、消息传递等功能。

**

3 SpringBoot访问Redis操作

**
在spring-data-redis工具有一个RedisTemplate对象,可以使用该对象对redis操作。

对jedis的API进行了封装,对象序列化和反序列化进行了封装。

在原始Spring框架中配置RedisTemplate

<bean id="redisFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
    <property name="hostName" value="192.168.95.128"></property>
    <property name="port" value="6379"></property>
</bean>

<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
    <property name="connectionFactory" ref="redisFactory"></property>
    <property name="keySerializer">
        <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
    </property>
</bean>

在SpringBoot框架中使用方法

在pom.xml引入spring-boot-starter-data-redis启动器
在application.properties定义redis访问参数
通过自动配置会创建RedisTemplate对象,直接注入使用

@Autowired
private RedisTemplate<Object, Object> redisTemplate;

@Override
public YdmaResult loadCourse(int id) {
    YdmaResult result = new YdmaResult();
    //先查询Redis缓存
    Course course = (Course)redisTemplate.opsForValue().get("course:"+id);
    if(course == null) {
        //缓存没有,再调用dao查询DB
        course = courseDao.selectByPrimaryKey(id);
        //将查询的course放入Redis缓存
        redisTemplate.opsForValue().set("course:"+id, course);
        System.out.println("从DB查询");
    }

    if(course != null) {
        result.setCode(YdmaConstant.SUCCESS);
        result.setMsg(YdmaConstant.LOAD_SUCCESS_MSG);
        result.setData(course);
    }else {
        result.setCode(YdmaConstant.ERROR1);
        result.setMsg(YdmaConstant.LOAD_ERROR1_MSG);
    }
    return result;
}

4缓存优点

提升系统的查询效率。避免频繁访问DB,把DB数据加载到缓存,从缓存查询。

缓存和DB数据同步性

当对DB做增删改操作时,需要同时更新缓存,保持缓存和DB数据一致性。

1 当对DB进行更新时,对缓存是做更新还是做清除操作?
选择清除

2 先更新DB?还是先更新缓存?
//更新缓存(清除)
//更新DB

5 什么样的数据适合用缓存

  • 共享共用数据(共享)
  • 增删改频率小(增删改少)
  • 频繁访问的数据(查询多)
  • 对实时性要求高的数据(特殊需求)

6 缓存穿透、缓存雪崩、缓存击穿

缓存穿透:访问缓存没找到数据,查询DB数据,DB也没有
解决方案:将DB查询的空值也放入缓存,设置一个短的有效期

缓存雪崩:在某个时刻或时间段,缓存数据突然清空,导致大量请求访问DB数据
解决方案:针对不同类型数据设置不同缓存有效期,或随机指定有效期

缓存击穿:高并发访问某个一个缓存key,结果key突然失效,导致高并发访问DB数据
解决方案:设置永不过期;或者采用互斥锁将代码锁定

7 Redis持久化机制

redis相对于memcached缓存工具相比,存储类型丰富、支持持久化。

redis支持RDB和AOF两种持久化机制(将内存数据写入磁盘文件)。

  1. RDB(快照模式)

可以在某一时刻将内存数据拍照,写入一个rdb文件中。特点:恢复快,但是会存在丢失问题。

save //备份命令,只要将rdb文件放到redis安装目录重新启动服务就会自动恢复。

//默认配置1、5、15分钟备份一次
save 900 1  //900秒发生1次key变化就自动save
save 300 10 //300秒发生10次key变化就自动save
save 60 10000 //60秒发生10000次key变化就自动save
  1. AOF(日志模式)

可以将执行redis操作命令写入到一个aof文件中。特点:恢复慢,但是完整性好。默认关闭。

appendonly yes//yes开启aof持久化,no关闭
appendfilename "appendonly.aof" //aof文件名
# appendfsync always //一直记录,每个命令记录
appendfsync everysec //1秒记录一次
# appendfsync no //不记录
如果RDB和AOF同时启用,恢复时采用aof文件恢复。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值