From 6be65c4496e98bad174ef5ac7b6e73c756f33492 Mon Sep 17 00:00:00 2001 From: FatttSnake Date: Thu, 28 Sep 2023 01:36:24 +0800 Subject: [PATCH] Add RedisUtil --- .../kotlin/top/fatweb/api/utils/RedisUtil.kt | 182 ++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100644 src/main/kotlin/top/fatweb/api/utils/RedisUtil.kt diff --git a/src/main/kotlin/top/fatweb/api/utils/RedisUtil.kt b/src/main/kotlin/top/fatweb/api/utils/RedisUtil.kt new file mode 100644 index 0000000..426b772 --- /dev/null +++ b/src/main/kotlin/top/fatweb/api/utils/RedisUtil.kt @@ -0,0 +1,182 @@ +package top.fatweb.api.utils + +import org.springframework.data.redis.core.BoundSetOperations +import org.springframework.data.redis.core.RedisTemplate +import org.springframework.stereotype.Component +import java.util.concurrent.TimeUnit + +@Suppress("UNCHECKED_CAST") +@Component +class RedisUtil(private val redisTemplate: RedisTemplate) { + /** + * 设置有效时间 + * + * @param key 缓存的键 + * @param timeout 超时时间 + * @param timeUnit 时间颗粒度 + * @return true=设置成功;false=设置失败 + */ + fun setExpire(key: String, timeout: Long, timeUnit: TimeUnit = TimeUnit.SECONDS) = + redisTemplate.expire(key, timeout, timeUnit) + + /** + * 获取有效时间 + * + * @param key 缓存的键 + * @return 有效时间 + */ + fun getExpire(key: String, timeUnit: TimeUnit = TimeUnit.SECONDS) = redisTemplate.getExpire(key, timeUnit) + + /** + * 判断 key 是否存在 + * + * @param key 缓存的键 + * @return true=存在; false=不存在 + */ + fun hasKey(key: String) = redisTemplate.hasKey(key) + + /** + * 获得缓存的基本对象列表 + * + * @param pattern 字符串前缀 + * @return 对象列表 + */ + fun keys(pattern: String): Set = redisTemplate.keys(pattern) + + /** + * 缓存基本的对象,Integer、String、实体类等 + * + * @param key 缓存的键 + * @param value 缓存的值 + */ + fun setObject(key: String, value: Any) = redisTemplate.opsForValue().set(key, value) + + /** + * 缓存基本的对象,Integer、String、实体类等 + * + * @param key 缓存的键 + * @param value 缓存的值 + * @param timeout 超时时间 + * @param timeUnit 时间颗粒度 + */ + fun setObject(key: String, value: Any, timeout: Long, timeUnit: TimeUnit = TimeUnit.SECONDS) = + redisTemplate.opsForValue().set(key, value, timeout, timeUnit) + + + /** + * 获得缓存的基本对象 + * + * @param key 缓存的键 + * @return 缓存的值 + */ + fun getObject(key: String) = redisTemplate.opsForValue().get(key) as? T + + /** + * 删除单个对象 + * + * @param key 缓存的键 + * @return true=删除成功;false=删除失败 + */ + fun delObject(key: String) = redisTemplate.delete(key) + + /** + * 删除对象集合 + * + * @param collection 键集合 + * @return 删除个数 + */ + fun delObject(collection: Collection) = redisTemplate.delete(collection) + + /** + * 缓存 List 数据 + * + * @param key 缓存的键 + * @param dataList 缓存的 List 数据 + * @return 缓存的个数 + */ + fun setList(key: String, dataList: List) = redisTemplate.opsForList().rightPushAll(key, dataList) + + /** + * 获得缓存的 List 数据 + * + * @param key 缓存的键 + * @return 缓存的键对应的 List 数据 + */ + fun getList(key: String): List? = redisTemplate.opsForList().range(key, 0, -1) as? List + + /** + * 缓存 Set 数据 + * + * @param key 缓存的键 + * @param dataSet 缓存的 Set 数据 + * @return 缓存数据的对象 + */ + fun setSet(key: String, dataSet: Set): BoundSetOperations { + val boundSetOps: BoundSetOperations = redisTemplate.boundSetOps(key) + for (data in dataSet) { + boundSetOps.add(data) + } + return boundSetOps + } + + /** + * 获得缓存的 Set 数据 + * + * @param key 缓存的键 + * @return 缓存的键对应的 Set 数据 + */ + fun getSet(key: String): Set? = redisTemplate.opsForSet().members(key) as? Set + + /** + * 缓存 Map 数据 + * + * @param key 缓存的键 + * @param dataMap 缓存的 Map 数据 + */ + fun setMap(key: String, dataMap: Map) = redisTemplate.opsForHash().putAll(key, dataMap) + + /** + * 获得缓存的 Map 数据 + * + * @param key 缓存的键 + * @return 缓存的键对应的 Map 数据 + */ + fun getMap(key: String): Map? = redisTemplate.opsForHash().entries(key) as? Map + + /** + * 往 Hash 中存入数据 + * + * @param key Redis 键 + * @param hKey Hash 键 + * @param value 值 + */ + fun setMapValue(key: String, hKey: String, value: Any) = + redisTemplate.opsForHash().put(key, hKey, value) + + /** + * 获取 Hash 中的数据 + * + * @param key Redis 键 + * @param hKey Hash 键 + * @return Hash 中的对象 + */ + fun getMapValue(key: String, hKey: String) = redisTemplate.opsForHash().get(key, hKey) + + /** + * 删除 Hash 中的数据 + * + * @param key Redis 键 + * @param hKey Hash 键 + */ + fun delMapValue(key: String, hKey: String) = redisTemplate.opsForHash().delete(key, hKey) + + /** + * 获取多个 Hash 中的数据 + * + * @param key Redis 键 + * @param hKeys Hash 键集合 + * @return Hash 对象集合 + */ + fun getMultiMapValue(key: String, hKeys: Collection): List = + redisTemplate.opsForHash().multiGet(key, hKeys) +} \ No newline at end of file