座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物。


每个人都有惰性,但不断学习新东西是好好生活的根本,共勉!


文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。


文章目录

  • 1. 依赖
  • 2.配置文件
  • 3.配置类
  • 4.工具类



1. 依赖

<!-- redisTemplate -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <version>2.7.3</version>
        </dependency>

2.配置文件

application.yml

#tomcat
server:
  port: 8089

#spring
spring:
  redis:
    datasource: 0
    host: 47.116.333.444
    port: 30005
    #    username:
    password: mima123

注:这里的redis配置服务器地址和密码是假的,请根据自己的redis配置

3.配置类

RedisConfig.java

package com.redis.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * @ClassDescription: redisTemplate配置类
 * 配置工厂
 * 序列化处理(解决redis客户端工具显示序列化导致的二进制)
 * 创建对象(解决了redisTemplate为null的问题)
 * @Author:李白
 * @Date:2023/4/9 11:17
 */
@Configuration
public class RedisConfig {
    @Bean(name = "redisTemplate")
    public RedisTemplate redisTemplate(RedisConnectionFactory factory){
        System.out.println("redis序列化-->");
        RedisTemplate redisTemplate = new RedisTemplate();
        RedisSerializer redisSerializer = new StringRedisSerializer();
        //连接工厂
        redisTemplate.setConnectionFactory(factory);
        //键序列化
        redisTemplate.setKeySerializer(redisSerializer);
        //值序列化
        redisTemplate.setValueSerializer(redisSerializer);
        //key hashMap序列化
        redisTemplate.setHashKeySerializer(redisSerializer);
        //value hashMap序列化
        redisTemplate.setHashValueSerializer(redisSerializer);
        return redisTemplate;
    }

}

注:这里的配置类是解决两个问题--------------------------------1 为了将redisTemplate对象注入容器,解决redisTemplate为空的报错2 为了将redis存入的数据序列化,解决在redis工具中查看存入的数据是二进制乱码的问题乱码原因:spring boot默认使用自带的jdk序列化器JdkSerializationRedisSerializer,所以会在序列化的时候在键值之前加上二进制标识此配置类就是让redis使用这里的序列化器

4.工具类

RedisTemplateUtil.java

package com.redis.utils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.io.Serializable;
import java.time.Duration;
import java.util.*;
import java.util.concurrent.TimeUnit;

/**
 * @ClassDescription: redisTemplate工具类
 * 注: 同一个键存再次进行存储就是修改操作
 *
 * @Author:李白
 * @Date:2023/4/6 10:12
 */
@Component
public class RedisTemplateUtil implements Serializable {

    @Autowired
    private RedisTemplate redisTemplate;

    private static RedisTemplate redisTem;

    @PostConstruct
    public void initRedisTem(){
        redisTem = redisTemplate;
    }

    /**
     * 判断redis中是否含有该键
     * @param key 键值
     * @return Boolean值 false 没有此键, true 含有此键
     */
    public static boolean hasKey(String key){
        //返回boolean值
        return redisTem.hasKey(key);
    }

    /**
     * 获取键的过期时间
     * @param key 键
     * @return 返回long类型的时间数值
     */
    public static long getExpire(String key){
        return redisTem.getExpire(key);
    }

    /**
     * 过期时间设置
     * @param key 键
     * @param expireMinutes 过期时间
     * @return 返回设置成功
     */
    public static boolean setExpire(String key, long expireMinutes){
        Boolean expire = redisTem.expire(key, Duration.ofMinutes(expireMinutes));
        return expire;
    }
    public static boolean setExpireByMillis(String key, long expireMillis){
        Boolean expire = redisTem.expire(key, Duration.ofMillis(expireMillis));
        return expire;
    }
    public static boolean setExpireBySecond(String key, long expireSeconds){
        Boolean expire = redisTem.expire(key, Duration.ofSeconds(expireSeconds));
        return expire;
    }
    public static boolean setExpireByHour(String key, long expireHours){
        Boolean expire = redisTem.expire(key, Duration.ofHours(expireHours));
        return expire;
    }
    public static boolean setExpireByDay(String key, long expireDays){
        Boolean expire = redisTem.expire(key, Duration.ofMinutes(expireDays));
        return expire;
    }



    /**
     * 删除键值
     * @param key 键
     * @return 返回删除结果
     */
    public static boolean delete(String key){
        Boolean delete = redisTem.delete(key);
        return delete;
    }

