八、springboot整合redis
整合Redis
一. 註解方式實現添加緩存
1.在pom.xml加入依賴
<!-- 配置使用redis啟動器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> </dependency>
2. 修改引導類
修改開啟緩存,添加註解@EnableCaching
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCaching; @SpringBootApplication @EnableCaching public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
3. 設置實現序列化接口
要緩存到redis中的實體,需要讓實體實現序列化接口
public class User implements Serializable { private Long id; private String userName; private String password; private String name; 。。。。。。 }
4. 實現添加/刪除緩存
修改UserServiceImpl,
添加@Cacheable註解實現緩存添加
添加@CacheEvict註解實現緩存刪除
@Override @CacheEvict(value= "userCache", key = "‘user.queryAll‘") public List<User> queryUserByName(String name) { System.out.println("緩存清理了!"); List<User> list = this.userMapper.queryUserByName(name); return list; } // 調用使用UserMapper.xml的Mapper @Override @Cacheable(value = "userCache", key = "‘user.queryAll‘") public List<User> queryAll() { System.out.println("從MySQL中查詢"); List<User> list = this.userMapper.queryAll(); return list; }
這樣設置完成後,執行queryAll()方法就會使用緩存,如果緩存沒有就添加緩存,而queryUserByName(String name)方法則是刪除緩存
@Cacheable:添加/使用緩存
@CacheEvict:刪除緩存
參數value是緩存的名字,在執行的時候,會找叫這個名字的緩存使用/刪除
參數key默認情況下是空串””,是Spring的一種表達式語言SpEL,我們這裏可以隨意指定,但是需要註意一定要加單引號
二. redis的深入使用
1. 直接操作redis
redis除了作為緩存使用,還有很多其他的作用,例如利用redis的單線程獲取唯一數,例如使用redis為單點登錄系統存儲用戶登錄信息等,我們就需要直接操作redis。
官網提供了三種接口RedisConnectionFactory, StringRedisTemplate 和 RedisTemplate,我們可以直接註入或者自己實現其他的實現類,來直接操作redis。我們這裏使用RedisTemplate來操作Redis。
如下所示,我們只需要直接註入RedisTemplate即可使用以下方法操作redis的五種不同的數據類型
測試:
@Autowired private RedisTemplate<String, String> redisTemplate; @Override @CacheEvict(value = "userCache", key = "‘user.findAll‘") public List<User> queryUserByName(String name) { // 保存數據 this.redisTemplate.boundValueOps("redis").set("Hello redis !"); // 設置有效時間為100秒 this.redisTemplate.boundValueOps("redis").expire(100l, TimeUnit.SECONDS); // 給value每次執行加一操作 this.redisTemplate.boundValueOps("count").increment(1l); System.out.println("緩存清理了!"); List<User> list = this.userMapper.queryUserByName(name); return list; }
2. 設置redis連接屬性
redis單機版
redis啟動器默認情況下會找本地的redis服務,端口號默認是6379如果需要訪問其他服務器的redis,則需要在application.properties中進行如下配置:
#Redis spring.redis.host=192.168.37.161 spring.redis.port=6379
這表示會去找ip為192.168.37.161和端口為6379的服務
redis集群版
#Redis #spring.redis.host=192.168.37.161 #spring.redis.port=6379 #Redis Cluster spring.redis.cluster.nodes=192.168.37.161:7001,192.168.37.161:7002,192.168.37.161:7003,192.168.37.161:7004,192.168.37.161:7005,192.168.37.161:7006
切換到集群版只需要做以上配置,配置集群版節點信息,註釋掉單機版信息
八、springboot整合redis