缓存分为本地缓存和分布式缓存。以 Java 为例,使用自带的 map 或者 guava 实现的是本地缓存,最主要的特点是轻量以及快速,生命周期随着 jvm 的销毁而结束,并且在多实例的情况下,每个实例都需要各自保存一份缓存,缓存不具有一致性。
使用 redis 或 memcached 之类的称为分布式缓存,在多实例的情况下,各实例共用一份缓存数据,缓存具有一致性。缺点是需要保持 redis 或 memcached服务的高可用,整个程序架构上较为复杂。
一.redis缓存(分布式缓存)
039_springboot炖cache_redis_哔哩哔哩_bilibili
参考链接的 注解实现redis的缓存特别有用....
SpringBoot整合Redis缓存_悠然予夏的博客-优快云博客_springboot整合redis缓存
二. springboot+谷歌的cache_guava(本地缓存)
Guava Cache是Google公司开发⼀种本地缓存机制,之所以叫本地缓存,是因为它不会把缓存数据放到外部⽂件或者其他服务器上,⽽是存放到了应⽤内存中。
Guava Cache的优点是:简单、强⼤、轻量级。
GuavaCache之后,被它的简单、强大、及轻量级所吸引。它不需要配置文件,使用起来和ConcurrentHashMap一样简单,而且能覆盖绝大多数使用cache的场景需求!一般而言,对于那些频繁需要查询比对的热点数据,我们采用使用缓存。
Springboot-本地缓存(Google Guava Cache)_于问问的博客-优快云博客_springboot本地缓存
springBoot集成guava cache实现本地缓存_兢兢业业的子牙的博客-优快云博客_guava cache springboot
还有Spring基于注解实现的缓存
Spring缓存注解_xyzko1的博客-优快云博客_spring缓存注解
三.锁---分布式锁(线程锁,进程锁), springboot实现分布式锁
线程锁: 主要用来给方法和代码块来加锁,多个线程同时访问被加锁的方法或者代码块时,同一时间只有一个线程在执行,其他线程只能访问该对象中的非加锁代码块
进程锁: 为了控制操作系统中多个进程访问一个共享资源,可以使用本地系统的信号量控制
分布式锁: 当多个进程不在同一个系统中时,使用分布式锁控制多个进程对资源的访问
分布式锁的实现思路3种
1.数据库表加锁
2.redis的分布式锁
3.zk的分布式锁