    /**
     * 通过集合中的所有key删除对应的所有值
     * @param keys 集合keys
     * @return 返回boolean值
     */
    public static boolean delete(Collections keys){
        Boolean delete = redisTem.delete(keys);
        return delete;
    }

    //-----------------------------对象键值存取---------------------------------------------------------------
    /**
     * 存值
     * @param key 键
     * @param value 值
     */
    public static void set(Object key, Object value){
        redisTem.opsForValue().set(key, value);
    }

    /**
     * 存值
     * @param key 键
     * @param value 值
     * @param offset 位置
     */
    public static void set(Object key, Object value, long offset){
        redisTem.opsForValue().set(key, value, offset);
    }

    /**
     * 存值
     * @param key 键
     * @param value 值
     * @param timeout 过期时间
     */
    public static void set(Object key, Object value, Duration timeout){
        redisTem.opsForValue().set(key, value, timeout);
    }

    /**
     * 存值
     * @param key 键
     * @param value 值
     * @param timeout 过期时间
     * @param timeUnit 时间单位
     */
    public static void set(Object key, Object value, long timeout, TimeUnit timeUnit){
        redisTem.opsForValue().set(key, value, timeout, timeUnit);
    }

    /**
     * 获取键对应的值
     * @param key 键
     * @return 返回键对应的值
     */
    public static Object get(Object key){
        Object value = redisTem.opsForValue().get(key);
        return value;
    }

    /**
     * 获取键对应的值
     * @param key 键
     * @param start 开始位置
     * @param end 结束位置
     * @return 返回范围内的对应键的值
     */
    public static Object get(Object key, long start, long end){
        Object value = redisTem.opsForValue().get(key, start, end);
        return value;
    }

    /**
     * 获取键对应的值的大小
     * @param key 键
     * @return 大小
     */
    public static long getSize(Object key){
        Long size = redisTem.opsForValue().size(key);
        return size;
    }

    //-----------------------------String键值存取---------------------------------------------------------------
    /**
     * 存值
     * @param key 键
     * @param value 值
     */
    public static void set(String key, String value){
        redisTem.opsForValue().set(key, value);
    }

    /**
     * 存值
     * @param key 键
     * @param value 值
     * @param offset 位置
     */
    public static void setByOffset(String key, String value, long offset){
        redisTem.opsForValue().set(key, value, offset);
    }

    /**
     * 存值
     * @param key 键
     * @param value 值
     * @param timeout 过期时间 可以使用Duration来调用相关时间参数
     */
    public static void set(String key, String value, Duration timeout){
        redisTem.opsForValue().set(key, value, timeout);
    }

    /**
     * 存值(时间封装)
     * @param key 键
     * @param value 值
     * @param minutes 过期时间 分钟
     */
    public static void set(String key, String value, long minutes){
        redisTem.opsForValue().set(key, value, Duration.ofMinutes(minutes));
    }
    public static void setBySeconds(String key, String value, long seconds){
        redisTem.opsForValue().set(key, value, Duration.ofSeconds(seconds));
    }

    public static void setByHour(String key, String value, long hours){
        redisTem.opsForValue().set(key, value, Duration.ofHours(hours));
    }
    public static void setByDay(String key, String value, long days){
        redisTem.opsForValue().set(key, value, Duration.ofDays(days));
    }

    /**
     * 存值
     * @param key 键
     * @param value 值
     * @param timeout 过期时间
     * @param timeUnit 时间单位
     */
    public static void set(String key, String value, long timeout, TimeUnit timeUnit){
        redisTem.opsForValue().set(key, value, timeout, timeUnit);
    }

    /**
     * 获取键对应的值
     * @param key 键
     * @return 返回键对应的值
     */
    public static Object get(String key){
        Object value = redisTem.opsForValue().get(key);
        return value;
    }

    /**
     * 获取键对应的值
     * @param key 键
     * @param start 开始位置
     * @param end 结束位置
     * @return 返回范围内的对应键的值
     */
    public static Object get(String key, long start, long end){
        Object value = redisTem.opsForValue().get(key, start, end);
        return value;
    }

    //-----------------------------List键值存取---------------------------------------------------------------

    /**
     * 根据key存储到list的指定位置
     * @param key 键
     * @param index list中指定索引
     * @param value 值
     */
    public static void lSet(Object key, long index, Object value){
        redisTem.opsForList().set(key, index, value);
    }

