1. 程式人生 > >八、springboot整合redis

八、springboot整合redis

clu com figure pri alt pass oot wired 用戶登錄

整合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