1.@EnableCaching注解,@Cacheable注解,@CachePut注解
1.@EnableCaching
//开启AOP方式的缓存应用
2.@Cacheable
/**
* 由此注解描述的方法为切入点方法,此方法执行时,底层会通过AOP机制
* 先从缓存取数据,缓存有则直接返回,缓存没有则查数据,最后将查询的数据
* 还会向redis存储一份
* @param id
* @return
*/
@Cacheable(value = "menuCache",key = "#id")//使用方法参数的id作为key
@Override
public Menu selectById(Long id) {
log.info("Get Data from Database");
return menuMapper.selectById(id);
}
3.@CachePut
/**
* @CachePut 注解描述的方法同样是要给缓存切入点方法
* 主要用于更新缓存中的数据
* @param menu
* @return
*/
@CachePut(value = "menuCache",key = "#menu.id")//value是方法的返回值
@Override
public Menu updateMenu(Menu menu) {
menuMapper.updateById(menu);
return menu;
}
2.Redis数据持久化
2.1持久化方式
Redis中为了保证在系统宕机(类似进程被杀死)情况下,能更快的进行故障恢复,设计了两种数据持久化方案,分别为rdb和aof方式。
2.2配置准备工作
redis.io官方:
https://redis.io/topics/config/
2.3Rdb方式持久化
Rdb方式是通过手动(save-阻塞式,bgsave-异步)或周期性方式保存redis中key/value的一种机制,Rdb方式一般为redis的默认数据持久化方式,系统启动时会自动开启这种方式的持久化机制。
实验1:
实验2:
实验3:
2.4Aof方式数据持久化
Aof方式是通过记录写操作日志的方式,记录redis数据的一种持久化机制,这个机制默认是关闭的。
AOF方式持久化实践:
3.Redis事务
事务是一个业务,也可以看成是一个逻辑工作单元,是为了保证业务的完整,数据的正确而推出的一种控制机制,原则上来讲,事务必须要满足ACID四个特性(原子性,一致性,隔离性,持久性),在多个事务
在并发执行,为更好保证事务的四个特性的实现,通常会对事务加锁,Redis为了性能,采用了乐观锁方式进行事务控制,它使用watch命令监视给定的key,当exec(提交事务)的时候,如果监视的key从调用watch后发生过变化,则整个事务会失败。也可以调用watch多次监视多个key。注意watch的key是对整个连接有效的,如果连接断开,监视和事务都会被自动清除。当然exec,discard,unwatch命令都会清除连接中的所有监视。
Redis保证一个事务中的所有命令要么都执行,要么都不执行(原子性)。如果在发送EXEC命令前客户端断线了,则Redis会清空事务队列,事务中的所有命令都不会执行。而一旦客户端发送了EXEC命令,所有的命令就都会被执行,即使此后客户端断线也没关系,因为Redis中已经记录了所有要执行的命令。
3.1基本指令
multi:开启事务
exec:提交事务
discard:取消事务
redis事务太简单,没有回滚,只有取消。
当出现错误指令时,事务也会自动取消。
watch:监控,如果监控的值发生变化,则提交事务时会失败 /watch ticket 乐观锁,对值进行观察,改变则事务失败。
unwatch:取消监控
4.总结
Redis中的save和bgsave有什么不同?
RDB持久化机制有哪些优点?
RDB持久化机制有哪些缺点?
如何理解AOF方式中的rewrite操作?
AOF持久化机制有哪些优点?
AOF持久化机制有哪些缺点?
如何选择redis的持久化方式?
为什么AOP方式应用redis?
优势-简单,劣势-不灵活。
Spring工程中CacheManager作用是什么?
管理缓存,定义缓存配置及实现,也可以定制。
为什么要持久化?
更好的保证数据的可靠性,防止数据断电丢失。
生产环境下如何应用Rdb和Aof的持久化方式?
两种都要配置。