    /**
     * 存储到列表最左侧
     * @param key 键
     * @param value 值
     */
    public static void lSet(Object key, Object value){
        redisTem.opsForList().leftPush(key, value);
    }

    /**
     * 存储到列表最左
     * @param key 键
     * @param pivot
     * @param value 值
     */
    public static void lSet(Object key, Object pivot, Object value){
        redisTem.opsForList().leftPush(key, pivot, value);
    }

    /**
     * 存储到列表最右
     * @param key 键
     * @param value 值
     */
    public static void lSetR(Object key, Object value){
        redisTem.opsForList().rightPush(key, value);
    }

    /**
     * 存储到列表最右
     * @param key 键
     * @param pivot
     * @param value 值
     */
    public static void lSetR(Object key, Object pivot, Object value){
        redisTem.opsForList().rightPush(key, pivot, value);
    }

    /**
     * 获取对应key的list列表大小
     * @param key 键
     * @return size
     */
    public static long lGetSize(Object key){
        Long size = redisTem.opsForList().size(key);
        return size;
    }

    /**
     * 获取键对应的列表数据
     * @param key 键
     * @return key的值(列表)
     */
    public static List lGet(Object key){
        List list = redisTem.opsForList().range(key, 0, -1);
        return list;
    }

    /**
     * 获取键对应的列表数据
     * @param key 键
     * @param start 开始位置
     * @param end 结束位置
     * @return 返回key对应范围内的列表数据
     */
    public static List lGet(Object key, long start, long end){
        List list = redisTem.opsForList().range(key, start, end);
        return list;
    }

    //-----------------------------Set(无序)键值存取---------------------------------------------------------------

    /**
     * 存储set类型的数据
     * @param key 键
     * @param values 值,可以是多个
     */
    public static void sSet(Object key, Object... values){
        redisTem.opsForSet().add(key, values);
    }

    /**
     * 获取key对应set类型数据的大小
     * @param key 键
     */
    public static long sGetSize(Object key){
        Long size = redisTem.opsForSet().size(key);
        return size;
    }

    /**
     * 获取set类型的数据
     * @param key 键
     * @return 返回一个set集合
     */
    public static Set sGet(Object key){
        Set members = redisTem.opsForSet().members(key);
        return members;
    }

    //-----------------------------ZSet(有序)键值存取---------------------------------------------------------------

    /**
     * 存储有序集合
     * @param key 键
     * @param value 值
     * @param score 排序
     */
    public static void zSet(Object key, Object value, double score){
        redisTem.opsForZSet().add(key, value, score);
    }

    /**
     * 存储值
     * @param key 键
     * @param set 集合
     */
    public static void zSet(Object key, Set set){
        redisTem.opsForZSet().add(key, set);
    }

    /**
     * 获取key指定范围的值
     * @param key 键
     * @param start 开始位置
     * @param end 结束位置
     * @return 返回set
     */
    public static Set zGet(Object key, long start, long end){
        Set set = redisTem.opsForZSet().range(key, start, end);
        return set;
    }

    /**
     * 获取key对应的所有值
     * @param key 键
     * @return 返回set
     */
    public static Set zGet(Object key){
        Set set = redisTem.opsForZSet().range(key, 0, -1);
        return set;
    }

    /**
     * 获取对用数据的大小
     * @param key 键
     * @return 键值大小
     */
    public static long zGetSize(Object key){
        Long size = redisTem.opsForZSet().size(key);
        return size;
    }

    //-----------------------------HashMap键值存取---------------------------------------------------------------


    /**
     * 存储hashMap数据
     * @param key 键
     * @param hashKey map的id
     * @param value 值
     */
    public static void hSet(Object key, Object hashKey, Object value){
        redisTem.opsForHash().put(key, hashKey, value);
    }

    /**
     * 获取大小
     * @param key 键
     */
    public static void hGetSize(Object key){
        redisTem.opsForHash().size(key);
    }

    /**
     * 获取hashMap数据
     * @param key 键
     * @param hashKey map的id
     * @return 返回值
     */
    public static Object hGet(Object key, Object hashKey){
        Object o = redisTem.opsForHash().get(key, hashKey);
        return o;
    }

    /**
     * 删除数据
     * @param key 键
     * @param hashKeys map的id
     * @return 返回Boolean
     */
    public static Object hDel(Object key, Object... hashKeys){
        Long delete = redisTem.opsForHash().delete(key, hashKeys);
        return delete;
    }


}