美文网首页
06.`spring boot`集成`redis`

06.`spring boot`集成`redis`

作者: 风安峻_ | 来源:发表于2020-09-15 00:54 被阅读0次
1. 依赖
  1. 依赖

    <!-- redis -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    
    <!-- redis-pool -->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-pool2</artifactId>
    </dependency>
    
  2. 说明

    1. spring boot已经集成,无需声明版本号
    2. commons-pool2redis连接池
2.主配置文件
  1. 哨兵模式

    spring:
      redis:
        lettuce:
          pool:
            max-active: 10
            min-idle: 5
        # 主的密码
        password: passsword
        sentinel:
          # 主的地址,如果是 docker-compose,则为容器名
          master: redis-master
          # sentinel 的地址,也可为容器名的地址
          nodes: sentinel1:26379,sentinel2:26379,sentinel3:26379    
    
  2. 集群模式

    spring:
      redis:
        lettuce:
          pool:
            max-active: 10
            min-idle: 5
        # 集群的密码,密码要一致
        password: passsword
        cluster:
          # 也可以逗号 , 分开
          nodes:
            - 172.29.0.2:6379
            - 172.29.0.3:6379
            - 172.29.0.4:6379
            - 172.29.0.5:6379
            - 172.29.0.6:6379
            - 172.29.0.7:6379
          # 执行命令时的最大重定向次数
          max-redirects: 3    
    
  3. 单机模式

    spring:
      redis:
        host: 120.25.207.44
        port: 6379
        password: password
        database: 1
        lettuce:
          pool:
            min-idle: 5
            max-active: 10    
    
3. RedisConfig配置类
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.*;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * 说明:
 *
 * @author sheng
 */
