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依赖

		
			org.springframework.data
			spring-data-redis
			2.2.5.RELEASE
		

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;
    }
}

你可能感兴趣的:(【Redis】)