# HOS-Redis
# 概述
在HOS平台中HOS-Redis组件提供了两个操作redis的工具类:RedisTenantUtil与RedisUtil。
- RedisTenantUtil工具类支持多租户功能,根据多租户开关自动将租户id拼接到key中
- RedisUtil工具类中无其他特殊处理,缓存key由开发者自定义
RedisUtil工具类提供了对常用数据类型(string,hash、list、set、sort set)的操作方法,如果想用redis来快速实现缓存的相关功能,可以参考HOSCache组件
如果想用redis实现分布式锁,可以参考Redisson分布式锁功能
# 配置
# 导入maven依赖
<dependency>
<groupId>com.mediway.hos</groupId>
<artifactId>hos-framework-redis-starter</artifactId>
</dependency>
# 配置文件
spring:
redis:
password: xxxxx #密码
database: 0
timeout: 5000 #连接超时时间(毫秒)
#host: 127.0.0.1 #redis地址,单机模式下使用
#port: 6379 #redis使用的接口,单机模式下使用
#连接池相关配置,一般直接采用默认值,可以不写
pool:
max-activ: 8 #最大连接数(使用负值表示没有限制)
max-wait: -1 #连接池最大阻塞等待时间(使用负值表示没有限制)
max-idle: 8 #连接池中的最大空闲连接
min-idle: 0 #连接池中的最小空闲连接
#集群模式下的redis的ip和接口配置
cluster:
nodes: 192.16.18.196:7001,192.16.18.196:7002,192.16.18.196:7003,192.16.18.196:7004,192.16.18.196:7005,192.16.18.196:7006
# 功能介绍
两个工具类提供的方法完全一样,区别只是key的处理策略不同,具体方法如下:
// ***************************** normal *****************************
/**
* 对 redis 中指定键对应的数据设置失效时间
*
* @param key 键
* @param time 时间(秒),time要大于0
* @return
*/
public static boolean expire(String key, long time);
/**
* 从 redis 中根据指定的 key 获取已设置的过期时间
*
* @param key 键,不能为null
* @return 时间(秒),返回0代表为永久有效
*/
public static long getExpire(String key);
/**
* 判断 redis 中是否存在指定的 key
*
* @param key 键,不能为null
* @return true表示存在,false表示不存在
*/
public static boolean exists(String key);
/**
* 从 redis 中移除指定 key 对应的数据
*
* @param keys 可以传一个值或多个
*/
public static long remove(String... keys);
/**
* 从 redis 中根据表达式获取 key
*
* @param pattern
* @return
*/
public static Set<String> getKeys(String pattern)
// ============================ String =============================
/**
* 从 redis 中获取指定 key 对应的 string 数据
*
* @param key 键,不能为null
* @return key 对应的字符串数据
*/
public static <T> T get(String key);
/**
* 判断 redis 中指定 key 的数据对应偏移位置的 bit 位是否为 1
*
* @param key 键,不能为null
* @param offset 偏移位置
* @return true表示存在,false表示不存在
*/
public static boolean getBit(String key, long offset);
/**
* 将指定的 key, value 放到 redis 中
*
* @param key 键,不能为null
* @param value 值,不能为null
* @return true表示成功,false表示失败
*/
public static <T> boolean set(String key, T value);
/**
* 将指定的 key, value 放到 redis 中,并设置过期时间
*
* @param key 键,不能为null
* @param value 值,不能为null
* @param time 时间(秒),time要大于0,如果time小于等于0,将设置无限期
* @return true表示成功,false表示失败
*/
public static <T> boolean set(String key, T value, long time);
/**
* 将 redis 中指定 key 对应数据的偏移位置的 bit 位设置为 0/1
*
* @param key 键,不能为null
* @param offset 偏移位置
* @param flag true表示设置为1,false表示设置为0
* @return true表示成功,false表示失败
*/
public static boolean setBit(String key, long offset, boolean flag);
/**
* 对 redis 中指定 key 的数据递增,并返回递增后的值
*
* @param key 键,不能为null
* @param delta 要增加几(大于0)
* @return
*/
public static long incr(String key, long delta);
/**
* 对 redis 中指定 key 的数据递减,并返回递减后的值
*
* @param key 键,不能为null
* @param delta 要减少几(大于0)
* @return
*/
public static long decr(String key, long delta);
/**
* 判断 redis 中指定 key 对应的 hash 表中是否有 hashKey
*
* @param key 键,不能为null
* @param hashKey hash表中的键,不能为null
* @return true表示存在,false表示不存在
*/
public static boolean hexists(String key, String hashKey)
/**
* 从 redis 中获取指定 key 对应的 hash 表中的指定 hashKey 所对应的值
*
* @param key 键,不能为null
* @param hashKey hash表中的键,不能为null
* @return 值
*/
public static <T> T hget(String key, String hashKey)
/**
* 向 redis 中指定 key 对应的 hash 表(如果 hash 表不存在则自动创建)中放入 hashKey,value 数据
*
* @param key 键,不能为null
* @param hashKey hash表中的键,不能为null
* @param value 值,不能为null
* @return true表示成功,false表示失败
*/
public static <T> boolean hset(String key, String hashKey, T value);
/**
* 向 redis 中指定 key 对应的 hash 表(如果 hash 表不存在则自动创建)中放入 hashKey,value 数据,并设置过期时间
*
* @param key 键,不能为null
* @param hashKey hash表中的键,不能为null
* @param value 值,不能为null
* @param time 过期时间(秒),注意:如果已存在的hash表有时间,这里将会替换原有的时间
* @return true表示成功,false表示失败
*/
public static <T> boolean hset(String key, String hashKey, T value, long time);
/**
* 删除 redis 中指定 key 对应的 hash 表中等于 hashKeys 的数据
*
* @param key 键,不能为null
* @param hashKeys hash表中的键,可以使多个,不能为null
*/
public static <T> void hdel(String key, T... hashKeys);
/**
* 从 redis 中获取指定 key 对应的 hash 表,并返回相应的 map 对象
*
* @param key 键,不能为null
* @return map对象,包含所有的键值对
*/
public static Map<?, ?> hmget(String key);
/**
* 向 redis 中放入指定 key,并设置对应的数据类型为 map
*
* @param key 键,不能为null
* @param map 多个键值对应的map,不能为null
* @return true表示成功,false表示失败
*/
public static boolean hmset(String key, Map<String, ?> map);
/**
* 向 redis 中放入指定 key,并设置对应的数据类型为 map 以及过期时间
*
* @param key 键,不能为null
* @param map 对应多个键值,不能为null
* @param time 时间(秒),time要大于0,如果time小于等于0,将设置无限期
* @return true表示成功,false表示失败
*/
public static boolean hmset(String key, Map<String, ?> map, long time);
/**
* 对 redis 中指定 key 对应的 hash 表(如果 hash 表不存在则自动创建)递增,并返回新增后的值
*
* @param key 键,不能为null
* @param item 项,不能为null
* @param delta 要增加几(大于0)
* @return 新增后的值
*/
public static double hincr(String key, String item, double delta);
/**
* 对 redis 中指定 key 对应的 hash 表(如果 hash 表不存在则自动创建)递增,并返回新增后的值
*
* @param key 键,不能为null
* @param item 项,不能为null
* @param delta 要减少几(大于0)
* @return
*/
public static double hdecr(String key, String item, double delta);
/**
* 从 redis 中移除指定 key 对应 hash 表中键为 values 的数据
*
* @param key 键,不能为null
* @param values 值,不能为null
* @return 移除的个数
*/
public static <T> long hremove(String key, T... values);
// ============================set=============================
/**
* 判断 redis 中是否存在指定 key 对应的 set 对象
*
* @param key 键,不能为null
* @param value 值,不能为null
* @return true表示存在,false表示不存在
*/
public static <T> boolean sexists(String key, T value);
/**
* 从 redis 中根据指定 key 对应的值,并返回 set 对象
*
* @param key 键,不能为null
* @return
*/
public static Set<?> sget(String key);
/**
* 向 redis 中放入指定 key 和数据,并设置其数据类型为 set
*
* @param key 键,不能为null
* @param values 值,不能为null
* @return 成功个数
*/
public static <T> long sset(String key, T... values);
/**
* 向 redis 中放入指定 key 和数据,并设置其数据类型为 set 以及过期时间
*
* @param key 键,不能为null
* @param time 过期时间(秒),注意:如果已存在的hash表有时间,这里将会替换原有的时间
* @param values 值,不能为null
* @return 成功个数
*/
public static <T> long sset(String key, long time, T... values)
/**
* 获取 redis 中指定 key 对应 set 的大小
*
* @param key 键,不能为null
* @return
*/
public static long ssize(String key);
/**
* 从 redis 中移除指定 key 对应 set 中键为 values 的数据
*
* @param key 键,不能为null
* @param values 值,不能为null
* @return 移除的个数
*/
public static <T> long sremove(String key, T... values);
// =============================== list =================================
/**
* 从 redis 中获取指定 key 对应 list 的大小
*
* @param key 键,不能为null
* @return
*/
public static long lsize(String key);
/**
* 从 redis 中获取指定 key 对应 list 中 index 位置的值
*
* @param key 键,不能为null
* @param index 当index>=0时,0为表头,1为第二个元素,依次类推;当index<0时,-1为表尾,-2为倒数第二个元素,依次类推
* @return
*/
public static <T> T lindex(String key, long index);
/**
* 从 redis 中获取指定 key 对应 list 指定范围的值(start~end设置为0~-1将返回所有值)
*
* @param key 键,不能为null
* @param start 起始位置,0表示起始位置
* @param end 结束位置,-1表示结束位置
* @return
*/
public static List<?> lget(String key, long start, long end);
/**
* 向 redis 中放入指定 key,并设置数组类型为 list,将 value 加入到 list 尾部
*
* @param key 键,不能为null
* @param value 值,不能为null
* @return
*/
public static <T> boolean lset(String key, T value);
/**
* 向 redis 中放入指定 key,并设置数组类型为 list,将 value 加入到 list 尾部,同时设置过期时间
*
* @param key 键,不能为null
* @param value 值,不能为null
* @param time 时间(秒),time要大于0,如果time小于等于0,将设置无限期
* @return
*/
public static <T> boolean lset(String key, T value, long time);
/**
* 向 redis 中放入指定 key,并设置数组类型为 list,并以 value 填入 list
*
* @param key 键,不能为null
* @param value 值,不能为null
* @return
*/
public static boolean lset(String key, List value);
/**
* 向 redis 中放入指定 key,并设置数组类型为 list,并以 value 填入 list,同时设置过期时间
*
* @param key 键,不能为null
* @param value 值,不能为null
* @param time 时间(秒),time要大于0,如果time小于等于0,将设置无限期
* @return
*/
public static boolean lset(String key, List value, long time);
/**
* 将 redis 中指定 key 对应的 list 数据中指定 index 位置的数据更新为 value
*
* @param key 键,不能为null
* @param index 索引
* @param value 值,不能为null
* @return
*/
public static <T> boolean lupdate(String key, long index, T value);
/**
* 从 redis 中指定 key 对应的 list 中移除 n 个值为 value 的数据
*
* @param key 键,不能为null
* @param count 移除多少个
* @param value 值,不能为null
* @return 移除的个数
*/
public static <T> long lremove(String key, long count, T value) ;
//Zset 根据 socre 排序 不重复 每个元素附加一个 socre double类型的属性(double 可以重复)
/**
* 添加 ZSet 元素
* @param key
* @param value
* @param score
*/
public boolean zSetAdd(String key,Object value,double score);
/**
* 批量添加 Zset
*
* Set<TypedTuple<Object>> tuples = new HashSet<>();
* TypedTuple<Object> objectTypedTuple1 = new DefaultTypedTuple<Object>("zset-5",9.6);
* tuples.add(objectTypedTuple1);
* @param key
* @param tuples
* @return
*/
public Long zSetBatchAdd(String key,Set<ZSetOperations.TypedTuple<Object>> tuples);
/**
* Zset 删除一个或多个元素
* @param key
* @param values
* @return
*/
public Long zSetRemove(String key,Object ...values)