@Configuration
public class RedisConfig {
    /**
     * 将 RedisTemplate 对象注册到容器中
     *
     * @param factory RedisConnectionFactory 工厂
     * @return RedisTemplate 对象
     */
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        // 对 key 进行序列化
        // StringRedisSerializer 当需要存储 String 类型的 key 时序列化使用
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        // 对 String 的 key 进行序列化
        redisTemplate.setKeySerializer(stringRedisSerializer);
        // 对 Hash 的 key 进行序列化
        redisTemplate.setHashKeySerializer(stringRedisSerializer);
        // 也可以使用 FastJsonRedisSerializer 来序列化,需要引入 fastjson 依赖
        // 对值进行序列化
        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
        // 注入到 factory 工厂中
        redisTemplate.setConnectionFactory(factory);
        return redisTemplate;
    }

    /**
     * 将操作 string redis 类型的 ValueOperations 对象注册到容器
     *
     * @param redisTemplate RedisTemplate 对象
     * @return ValueOperations 对象
     */
    @Bean
    public ValueOperations<String, Object> valueOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForValue();
    }

    /**
     * 将操作 list redis 类型的 ListOperations 对象注册到容器
     *
     * @param redisTemplate RedisTemplate 对象
     * @return ListOperations 对象
     */
    @Bean
    public ListOperations<String, Object> listOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForList();
    }

    /**
     * 将操作 set redis 类型的 SetOperations 对象注册到容器
     *
     * @param redisTemplate RedisTemplate 对象
     * @return SetOperations 对象
     */
    @Bean
    public SetOperations<String, Object> setOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForSet();
    }

    /**
     * 将操作 zSet redis 类型的 ZSetOperations 对象注册到容器
     *
     * @param redisTemplate RedisTemplate 对象
     * @return ZSetOperations 对象
     */
    @Bean
    public ZSetOperations<String, Object> zSetOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForZSet();
    }

    /**
     * 将操作 hash redis 类型的 ZSetOperations 对象注册到容器
     *
     * @param redisTemplate RedisTemplate 对象
     * @return HashOperations 对象
     */
    @Bean
    public HashOperations<String, String, Object> hashOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForHash();
    }
}
4. redis-dmo 源码
5. 工具类
  1. service接口

    import org.springframework.data.redis.connection.DataType;
    import org.springframework.data.redis.core.Cursor;
    import org.springframework.data.redis.core.ScanOptions;
    import org.springframework.data.redis.core.ZSetOperations;
    
    import java.util.*;
    import java.util.concurrent.TimeUnit;
    
    /**
     * 说明:操作 redis 的工具类
     *
     * @author sheng
     */
    public interface RedisService {
        // key 的操作
    
        /**
         * 删除 key
         *
         * @param key 要删除的 key
         * @return 成功返回 true
         */
        Boolean delete(String key);
    
        /**
         * 批量删除 key
         *
         * @param keys 要删除的 key 的 Collection<String>集合
         * @return 删除成功数
         */
        Long delete(Collection<String> keys);
    
        /**
         * 序列化 key
         *
         * @param key 要序列化的 key
         * @return byte[] 数组
         */
        byte[] dump(String key);
    
        /**
         * key 是否存在
         *
         * @param key key
         * @return 存在则 true,否则 false
         */
        Boolean hasKey(String key);
    
        /**
         * 设置过期时间
         *
         * @param key      设置过期时间的 key
         * @param timeout  过期时间
         * @param timeUnit TimeUnit 枚举类对象,单位
         * @return 成功返回 true
         */
        Boolean expire(String key, long timeout, TimeUnit timeUnit);
    
        /**
         * 设置过期时间
         *
         * @param key  设置过期时间的 key
         * @param date 过期时间的日期,Date 对象
         * @return 成功返回 true
         */
        Boolean expireAt(String key, Date date);
    
        /**
         * 查找匹配的 key
         *
         * @param pattern 条件
         * @return Set<String>
         */
        Set<String> keys(String pattern);
    
        /**
         * 将当前数据库的 key 移动到给定的数据库 db 当中
         *
         * @param key     移动的 key
         * @param dbIndex 目标数据库
         * @return 成功返回 true
         */
        Boolean move(String key, int dbIndex);
    
        /**
         * 移除 key 的过期时间,key 将持久保持
         *
         * @param key 移除的 key
         * @return 成功返回 true
         */
        Boolean persist(String key);
    
        /**
         * 返回 key 的剩余的过期时间
         *
         * @param key      查看的 key
         * @param timeUnit TimeUnit 枚举类,单位
         * @return 返回时间
         */
        Long getExpire(String key, TimeUnit timeUnit);
    
        /**
         * 返回 key 的剩余的过期时间
         *
         * @param key key
         * @return 剩余过期时间
         */
        Long getExpire(String key);
    
        /**
         * 从当前数据库中随机返回一个 key
         *
         * @return 返回的 key
         */
        String randomKey();
    
        /**
         * 修改 key 的名称
         *
         * @param oldKey key 原来的名称
         * @param newKey 新的名称
         */
        void rename(String oldKey, String newKey);
    
        /**
         * 仅当 newKey 不存在时,将 oldKey 改名为 newKey
         *
         * @param oldKey key 原来的名称
         * @param newKey 新的名称
         * @return 成功返回 true
         */
        Boolean renameIfAbsent(String oldKey, String newKey);
    
        /**
         * 返回 key 所储存的值的类型
         *
         * @param key key
         * @return key 的类型
         */
        DataType type(String key);
    
        // string 相关操作
    
        /**
         * 设置指定 key 的值
         *
         * @param key   key
         * @param value 值
         */
        void set(String key, Object value);
    
        /**
         * 获取指定 key 的值
         *
         * @param key key
         * @return key 的值
         */
        Object get(String key);
    
        /**
         * 返回 key 中字符串值的子字符
         *
         * @param key   key
         * @param start 截取的初始索引
         * @param end   截取的末索引
         * @return 子字符串
         */
        Object get(String key, long start, long end);
    
        /**
         * 将给定 key 的值设为 value ,并返回 key 的旧值(old value)
         *
         * @param key   key
         * @param value 要设定的新值
         * @return key 原来的值
         */
        Object getAndSet(String key, String value);
    
        /**
         * 对 key 所储存的字符串值,获取指定偏移量上的位(bit)
         *
         * @param key    key
         * @param offset 偏移量
         * @return 成功返回 true
         */
        Boolean getBit(String key, long offset);
    
        /**
         * 批量获取
         *
         * @param keys key 集合
         * @return key 对应的值的集合
         */
        List<Object> multiGet(Collection<String> keys);
    
        /**
         * 设置 ASCII 码, 字符串'a'的ASCII码是97, 转为二进制是'01100001', 此方法是将二进制第 offset 位值变为value
         *
         * @param key    key
         * @param offset 位置,二进制的位数
         * @param value  值,true为 1,false为 0
         * @return 成功返回 true
         */
        Boolean setBit(String key, long offset, boolean value);
    
        /**
         * 将值 value 关联到 key ,并将 key 的过期时间设为 timeout
         *
         * @param key      key
         * @param value    值
         * @param timeout  过期时间
         * @param timeUnit 时间单位, 天:TimeUnit.DAYS 小时:TimeUnit.HOURS 分钟:TimeUnit.MINUTES
         *                 秒:TimeUnit.SECONDS 毫秒:TimeUnit.MILLISECONDS
         */
        void set(String key, String value, long timeout, TimeUnit timeUnit);
    
        /**
         * 只有在 key 不存在时设置 key 的值
         *
         * @param key   key
         * @param value 值
         * @return 之前已经存在返回false, 不存在返回true
         */
        Boolean setIfAbsent(String key, String value);
    
        /**
         * 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始
         *
         * @param key    key
         * @param value  复写的参数值
         * @param offset 从指定位置开始覆写
         */
        void set(String key, String value, long offset);
    
        /**
         * 获取字符串的长度
         *
         * @param key key
         * @return key对应值的长度
         */
        Long size(String key);
    
        /**
         * 批量添加
         *
         * @param maps 添加的字符串的 map
         */
        void multiSet(Map<String, String> maps);
    
        /**
         * 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在
         *
         * @param maps 添加的字符串的 map
         * @return 之前已经存在返回 false, 不存在返回 true
         */
        Boolean multiSetIfAbsent(Map<String, String> maps);
    
        /**
         * 增加(自增长), 负数则为自减
         *
         * @param key       key
         * @param increment 整型,自增的 值
         * @return 自增后的值
         */
        Long incrBy(String key, long increment);
    
        /**
         * 增加(自增长), 负数则为自减
         *
         * @param key       key
         * @param increment double,自增的值
         * @return 自增后的值
         */
        Double incrByDouble(String key, double increment);
    
        /**
         * 追加到末尾
         *
         * @param key   key
         * @param value 追加的值
         * @return key 的长度
         */
        Integer append(String key, String value);
    
        // hash相关操作
    
        /**
         * 获取存储在哈希表中指定字段的值
         *
         * @param key   key
         * @param field hash的键
         * @return 键对应的值
         */
        Object hGet(String key, String field);
    
        /**
         * 获取所有给定 key hash 的值
         *
         * @param key key
         * @return key 对应的所有的键值对 map
         */
        Map<String, Object> hGetAll(String key);
    
        /**
         * 获取所有给定字段的值
         *
         * @param key    key
         * @param fields key 对应的键的集合
         * @return 键对应的值的集合
         */
        List<Object> hMultiGet(String key, List<String> fields);
    
        /**
         * 给名为 key 的 hash 增加 hashKey-value 键值对
         *
         * @param key     key
         * @param hashKey hash对应的键
         * @param value   键对应的值
         */
        void hPut(String key, String hashKey, Object value);
    
        /**
         * 给名为 key 的 hash 增加 maps 所有的键值对
         *
         * @param key  键
         * @param maps 要增加的 map
         */
        void hPutAll(String key, Map<String, String> maps);
    
        /**
         * 仅当 hashKey不存在时才设置
         *
         * @param key     key hash
         * @param hashKey hash 对应的键
         * @param value   设置的值
         * @return 成功返回 true
         */
        Boolean hPutIfAbsent(String key, String hashKey, Object value);
    
        /**
         * 删除一个或多个哈希表字段
         *
         * @param key    hash
         * @param fields 删除的键
         * @return 删除的个数
         */
        Long hDelete(String key, Object... fields);
    
        /**
         * 查看哈希表 key 中,指定的字段是否存在
         *
         * @param key   hash
         * @param field 要判断的键
         * @return 存在返回 true
         */
        boolean hHasKey(String key, String field);
    
        /**
         * 为哈希表 key 中的指定字段的整数值加上增量 increment
         *
         * @param key       hash
         * @param field     hash 对应的键
         * @param increment 自增的值,负数为减
         * @return 增加后的值
         */
        Long hIncrBy(String key, String field, long increment);
    
        /**
         * 为哈希表 key 中的指定字段的整数值加上增量 increment
         *
         * @param key       hash
         * @param field     hash 对应的键
         * @param increment 自增的值,负数为减
         * @return 增加后的值
         */
        Double hIncrByDouble(String key, String field, Double increment);
    
        /**
         * 获取所有哈希表中的字段
         *
         * @param key hash
         * @return hash 所有的键的 Set 集合
         */
        Set<String> hKeys(String key);
    
        /**
         * 获取哈希表中字段的数量
         *
         * @param key key
         * @return 键的数量
         */
        Long hSize(String key);
    
        /**
         * 获取哈希表中所有值
         *
         * @param key hash
         * @return hash 所有的值的 List 集合
         */
        List<Object> hValues(String key);
    
        /**
         * 迭代哈希表中的键值对
         *
         * @param key     hash
         * @param options 迭代的条件
         * @return 连接,如果报错,可以手动关闭,调用 .close()
         */
        Cursor<Map.Entry<String, Object>> hScan(String key, ScanOptions options);
    
        // list相关操作
    
        /**
         * 通过索引获取列表中的元素
         *
         * @param key   list 对应的 key
         * @param index 索引
         * @return 对应的值
         */
        Object lIndex(String key, long index);
    
        /**
         * 获取列表指定范围内的元素
         *
         * @param key   key
         * @param start 开始位置, 0是开始位置
         * @param end   结束位置, -1返回所有
         * @return 元素的 集合
         */
        List<Object> lRange(String key, long start, long end);
    
        /**
         * 存储在list头部
         *
         * @param key   key
         * @param value 值
         * @return 集合的长度
         */
        Long lLeftPush(String key, Object value);
    
        /**
         * 将值全部存储在头部
         *
         * @param key   key
         * @param value 值
         * @return 集合的长度
         */
        Long lLeftPushAll(String key, Object... value);
    
        /**
         * 将集合里面的值全部存储在头部
         *
         * @param key   key
         * @param value Collection<String>集合
         * @return 集合的长度
         */
        Long lLeftPushAll(String key, Collection<Object> value);
    
        /**
         * 当list存在的时候才加入
         *
         * @param key   key
         * @param value 值
         * @return 集合的长度
         */
        Long lLeftPushIfPresent(String key, Object value);
    
        /**
         * 如果 pivot存在,再 pivot前面添加
         *
         * @param key   key
         * @param pivot 是否存在的值
         * @param value pivot 存在则在其前面添加的值
         * @return 集合的长度,失败返回 -1
         */
        Long lLeftPush(String key, Object pivot, Object value);
    
        /**
         * list 尾部添加
         *
         * @param key   key
         * @param value 值
         * @return 集合的长度
         */
        Long lRightPush(String key, Object value);
    
        /**
         * 尾部添加所有
         *
         * @param key   key
         * @param value 添加的值
         * @return 集合的长度
         */
        Long lRightPushAll(String key, Object... value);
    
        /**
         * 尾部添加所有
         *
         * @param key   list key
         * @param value 要添加的 Collection<String> 集合
         * @return 集合的长度
         */
        Long lRightPushAll(String key, Collection<Object> value);
    
        /**
         * 为已存在的 list 列表添加值
         *
         * @param key   key
         * @param value 要添加的值
         * @return 集合的长度
         */
        Long lRightPushIfPresent(String key, Object value);
    
        /**
         * 在 pivot 元素的右边添加值
         *
         * @param key   list
         * @param pivot list 存在的元素,在其右边添加
         * @param value 添加的值
         * @return 集合的长度
         */
        Long lRightPush(String key, Object pivot, Object value);
    
        /**
         * 通过索引设置列表元素的值
         *
         * @param key   list
         * @param index 位置
         * @param value 添加的值
         */
        void lSet(String key, long index, String value);
    
        /**
         * 移出并获取列表的第一个元素
         *
         * @param key key
         * @return 删除的元素
         */
        Object lLeftPop(String key);
    
        /**
         * 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
         *
         * @param key      key
         * @param timeout  等待时间
         * @param timeUnit 时间单位
         * @return 移除的元素
         */
        Object lLeftPop(String key, long timeout, TimeUnit timeUnit);
    
        /**
         * 移除并获取列表最后一个元素
         *
         * @param key key
         * @return 删除的元素
         */
        Object lRightPop(String key);
    
        /**
         * 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
         *
         * @param key      key
         * @param timeout  等待时间
         * @param timeUnit 时间单位
         * @return 移除的元素
         */
        Object lRightPop(String key, long timeout, TimeUnit timeUnit);
    
        /**
         * 移除列表的最后一个元素,并将该元素添加到另一个列表并返回
         *
         * @param sourceKey      源 list
         * @param destinationKey 目标 list
         * @return 源 list 移除的元素
         */
        Object lRightPopAndLeftPush(String sourceKey, String destinationKey);
    
        /**
         * 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
         *
         * @param sourceKey      源 list
         * @param destinationKey 目标 list
         * @param timeout        超时时间
         * @param timeUnit       TimeUnit 枚举类对象,单位
         * @return 源 list 移除的元素
         */
        Object lRightPopAndLeftPush(String sourceKey, String destinationKey, long timeout, TimeUnit timeUnit);
    
        /**
         * 删除集合中值等于value得元素
         *
         * @param key   key
         * @param index index=0, 删除所有值等于value的元素; index>0, 从头部开始删除第一个值等于value的元素;
         *              index<0, 从尾部开始删除第一个值等于value的元素;
         * @param value 要删除的值
         * @return 删除的个数
         */
        Long lRemove(String key, long index, String value);
    
        /**
         * 裁剪list
         *
         * @param key   key
         * @param start 裁剪的起始索引
         * @param end   裁剪的末尾索引
         */
        void lTrim(String key, long start, long end);
    
        /**
         * 获取列表长度
         *
         * @param key key
         * @return list 长度
         */
        Long lSize(String key);
    
        // set相关操作
    
        /**
         * set添加元素
         *
         * @param key    key
         * @param values 添加的元素
         * @return 成功个数
         */
        Long sAdd(String key, Object... values);
    
        /**
         * set移除元素
         *
         * @param key    key
         * @param values 删除的元素
         * @return 删除成功个数
         */
        Long sRemove(String key, Object... values);
    
        /**
         * 移除并返回集合的一个随机元素
         *
         * @param key set 集合 key
         * @return 移除的元素
         */
        Object sPop(String key);
    
        /**
         * 将元素value从一个集合移到另一个集合
         *
         * @param key     源 set
         * @param value   移动的 值
         * @param destKey 目标 set
         * @return 成功返回 true
         */
        Boolean sMove(String key, String value, String destKey);
    
        /**
         * 获取集合的大小
         *
         * @param key set 集合
         * @return 集合大小
         */
        Long sSize(String key);
    
        /**
         * 判断集合是否包含value
         *
         * @param key   set 集合
         * @param value 是否包含的值
         * @return 存在返回 true
         */
        Boolean sIsMember(String key, Object value);
    
        /**
         * 获取两个集合的交集
         *
         * @param key      集合
         * @param otherKey 集合
         * @return 两个集合的交集
         */
        Set<Object> sIntersect(String key, String otherKey);
    
        /**
         * 获取key集合与多个集合的交集
         *
         * @param key       集合
         * @param otherKeys 包含多个集合 key 的集合 Collection<String>
         * @return 交集
         */
        Set<Object> sIntersect(String key, Collection<String> otherKeys);
    
        /**
         * key集合与otherKey集合的交集存储到destKey集合中
         *
         * @param key      求交集的集合
         * @param otherKey 求交集的集合
         * @param destKey  交集存储的目标集合
         * @return 交集元素个数
         */
        Long sIntersectAndStore(String key, String otherKey, String destKey);
    
        /**
         * key集合与多个集合的交集存储到destKey集合中
         *
         * @param key       集合 key
         * @param otherKeys 包含多个集合 key 的集合 Collection<String>
         * @param destKey   交集存储的目标集合
         * @return 添加到 destKey 交集的个数
         */
        Long sIntersectAndStore(String key, Collection<String> otherKeys, String destKey);
    
        /**
         * 获取两个集合的并集
         *
         * @param key       集合
         * @param otherKeys 集合
         * @return 并集
         */
        Set<Object> sUnion(String key, String otherKeys);
    
        /**
         * 获取key集合与多个集合的并集
         *
         * @param key       集合
         * @param otherKeys 包含多个集合 key 的集合 Collection<String>
         * @return 并集
         */
        Set<Object> sUnion(String key, Collection<String> otherKeys);
    
        /**
         * key集合与otherKey集合的并集存储到destKey中
         *
         * @param key      求并集的集合
         * @param otherKey 求并集的集合
         * @param destKey  并集添加到的目标集合
         * @return 添加到目标集合的值的个数
         */
        Long sUnionAndStore(String key, String otherKey, String destKey);
    
        /**
         * key集合与多个集合的并集存储到destKey中
         *
         * @param key       集合
         * @param otherKeys 包含多个集合 key 的集合 Collection<String>
         * @param destKey   并集添加到的目标集合
         * @return 添加到目标集合的值的个数
         */
        Long sUnionAndStore(String key, Collection<String> otherKeys,
                            String destKey);
    
        /**
         * 获取两个集合的差集
         *
         * @param key      集合
         * @param otherKey 集合
         * @return 差集
         */
        Set<Object> sDifference(String key, String otherKey);
    
        /**
         * 获取key集合与多个集合的差集
         *
         * @param key       集合
         * @param otherKeys 包含多个集合 key 的集合 Collection<String>
         * @return 差集
         */
        Set<Object> sDifference(String key, Collection<String> otherKeys);
    
        /**
         * key集合与otherKey集合的差集存储到destKey中
         *
         * @param key      求差集的集合
         * @param otherKey 求差集的集合
         * @param destKey  差集添加到的目标集合
         * @return 添加到目标集合的值的个数
         */
        Long sDifference(String key, String otherKey, String destKey);
    
        /**
         * key集合与多个集合的差集存储到destKey中
         *
         * @param key       求差集的集合
         * @param otherKeys 包含多个集合 key 的集合 Collection<String>
         * @param destKey   差集添加到的目标集合
         * @return 添加到目标集合的值的个数
         */
        Long sDifference(String key, Collection<String> otherKeys,
                         String destKey);
    
        /**
         * 获取集合所有元素
         *
         * @param key 集合
         * @return 集合的所有元素
         */
        Set<Object> sMembers(String key);
    
        /**
         * 随机获取集合中的一个元素
         *
         * @param key 集合
         * @return 随机返回的元素
         */
        Object sRandomMember(String key);
    
        /**
         * 随机获取集合中count个元素,可能获取同一个元素多次
         *
         * @param key   集合
         * @param count 获取的个数
         * @return 获取到的元素的集合
         */
        List<Object> sRandomMembers(String key, long count);
    
        /**
         * 随机获取集合中count个元素并且去除重复的
         *
         * @param key   集合
         * @param count 随机获取的元素个数
         * @return 元素的集合
         */
        Set<Object> sDistinctRandomMembers(String key, long count);
    
        /**
         * 迭代 set 集合
         *
         * @param key     要迭代的集合
         * @param options 迭代的条件
         * @return 连接,如果报错,可以手动关闭,调用 .close()
         */
        Cursor<Object> sScan(String key, ScanOptions options);
    
        // zSet相关操作
    
        /**
         * 添加元素,有序集合是按照元素的score值由小到大排列
         *
         * @param key   集合
         * @param value 添加的元素
         * @param score 元素对应的分数
         * @return 成功返回 true
         */
        Boolean zAdd(String key, Object value, double score);
    
        /**
         * 将 values 集合的元素添加的 key 集合
         *
         * @param key    集合 key
         * @param values Set<ZSetOperations.TypedTuple<Object>> 集合
         * @return 添加的个数
         */
        Long zAdd(String key, Set<ZSetOperations.TypedTuple<Object>> values);
    
        /**
         * 删除元素
         *
         * @param key    集合
         * @param values 要删除的元素,可变参数
         * @return 删除的个数
         */
        Long zRemove(String key, Object... values);
    
        /**
         * 增加元素的score值,并返回增加后的值
         *
         * @param key   集合
         * @param value 要添加 score 值的元素
         * @param delta 添加的 score 的值
         * @return 增加后的值
         */
        Double zIncrementScore(String key, Object value, double delta);
    
        /**
         * 返回元素在集合的排名,有序集合是按照元素的score值由小到大排列
         *
         * @param key   集合
         * @param value 要返回排名的值
         * @return 0表示第一位
         */
        Long zRank(String key, Object value);
    
        /**
         * 返回元素在集合的排名,按元素的score值由大到小排列
         *
         * @param key   集合
         * @param value 要返回排名的值
         * @return 0表示第一位
         */
        Long zReverseRank(String key, Object value);
    
        /**
         * 获取集合的元素, 从小到大排序
         *
         * @param key   集合
         * @param start 开始位置
         * @param end   结束位置, -1查询所有
         * @return 元素的集合
         */
        Set<Object> zRange(String key, long start, long end);
    
        /**
         * 获取集合元素, 并且把score值也获取
         *
         * @param key   集合
         * @param start 开始位置
         * @param end   结束位置, -1查询所有
         * @return 元素的集合
         */
        Set<ZSetOperations.TypedTuple<Object>> zRangeWithScores(String key, long start, long end);
    
        /**
         * 根据Score值查询集合元素
         *
         * @param key 集合
         * @param min 最小值
         * @param max 最大值
         * @return 元素的集合
         */
        Set<Object> zRangeByScore(String key, double min, double max);
    
        /**
         * 根据Score值查询集合元素, 从小到大排序
         *
         * @param key 集合
         * @param min 最小值
         * @param max 最大值
         * @return 元素的集合
         */
        Set<ZSetOperations.TypedTuple<Object>> zRangeByScoreWithScores(String key, double min, double max);
    
        /**
         * 获取key集合中索引在 [start, end] 的分数在 [min, max] 范围内的所有元素及其分数
         *
         * @param key   集合
         * @param min   score 最小值
         * @param max   score 最大值
         * @param start 开始位置
         * @param end   结束位置, -1查询所有
         * @return 获取到的元素集合
         */
        Set<ZSetOperations.TypedTuple<Object>> zRangeByScoreWithScores(String key, double min,
                                                                       double max, long start, long end);
    
        /**
         * 获取集合的元素, 从大到小排序
         *
         * @param key   集合
         * @param start 开始位置
         * @param end   结束位置, -1查询所有
         * @return 获取到的元素集合
         */
        Set<Object> zReverseRange(String key, long start, long end);
    
        /**
         * 获取集合的元素, 从大到小排序, 并返回score值
         *
         * @param key   集合
         * @param start 开始位置
         * @param end   结束位置, -1查询所有
         * @return 元素的集合
         */
        Set<ZSetOperations.TypedTuple<Object>> zReverseRangeWithScores(String key, long start, long end);
    
        /**
         * 根据Score值查询集合元素, 从大到小排序
         *
         * @param key 集合
         * @param min score 最小值
         * @param max score 最大值
         * @return 元素集合
         */
        Set<Object> zReverseRangeByScore(String key, double min, double max);
    
        /**
         * 根据Score值查询集合元素及其分数, 从大到小排序
         *
         * @param key 集合
         * @param min score 最小值
         * @param max score 最大值
         * @return 元素集合
         */
        Set<ZSetOperations.TypedTuple<Object>> zReverseRangeByScoreWithScores(String key, double min, double max);
    
        /**
         * 获取key集合中索引在 [start, end] 的分数在 [min, max] 范围内的所有元素
         *
         * @param key   key 集合
         * @param min   score 最小值
         * @param max   score 最大值
         * @param start 起始位置
         * @param end   末尾位置
         * @return 元素集合
         */
        Set<Object> zReverseRangeByScore(String key, double min, double max, long start, long end);
    
        /**
         * 根据score值获取集合元素个数
         *
         * @param key 集合
         * @param min score 最小值
         * @param max score 最大值
         * @return 元素个数
         */
        Long zCount(String key, double min, double max);
    
        /**
         * 获取集合大小
         *
         * @param key 集合
         * @return 包含的元素的个数
         */
        Long zSize(String key);
    
        /**
         * 获取集合大小
         *
         * @param key 集合
         * @return 集合大小
         */
        Long zCard(String key);
    
        /**
         * 获取集合中value元素的score值
         *
         * @param key   集合
         * @param value 要获取 score 值的元素
         * @return score 值
         */
        Double zScore(String key, Object value);
    
        /**
         * 移除指定索引位置的成员
         *
         * @param key   集合
         * @param start 起始位置
         * @param end   结束位置
         * @return 移除的个数
         */
        Long zRemoveRange(String key, long start, long end);
    
        /**
         * 根据指定的score值的范围来移除成员
         *
         * @param key 集合
         * @param min score 最小值
         * @param max score 最大值
         * @return 移除的个数
         */
        Long zRemoveRangeByScore(String key, double min, double max);
    
        /**
         * 获取 key和 otherKey的并集并存储在destKey中
         *
         * @param key      求并集的集合
         * @param otherKey 求并集的集合
         * @param destKey  并集存储的目标集合
         * @return 添加到目标集合的个数
         */
        Long zUnionAndStore(String key, String otherKey, String destKey);
    
        /**
         * 获取 key和 otherKey 的并集并存储在destKey中
         *
         * @param key       集合 key
         * @param otherKeys 多个集合 key 的 Collection<String> 集合
         * @param destKey   并集添加到的目标集合
         * @return 添加到目标集合的元素个数
         */
        Long zUnionAndStore(String key, Collection<String> otherKeys, String destKey);
    
        /**
         * 获取 key和 otherKey 的交集并存储在destKey中
         *
         * @param key      集合
         * @param otherKey 集合
         * @param destKey  交集添加到的目标集合
         * @return 添加到目标集合的元素个数
         */
        Long zIntersectAndStore(String key, String otherKey, String destKey);
    
        /**
         * 获取 key和 otherKey 的交集并存储在destKey中
         *
         * @param key       求交集的集合
         * @param otherKeys 求交集的集合
         * @param destKey   交集添加到的目标集合
         * @return 添加到目标集合的元素个数
         */
        Long zIntersectAndStore(String key, Collection<String> otherKeys, String destKey);
    
        /**
         * 迭代集合
         *
         * @param key     要迭代的集合
         * @param options 迭代的条件
         * @return 连接,如果报错,调用 .close() 方法关闭
         */
        Cursor<ZSetOperations.TypedTuple<Object>> zScan(String key, ScanOptions options);
    
    }
    
  2. RedisServiceImpl实现

    import com.sheng.boot.redis.service.RedisService;
    import org.springframework.data.redis.connection.DataType;
    import org.springframework.data.redis.core.*;
    import org.springframework.stereotype.Service;
    
    import javax.annotation.Resource;
    import java.util.*;
    import java.util.concurrent.TimeUnit;
    
    /**
     * 说明:
     *
     * @author sheng
     */
    @Service
    public class RedisServiceImpl implements RedisService {
        @Resource
        private RedisTemplate<String, Object> redisTemplate;
        @Resource
        private ValueOperations<String, Object> valueOperations;
        @Resource
        private HashOperations<String, String, Object> hashOperations;
        @Resource
        private ListOperations<String, Object> listOperations;
        @Resource
        private SetOperations<String, Object> setOperations;
        @Resource
        private ZSetOperations<String, Object> zSetOperations;
    
        @Override
        public Boolean delete(String key) {
            return redisTemplate.delete(key);
        }
    
        @Override
        public Long delete(Collection<String> keys) {
            return redisTemplate.delete(keys);
        }
    
        @Override
        public byte[] dump(String key) {
            return redisTemplate.dump(key);
        }
    
        @Override
        public Boolean hasKey(String key) {
            return redisTemplate.hasKey(key);
        }
    
        @Override
        public Boolean expire(String key, long timeout, TimeUnit timeUnit) {
            return redisTemplate.expire(key, timeout, timeUnit);
        }
    
        @Override
        public Boolean expireAt(String key, Date date) {
            return redisTemplate.expireAt(key, date);
        }
    
        @Override
        public Set<String> keys(String pattern) {
            return redisTemplate.keys(pattern);
        }
    
        @Override
        public Boolean move(String key, int dbIndex) {
            return redisTemplate.move(key, dbIndex);
        }
    
        @Override
        public Boolean persist(String key) {
            return redisTemplate.persist(key);
        }
    
        @Override
        public Long getExpire(String key, TimeUnit timeUnit) {
            return redisTemplate.getExpire(key, timeUnit);
        }
    
        @Override
        public Long getExpire(String key) {
            return redisTemplate.getExpire(key);
        }
    
        @Override
        public String randomKey() {
            return redisTemplate.randomKey();
        }
    
        @Override
        public void rename(String oldKey, String newKey) {
            redisTemplate.rename(oldKey, newKey);
        }
    
        @Override
        public Boolean renameIfAbsent(String oldKey, String newKey) {
            return redisTemplate.renameIfAbsent(oldKey, newKey);
        }
    
        @Override
        public DataType type(String key) {
            return redisTemplate.type(key);
        }
    
        @Override
        public void set(String key, Object value) {
            valueOperations.set(key, value);
        }
    
        @Override
        public Object get(String key) {
            return valueOperations.get(key);
        }
    
        @Override
        public Object get(String key, long start, long end) {
            return valueOperations.get(key, start, end);
        }
    
        @Override
        public Object getAndSet(String key, String value) {
            return valueOperations.getAndSet(key, value);
        }
    
        @Override
        public Boolean getBit(String key, long offset) {
            return valueOperations.getBit(key, offset);
        }
    
        @Override
        public List<Object> multiGet(Collection<String> keys) {
            return valueOperations.multiGet(keys);
        }
    
        @Override
        public Boolean setBit(String key, long offset, boolean value) {
            return valueOperations.setBit(key, offset, value);
        }
    
        @Override
        public void set(String key, String value, long timeout, TimeUnit timeUnit) {
            valueOperations.set(key, value, timeout, timeUnit);
        }
    
        @Override
        public Boolean setIfAbsent(String key, String value) {
            return valueOperations.setIfAbsent(key, value);
        }
    
        @Override
        public void set(String key, String value, long offset) {
            valueOperations.set(key, value, offset);
        }
    
        @Override
        public Long size(String key) {
            return valueOperations.size(key);
        }
    
        @Override
        public void multiSet(Map<String, String> maps) {
            valueOperations.multiSet(maps);
        }
    
        @Override
        public Boolean multiSetIfAbsent(Map<String, String> maps) {
            return valueOperations.multiSetIfAbsent(maps);
        }
    
        @Override
        public Long incrBy(String key, long increment) {
            return valueOperations.increment(key, increment);
        }
    
        @Override
        public Double incrByDouble(String key, double increment) {
            return valueOperations.increment(key, increment);
        }
    
        @Override
        public Integer append(String key, String value) {
            return valueOperations.append(key, value);
        }
    
        @Override
        public Object hGet(String key, String field) {
            return hashOperations.get(key, field);
        }
    
        @Override
        public Map<String, Object> hGetAll(String key) {
            return hashOperations.entries(key);
        }
    
        @Override
        public List<Object> hMultiGet(String key, List<String> fields) {
            return hashOperations.multiGet(key, fields);
        }
    
        @Override
        public void hPut(String key, String hashKey, Object value) {
            hashOperations.put(key, hashKey, value);
        }
    
        @Override
        public void hPutAll(String key, Map<String, String> maps) {
            hashOperations.putAll(key, maps);
        }
    
        @Override
        public Boolean hPutIfAbsent(String key, String hashKey, Object value) {
            return hashOperations.putIfAbsent(key, hashKey, value);
        }
    
        @Override
        public Long hDelete(String key, Object... fields) {
            return hashOperations.delete(key, fields);
        }
    
        @Override
        public boolean hHasKey(String key, String field) {
            return hashOperations.hasKey(key, field);
        }
    
        @Override
        public Long hIncrBy(String key, String field, long increment) {
            return hashOperations.increment(key, field, increment);
        }
    
        @Override
        public Double hIncrByDouble(String key, String field, Double increment) {
            return hashOperations.increment(key, field, increment);
        }
    
        @Override
        public Set<String> hKeys(String key) {
            return hashOperations.keys(key);
        }
    
        @Override
        public Long hSize(String key) {
            return hashOperations.size(key);
        }
    
        @Override
        public List<Object> hValues(String key) {
            return hashOperations.values(key);
        }
    
        @Override
        public Cursor<Map.Entry<String, Object>> hScan(String key, ScanOptions options) {
            return hashOperations.scan(key, options);
        }
    
        @Override
        public Object lIndex(String key, long index) {
            return listOperations.index(key, index);
        }
    
        @Override
        public List<Object> lRange(String key, long start, long end) {
            return listOperations.range(key, start, end);
        }
    
        @Override
        public Long lLeftPush(String key, Object value) {
            return listOperations.leftPush(key, value);
        }
    
        @Override
        public Long lLeftPushAll(String key, Object... value) {
            return listOperations.leftPushAll(key, value);
        }
    
        @Override
        public Long lLeftPushAll(String key, Collection<Object> value) {
            return listOperations.leftPushAll(key, value);
        }
    
        @Override
        public Long lLeftPushIfPresent(String key, Object value) {
            return listOperations.leftPushIfPresent(key, value);
        }
    
        @Override
        public Long lLeftPush(String key, Object pivot, Object value) {
            return listOperations.leftPush(key, pivot, value);
        }
    
        @Override
        public Long lRightPush(String key, Object value) {
            return listOperations.rightPush(key, value);
        }
    
        @Override
        public Long lRightPushAll(String key, Object... value) {
            return listOperations.rightPushAll(key, value);
        }
    
        @Override
        public Long lRightPushAll(String key, Collection<Object> value) {
            return listOperations.rightPushAll(key, value);
        }
    
        @Override
        public Long lRightPushIfPresent(String key, Object value) {
            return listOperations.rightPushIfPresent(key, value);
        }
    
        @Override
        public Long lRightPush(String key, Object pivot, Object value) {
            return listOperations.rightPush(key, pivot, value);
        }
    
        @Override
        public void lSet(String key, long index, String value) {
            listOperations.set(key, index, value);
        }
    
        @Override
        public Object lLeftPop(String key) {
            return listOperations.leftPop(key);
        }
    
        @Override
        public Object lLeftPop(String key, long timeout, TimeUnit timeUnit) {
            return listOperations.leftPop(key, timeout, timeUnit);
        }
    
        @Override
        public Object lRightPop(String key) {
            return listOperations.rightPop(key);
        }
    
        @Override
        public Object lRightPop(String key, long timeout, TimeUnit timeUnit) {
            return listOperations.rightPop(key, timeout, timeUnit);
        }
    
        @Override
        public Object lRightPopAndLeftPush(String sourceKey, String destinationKey) {
            return listOperations.rightPopAndLeftPush(sourceKey, destinationKey);
        }
    
        @Override
        public Object lRightPopAndLeftPush(String sourceKey, String destinationKey, long timeout, TimeUnit timeUnit) {
            return listOperations.rightPopAndLeftPush(sourceKey, destinationKey, timeout, timeUnit);
        }
    
        @Override
        public Long lRemove(String key, long index, String value) {
            return listOperations.remove(key, index, value);
        }
    
        @Override
        public void lTrim(String key, long start, long end) {
            listOperations.trim(key, start, end);
        }
    
        @Override
        public Long lSize(String key) {
            return listOperations.size(key);
        }
    
        @Override
        public Long sAdd(String key, Object... values) {
            return setOperations.add(key, values);
        }
    
        @Override
        public Long sRemove(String key, Object... values) {
            return setOperations.remove(key, values);
        }
    
        @Override
        public Object sPop(String key) {
            return setOperations.pop(key);
        }
    
        @Override
        public Boolean sMove(String key, String value, String destKey) {
            return setOperations.move(key, value, destKey);
        }
    
        @Override
        public Long sSize(String key) {
            return setOperations.size(key);
        }
    
        @Override
        public Boolean sIsMember(String key, Object value) {
            return setOperations.isMember(key, value);
        }
    
        @Override
        public Set<Object> sIntersect(String key, String otherKey) {
            return setOperations.intersect(key, otherKey);
        }
    
        @Override
        public Set<Object> sIntersect(String key, Collection<String> otherKeys) {
            return setOperations.intersect(key, otherKeys);
        }
    
        @Override
        public Long sIntersectAndStore(String key, String otherKey, String destKey) {
            return setOperations.intersectAndStore(key, otherKey, destKey);
        }
    
        @Override
        public Long sIntersectAndStore(String key, Collection<String> otherKeys, String destKey) {
            return setOperations.intersectAndStore(key, otherKeys, destKey);
        }
    
        @Override
        public Set<Object> sUnion(String key, String otherKeys) {
            return setOperations.union(key, otherKeys);
        }
    
        @Override
        public Set<Object> sUnion(String key, Collection<String> otherKeys) {
            return setOperations.union(key, otherKeys);
        }
    
        @Override
        public Long sUnionAndStore(String key, String otherKey, String destKey) {
            return setOperations.unionAndStore(key, otherKey, destKey);
        }
    
        @Override
        public Long sUnionAndStore(String key, Collection<String> otherKeys, String destKey) {
            return setOperations.unionAndStore(key, otherKeys, destKey);
        }
    
        @Override
        public Set<Object> sDifference(String key, String otherKey) {
            return setOperations.difference(key, otherKey);
        }
    
        @Override
        public Set<Object> sDifference(String key, Collection<String> otherKeys) {
            return setOperations.difference(key, otherKeys);
        }
    
        @Override
        public Long sDifference(String key, String otherKey, String destKey) {
            return setOperations.differenceAndStore(key, otherKey, destKey);
        }
    
        @Override
        public Long sDifference(String key, Collection<String> otherKeys, String destKey) {
            return setOperations.differenceAndStore(key, otherKeys, destKey);
        }
    
        @Override
        public Set<Object> sMembers(String key) {
            return setOperations.members(key);
        }
    
        @Override
        public Object sRandomMember(String key) {
            return setOperations.randomMember(key);
        }
    
        @Override
        public List<Object> sRandomMembers(String key, long count) {
            return setOperations.randomMembers(key, count);
        }
    
        @Override
        public Set<Object> sDistinctRandomMembers(String key, long count) {
            return setOperations.distinctRandomMembers(key, count);
        }
    
        @Override
        public Cursor<Object> sScan(String key, ScanOptions options) {
            return setOperations.scan(key, options);
        }
    
        @Override
        public Boolean zAdd(String key, Object value, double score) {
            return zSetOperations.add(key, value, score);
        }
    
        @Override
        public Long zAdd(String key, Set<ZSetOperations.TypedTuple<Object>> values) {
            return zSetOperations.add(key, values);
        }
    
        @Override
        public Long zRemove(String key, Object... values) {
            return zSetOperations.remove(key, values);
        }
    
        @Override
        public Double zIncrementScore(String key, Object value, double delta) {
            return zSetOperations.incrementScore(key, value, delta);
        }
    
        @Override
        public Long zRank(String key, Object value) {
            return zSetOperations.rank(key, value);
        }
    
        @Override
        public Long zReverseRank(String key, Object value) {
            return zSetOperations.reverseRank(key, value);
        }
    
        @Override
        public Set<Object> zRange(String key, long start, long end) {
            return zSetOperations.range(key, start, end);
        }
    
        @Override
        public Set<ZSetOperations.TypedTuple<Object>> zRangeWithScores(String key, long start, long end) {
            return zSetOperations.rangeWithScores(key, start, end);
        }
    
        @Override
        public Set<Object> zRangeByScore(String key, double min, double max) {
            return zSetOperations.rangeByScore(key, min, max);
        }
    
        @Override
        public Set<ZSetOperations.TypedTuple<Object>> zRangeByScoreWithScores(String key, double min, double max) {
            return zSetOperations.rangeByScoreWithScores(key, min, max);
        }
    
        @Override
        public Set<ZSetOperations.TypedTuple<Object>> zRangeByScoreWithScores(String key, double min, double max, long start, long end) {
            return zSetOperations.rangeByScoreWithScores(key, min, max, start, end);
        }
    
        @Override
        public Set<Object> zReverseRange(String key, long start, long end) {
            return zSetOperations.reverseRange(key, start, end);
        }
    
        @Override
        public Set<ZSetOperations.TypedTuple<Object>> zReverseRangeWithScores(String key, long start, long end) {
            return zSetOperations.reverseRangeWithScores(key, start, end);
        }
    
        @Override
        public Set<Object> zReverseRangeByScore(String key, double min, double max) {
            return zSetOperations.reverseRangeByScore(key, min, max);
        }
    
        @Override
        public Set<ZSetOperations.TypedTuple<Object>> zReverseRangeByScoreWithScores(String key, double min, double max) {
            return zSetOperations.reverseRangeByScoreWithScores(key, min, max);
        }
    
        @Override
        public Set<Object> zReverseRangeByScore(String key, double min, double max, long start, long end) {
            return zSetOperations.reverseRangeByScore(key, min, max, start, end);
        }
    
        @Override
        public Long zCount(String key, double min, double max) {
            return zSetOperations.count(key, min, max);
        }
    
        @Override
        public Long zSize(String key) {
            return zSetOperations.size(key);
        }
    
        @Override
        public Long zCard(String key) {
            return zSetOperations.zCard(key);
        }
    
        @Override
        public Double zScore(String key, Object value) {
            return zSetOperations.score(key, value);
        }
    
        @Override
        public Long zRemoveRange(String key, long start, long end) {
            return zSetOperations.removeRange(key, start, end);
        }
    
        @Override
        public Long zRemoveRangeByScore(String key, double min, double max) {
            return zSetOperations.removeRangeByScore(key, min, max);
        }
    
        @Override
        public Long zUnionAndStore(String key, String otherKey, String destKey) {
            return zSetOperations.unionAndStore(key, otherKey, destKey);
        }
    
        @Override
        public Long zUnionAndStore(String key, Collection<String> otherKeys, String destKey) {
            return zSetOperations.unionAndStore(key, otherKeys, destKey);
        }
    
        @Override
        public Long zIntersectAndStore(String key, String otherKey, String destKey) {
            return zSetOperations.intersectAndStore(key, otherKey, destKey);
        }
    
        @Override
        public Long zIntersectAndStore(String key, Collection<String> otherKeys, String destKey) {
            return zSetOperations.intersectAndStore(key, otherKeys, destKey);
        }
    
        @Override
        public Cursor<ZSetOperations.TypedTuple<Object>> zScan(String key, ScanOptions options) {
            return zSetOperations.scan(key, options);
        }
    }    
    

相关文章

网友评论

      本文标题:06.`spring boot`集成`redis`

      本文链接:https://www.haomeiwen.com/subject/uvdtektx.html