Redis學習筆記15 使用spring-data-redis完成CRUD的實踐案例

一、介紹

1、Java開發,都會使用了Spring框架,可以使用spring-data-redis開源庫來簡化Redis操作的代碼邏輯,做到最大程度的業務聚焦。

2、創建緩衝

創建(Create)一個POJO實例的時候,對POJO實例進行分佈式緩存,一般以“緩存前綴+ID”爲緩存的Key鍵,POJO對象爲緩存的Value值,直接緩存POJO的二進制字節。前提是:POJO必須可序列化,實現java.io.Serializable空接口。如果POJO不可序列化,也是可以緩存的,但是必須自己實現序列化的方式,例如使用JSON方式序列化。

3、查詢緩衝

查詢緩存在查詢(Retrieve)一個POJO實例的時候,首先應該根據POJO緩存的Key鍵,從Redis緩存中返回結果。如果不存在,纔去查詢數據庫,並且能夠將數據庫的結果緩存起來。

4、更新緩衝

在更新(Update)一個POJO實例的時候,既需要更新數據庫的POJO數據記錄,也需要更新POJO的緩存記錄。

5、刪除緩衝

在刪除(Delete)一個POJO實例的時候,既需要刪除數據庫的POJO數據記錄,也需要刪除POJO的緩存記錄。

6、RedisConnection的API命令操作的對象都是字節級別的Key鍵和Value值。spring-data-redis庫在RedisConnection連接類的基礎上,針對不同的緩存類型,設計了五大數據類型的命令API集合,用於完成不同類型的數據緩存操作,並封裝在RedisTemplate模板類中。

  1. ValueOperations字符串類型操作API集合
  1. ListOperations列表類型操作API集合
  1. SetOperations集合類型操作API集合
  1. ZSetOperations有序集合類型API集合
  1. HashOperations哈希類型操作API集合

7、pom.xml依賴

		<dependency>
			<groupId>org.springframework.data</groupId>
			<artifactId>spring-data-redis</artifactId>
			<version>2.2.5.RELEASE</version>
		</dependency>

8、緩衝增刪該查

package com.example.actuatordemo.redis.rediscache;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Optional;

/**
 * @author haoxiansheng
 */
@Service
@Slf4j
public class UserServiceImpl implements UserService {

    public static final String USER_UID_PREFIX = "user:uid";

    public static final long CASHE_LONG = 60*4; //4分中

    @Autowired
    private RedisCacheOperationService redisCacheOperationService;

    @Override
    public Object saveUser(User user) {
        //  先更新到數據庫,然後在更新緩衝

        // 保存到緩衝
        String key = USER_UID_PREFIX + user.getUid();

        log.info("user=>", user);
        redisCacheOperationService.setRedisTemplate(key, user, CASHE_LONG);

        return null;
    }

    @Override
    public Optional<User> getUser(Long uid) {
        // 先去緩衝拿、緩衝沒有再去數據庫那
        return Optional.empty();
    }

    @Override
    public Object deleteUser(Long uid) {

        //  先刪除緩衝,再更新數據庫
        return null;
    }
}


9、緩衝和數據庫的先後設計


package com.example.actuatordemo.redis.rediscache;

import java.util.Optional;

/**
 * @author haoxiansheng
 */
public interface UserService {
    // 創建、更新
    Object saveUser(User user);

    // 查詢
    Optional<User> getUser(Long uid);

    // 刪除
    Object deleteUser(Long uid);


}


package com.example.actuatordemo.redis.rediscache;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Optional;

/**
 * @author haoxiansheng
 */
@Service
@Slf4j
public class UserServiceImpl implements UserService {

    public static final String USER_UID_PREFIX = "user:uid";

    public static final long CASHE_LONG = 60*4; //4分中

    @Autowired
    private RedisCacheOperationService redisCacheOperationService;

    @Override
    public Object saveUser(User user) {
        //  先更新到數據庫,然後在更新緩衝
        
        // 保存到緩衝
        String key = USER_UID_PREFIX + user.getUid();

        log.info("user=>", user);
        redisCacheOperationService.setRedisTemplate(key, user, CASHE_LONG);
       
        return null;
    }

    @Override
    public Optional<User> getUser(Long uid) {
        // 先去緩衝拿、緩衝沒有再去數據庫那
        return Optional.empty();
    }

    @Override
    public Object deleteUser(Long uid) {
        
        //  先刪除緩衝,再更新數據庫
        return null;
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章