b067bba1e9cc69e3063159a34f9e21e12749eaaa
CacheFacade.md
| ... | ... | @@ -0,0 +1,135 @@ |
| 1 | +# 缓存门面类 `CacheFacade` 使用说明 |
|
| 2 | +`CacheFacade` 是对底层 `RedissonCache` 缓存操作类的封装,提供了统一的缓存操作接口,简化了缓存的读写、集合操作、哈希操作、锁机制等功能的调用。 |
|
| 3 | + |
|
| 4 | +## 类路径 |
|
| 5 | +```plain |
|
| 6 | +java |
|
| 7 | + |
|
| 8 | + |
|
| 9 | +复制编辑 |
|
| 10 | +package com.sie.snest.engine.facade; |
|
| 11 | +``` |
|
| 12 | + |
|
| 13 | +--- |
|
| 14 | + |
|
| 15 | +## 主要功能 |
|
| 16 | +### 基础缓存操作 |
|
| 17 | +| 方法 | 描述 | |
|
| 18 | +| --- | --- | |
|
| 19 | +| `getObj(String key)` | 获取指定 `key`<br/> 的缓存对象。 | |
|
| 20 | +| `getString(String key)` | 获取指定 `key`<br/> 的字符串类型缓存值。 | |
|
| 21 | +| `setString(String key, String value, Long expired)` | 设置字符串类型缓存值,支持过期时间(单位:秒)。 | |
|
| 22 | +| `setStringIfAbsent(String key, String value, Long expired)` | 若 `key`<br/> 不存在,则设置值并返回 `true`<br/>,否则返回 `false`<br/>。 | |
|
| 23 | +| `put(String key, T value, Long expired)` | 通用方式设置缓存对象,并设置过期时间。 | |
|
| 24 | +| `remove(String key)` | 删除指定 `key`<br/> 的缓存内容。 | |
|
| 25 | +| `expire(String key, Long expired)` | 更新缓存的过期时间。 | |
|
| 26 | +| `exists(String key)` | 判断缓存是否存在。 | |
|
| 27 | + |
|
| 28 | + |
|
| 29 | +--- |
|
| 30 | + |
|
| 31 | +### 列表操作(List) |
|
| 32 | +| 方法 | 描述 | |
|
| 33 | +| --- | --- | |
|
| 34 | +| `getList(String key)` | 获取缓存中存储的 `List`<br/>。 | |
|
| 35 | +| `addList(String key, List value, Long expired)` | 向缓存中添加一个 `List`<br/>。 | |
|
| 36 | +| `removeList(String key, List value)` | 从缓存 `List`<br/> 中移除指定元素。 | |
|
| 37 | +| `deleteList(String key)` | 删除整个 `List`<br/>。 | |
|
| 38 | + |
|
| 39 | + |
|
| 40 | +--- |
|
| 41 | + |
|
| 42 | +### 哈希表操作(Hash) |
|
| 43 | +| 方法 | 描述 | |
|
| 44 | +| --- | --- | |
|
| 45 | +| `hGet(String key, String field)` | 获取哈希表中指定字段的值。 | |
|
| 46 | +| `hMGet(String key, Set<String> field)` | 获取哈希表中多个字段的值。 | |
|
| 47 | +| `hGetAll(String key)` | 获取整个哈希表的字段和值。 | |
|
| 48 | +| `hSet(String key, String field, String value, Long expired)` | 设置哈希表中指定字段的值。 | |
|
| 49 | +| `hSetAll(String key, Map<String, String> value, Long expired)` | 设置哈希表多个字段值。 | |
|
| 50 | +| `hSetIfAbsent(String key, String field, String value, Long expired)` | 字段不存在时设置值。 | |
|
| 51 | +| `hDel(String key, String field)` | 删除哈希表中指定字段。 | |
|
| 52 | +| `hDelKeys(String key, String[] fields)` | 删除哈希表中多个字段。 | |
|
| 53 | +| `hLen(String key)` | 获取哈希表的字段数量。 | |
|
| 54 | +| `hKeys(String key)` | 获取所有字段名。 | |
|
| 55 | + |
|
| 56 | + |
|
| 57 | +--- |
|
| 58 | + |
|
| 59 | +### 集合操作(Set) |
|
| 60 | +| 方法 | 描述 | |
|
| 61 | +| --- | --- | |
|
| 62 | +| `sExists(String key)` | 判断集合是否存在。 | |
|
| 63 | +| `sIsMember(String key, String field)` | 判断元素是否是集合成员。 | |
|
| 64 | +| `sAdd(String key, String field, Long expired)` | 向集合中添加一个元素。 | |
|
| 65 | +| `sAddAll(String key, Collection<String> field, Long expired)` | 添加多个元素。 | |
|
| 66 | +| `sRemove(String key, String field)` | 移除集合中指定元素。 | |
|
| 67 | +| `sCard(String key)` | 获取集合中元素数量。 | |
|
| 68 | +| `sMembers(String key)` | 获取集合中所有成员。 | |
|
| 69 | + |
|
| 70 | + |
|
| 71 | +--- |
|
| 72 | + |
|
| 73 | +### 模糊删除与扫描 |
|
| 74 | +| 方法 | 描述 | |
|
| 75 | +| --- | --- | |
|
| 76 | +| `scanKeys(String key)` | 扫描匹配的 key 集合。 | |
|
| 77 | +| `deleteByPattern(String key)` | 删除所有匹配 `pattern`<br/> 的 key。 | |
|
| 78 | + |
|
| 79 | + |
|
| 80 | +--- |
|
| 81 | + |
|
| 82 | +### 分布式锁操作 |
|
| 83 | +| 方法 | 描述 | |
|
| 84 | +| --- | --- | |
|
| 85 | +| `lock(String key)` | 加锁,无超时限制。 | |
|
| 86 | +| `lock(String key, Long timeout)` | 加锁,超时时间单位秒。 | |
|
| 87 | +| `tryLock(String key, Long waitTime, Long leaseTime)` | 尝试加锁,支持等待时间和持有时间。 | |
|
| 88 | +| `unlock(String key)` | 解锁。 | |
|
| 89 | + |
|
| 90 | + |
|
| 91 | +--- |
|
| 92 | + |
|
| 93 | +## 典型使用场景 |
|
| 94 | +### 缓存配置数据 |
|
| 95 | +```plain |
|
| 96 | +java |
|
| 97 | + |
|
| 98 | + |
|
| 99 | +复制编辑 |
|
| 100 | +String config = CacheFacade.getString("system:config"); |
|
| 101 | +if (config == null) { |
|
| 102 | + config = loadConfig(); |
|
| 103 | + CacheFacade.setString("system:config", config, 3600L); |
|
| 104 | +} |
|
| 105 | +``` |
|
| 106 | + |
|
| 107 | +--- |
|
| 108 | + |
|
| 109 | +### 控制接口幂等性 |
|
| 110 | +```plain |
|
| 111 | +java |
|
| 112 | + |
|
| 113 | + |
|
| 114 | +复制编辑 |
|
| 115 | +if (!CacheFacade.setStringIfAbsent("request:lock:" + requestId, "1", 10L)) { |
|
| 116 | + throw new RuntimeException("重复请求"); |
|
| 117 | +} |
|
| 118 | +``` |
|
| 119 | + |
|
| 120 | +--- |
|
| 121 | + |
|
| 122 | +### 分布式锁示例 |
|
| 123 | +```plain |
|
| 124 | +java |
|
| 125 | + |
|
| 126 | + |
|
| 127 | +复制编辑 |
|
| 128 | +try { |
|
| 129 | + CacheFacade.lock("job:run", 30L); |
|
| 130 | + runJob(); |
|
| 131 | +} finally { |
|
| 132 | + CacheFacade.unlock("job:run"); |
|
| 133 | +} |
|
| 134 | +``` |
|
| 135 | + |