SpringBoot操作redis

SpringBoot操作redis:

  • 添加redis依赖
    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
                <exclusions> <!-- 从依赖关系中排除 -->
                    <exclusion>
                        <groupId>io.lettuce</groupId>
                        <artifactId>lettuce-core</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
  • redis中操作hash(原始方法)
    private final HashOperations<String, String, String> operations;
    
        // 构造注入
        public JWTAuthenticationSuccessHandler(RedisTemplate<String, String> redisTemplate) {
            this.operations = redisTemplate.opsForHash();
        }
    
      //在redis中存值
      operations.put("list", "xx",str.toString());
    
      System.out.println("mysql中查出来的:" + str.toString());
    
       //在redis中取值
    
      String addressName = operations.get("list", "xx");

     

  • 在实体类上添加@RedisHash注解,在唯一字段上加@ID注解
    package com.woniu.employee.outlet.dao.mysql.po;
    
    import lombok.AllArgsConstructor;
    import lombok.Builder;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import org.springframework.data.annotation.Id;
    import org.springframework.data.redis.core.RedisHash;
    
    import java.io.Serializable;
    import java.util.Date;
    import javax.annotation.Generated;
    
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    @RedisHash
    public class Employee implements Serializable {
        @Id
        private Long id;
        private String name;
        private String job;
        private Long managerId;
        private Date hireDate;
        private Integer salary;
        private Integer commission;
        private Long departmentId;
        private static final long serialVersionUID = 1L;
    }
  • 定义redisDao接口继承 CrudRepository<实体类,主键类型>,自定的 Repository 接口必须继承 CrudRepository,才能“天生”具有存取数据的能力
    package com.woniu.employee.outlet.dao.redis;
    
    import com.woniu.employee.outlet.dao.mysql.po.Employee;
    import org.springframework.data.repository.CrudRepository;
    
    /**
     * Created with IntelliJ IDEA.
     *
     * @Author: hui
     * @Date: 2021/12/07/14:27
     * @Description:
     */
    public interface EmployeeRedisDao extends CrudRepository<Employee,Long> {
    }
  • 调用EmployeeRedisDao接口实现CRUD工作
    package com.woniu.employee.outlet.repository;
    
    import com.woniu.employee.outlet.dao.mysql.EmployeeDao;
    import com.woniu.employee.outlet.dao.mysql.po.Employee;
    import com.woniu.employee.outlet.dao.redis.EmployeeRedisDao;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.stereotype.Repository;
    
    import javax.annotation.Resource;
    
    /**
     * Created with IntelliJ IDEA.
     *
     * @Author: hui
     * @Date: 2021/12/07/14:34
     * @Description:
     */
    @Repository
    @Slf4j
    public class EmployeeRepository {
    
        @Resource
        private EmployeeDao employeeDao;
        @Resource
        private EmployeeRedisDao employeeRedisDao;
    
        public Employee getEmployee(Long id) {
            Employee employee = null;
            try {
                //先从redis中取
                employee = employeeRedisDao.findById(id).orElseThrow(NullPointerException::new);
            } catch (NullPointerException e) {
                //没有取数据库查
                employee = employeeDao.selectByPrimaryKey(id).orElseThrow(NullPointerException::new);
            }
            return employee;
        }
    }

    注意:当执行增删改操作,为了保证和数据库数据一致性, redis的缓存要删除

 

posted @ 2021-12-07 20:20  *山山_而川  阅读(270)  评论(0)    收藏  举报