-
Notifications
You must be signed in to change notification settings - Fork 0
/
IRedisManager.cs
355 lines (314 loc) · 12.6 KB
/
IRedisManager.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
using StackExchange.Redis;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace NetPro.RedisManager
{
/// <summary>
/// 同时支持CsRedis与StackExchagne.Redis
/// </summary>
//[Obsolete("过时驱动,建议单独使用Csredis驱动或 StackExchange.Redis")]
public interface IRedisManager
{
/// <summary>
/// 获取缓存
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
T Get<T>(string key);
/// <summary>
/// 异步获取缓存
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
Task<T> GetAsync<T>(string key);
/// <summary>
///获取或者创建缓存
/// localExpiredTime参数大于0并且小于expiredTime数据将缓存到本地内存
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="func"></param>
/// <param name="expiredTime"></param>
/// <param name="localExpiredTime">本地过期时间</param>
/// <returns></returns>
T GetOrSet<T>(string key, Func<T> func = null, TimeSpan? expiredTime = null, int localExpiredTime = 0);
/// <summary>
///获取或者创建缓存
/// localExpiredTime参数大于0并且小于expiredTime数据将缓存到本地内存
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="func"></param>
/// <param name="expiredTime"></param>
/// <param name="localExpiredTime">本地过期时间</param>
/// <returns></returns>
Task<T> GetOrSetAsync<T>(string key, Func<Task<T>> func = null, TimeSpan? expiredTime = null, int localExpiredTime = 0);
/// <summary>
///新增缓存
/// </summary>
/// <param name="key">缓存key值,key值必须满足规则:模块名:类名:业务方法名:参数.不满足规则将不会被缓存</param>
/// <param name="data">Value for caching</param>
/// <param name="expiredTime">Cache time in minutes</param>
bool Set(string key, object data, TimeSpan? expiredTime = null);
/// <summary>
///新增缓存
/// </summary>
/// <param name="key">缓存key值,key值必须满足规则:模块名:类名:业务方法名:参数.不满足规则将不会被缓存</param>
/// <param name="data">Value for caching</param>
/// <param name="expiredTime">Cache time in minutes</param>
Task<bool> SetAsync(string key, object data, TimeSpan? expiredTime = null);
/// <summary>
/// 是否存在
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
bool Exists(string key);
/// <summary>
/// 是否存在
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
Task<bool> ExistsAsync(string key);
/// <summary>
/// 移除key
/// </summary>
/// <param name="key"></param>
/// <returns>删除的个数</returns>
Task<bool> RemoveAsync(string key);
/// <summary>
/// 移除key
/// </summary>
/// <param name="key"></param>
/// <returns>删除的个数</returns>
bool Remove(string key);
/// <summary>
/// 批量移除key
/// </summary>
/// <param name="keys"></param>
/// <returns>删除的个数</returns>
long Remove(string[] keys);
/// <summary>
/// 批量移除key
/// </summary>
/// <param name="keys"></param>
/// <returns></returns>
Task<long> RemoveAsync(string[] keys);
/// <summary>
/// 向有序集合添加一个或多个成员,或者更新已存在成员的分数
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="obj"></param>
/// <param name="score"></param>
/// <returns></returns>
bool SortedSetAdd<T>(string key, T obj, decimal score);
/// <summary>
/// 向有序集合添加一个或多个成员,或者更新已存在成员的分数
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="obj"></param>
/// <param name="score"></param>
/// <returns></returns>
Task<bool> SortedSetAddAsync<T>(string key, T obj, decimal score);
/// <summary>
/// 通过索引区间返回有序集合成指定区间内的成员
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
List<T> SortedSetRangeByRank<T>(string key, long start = 0, long stop = -1);
/// <summary>
/// 通过索引区间返回有序集合成指定区间内的成员
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
Task<List<T>> SortedSetRangeByRankAsync<T>(string key, long start = 0, long stop = -1);
/// <summary>
/// 删除hash中的字段
/// </summary>
/// <param name="key"></param>
/// <param name="field"></param>
/// <returns></returns>
long HashDelete(string key, IEnumerable<string> field);
/// <summary>
/// 删除hash中的字段
/// </summary>
/// <param name="key"></param>
/// <param name="field"></param>
/// <returns></returns>
long HashDelete(string key, string[] field);
/// <summary>
/// 删除hash中的字段
/// </summary>
/// <param name="key"></param>
/// <param name="field"></param>
/// <returns></returns>
Task<long> HashDeleteAsync(string key, IEnumerable<string> field);
/// <summary>
/// 删除hash中的字段
/// </summary>
/// <param name="key"></param>
/// <param name="field"></param>
/// <returns></returns>
Task<long> HashDeleteAsync(string key, string[] field);
/// <summary>
/// 检查 hash条目中的 key是否存在
/// </summary>
/// <param name="key"></param>
/// <param name="hashField"></param>
/// <returns></returns>
Task<bool> HashExistsAsync(string key, string hashField);
/// <summary>
/// 检查 hash条目中的 key是否存在
/// </summary>
/// <param name="key"></param>
/// <param name="hashField"></param>
/// <returns></returns>
bool HashExists(string key, string hashField);
/// <summary>
/// 设置或更新Hash
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="field"></param>
/// <param name="value"></param>
/// <param name="expiredTime">过期时间</param>
/// <returns></returns>
bool HashSet<T>(string key, string field, T value, TimeSpan? expiredTime = null);
/// <summary>
/// 获取Hash
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="field"></param>
/// <returns></returns>
T HashGet<T>(string key, string field);
/// <summary>
/// 设置或更新Hash
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="field"></param>
/// <param name="value"></param>
/// <param name="expiredTime">过期时间</param>
/// <returns></returns>
Task<bool> HashSetAsync<T>(string key, string field, T value, TimeSpan? expiredTime = null);
/// <summary>
/// 获取Hash
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="field"></param>
/// <returns></returns>
Task<T> HashGetAsync<T>(string key, string field);
/// <summary>
/// lua脚本
/// obj :new {key=key}
/// </summary>
/// <param name="script"></param>
/// <param name="obj"></param>
object GetByLuaScript(string script, object obj);
/// <summary>
/// value递减
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <param name="expiry"></param>
/// <returns></returns>
long StringDecrement(string key, long value = 1, TimeSpan? expiry = null);
/// <summary>
/// value递减
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <param name="expiry">过期时间</param>
/// <returns></returns>
/// <remarks>TODO 待优化为脚本批量操作</remarks>
Task<long> StringDecrementAsync(string key, long value = 1, TimeSpan? expiry = null);
/// <summary>
/// value递增
/// </summary>
/// <param name="key"></param>
/// <param name="value">递增值</param>
/// <returns></returns>
long StringIncrement(string key, long value = 1, TimeSpan? expiry = null);
/// <summary>
/// value递增
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <returns></returns>
Task<long> StringIncrementAsync(string key, long value = 1, TimeSpan? expiry = null);
/// <summary>
/// 返回具有超时的键的剩余生存时间
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
Task<long> KeyTimeToLiveAsync(string key);
/// <summary>
/// 返回具有超时的键的剩余生存时间
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
long KeyTimeToLive(string key);
/// <summary>
/// 设置一个超时键
/// </summary>
/// <param name="key"></param>
/// <param name="expiry"></param>
/// <returns>true:设置成功,false:设置失败</returns>
Task<bool> KeyExpireAsync(string key, TimeSpan expiry);
/// <summary>
/// 设置一个超时键
/// </summary>
/// <param name="key"></param>
/// <param name="expiry"></param>
/// <returns>true:设置成功,false:设置失败</returns>
bool KeyExpire(string key, TimeSpan expiry);
/// <summary>
/// 获取一个分布式锁,不支持嵌套锁
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="resource"></param>
/// <param name="expiredTime">超时过期事件,单位秒</param>
/// <param name="func"></param>
/// <param name="isAwait">是否等待</param>
/// <returns></returns>
T GetDistributedLock<T>(string resource, int expiredTime, Func<T> func, bool isAwait = true);
/// <summary>
/// 发布消息
/// </summary>
/// <param name="channel">管道</param>
/// <param name="input">发布的消息</param>
/// <returns></returns>
[Obsolete("废弃,请单独使用Csredis驱动或 StackExchange.Redis")] long Publish(string channel, string input);
/// <summary>
/// 发布消息
/// </summary>
/// <param name="channel"></param>
/// <param name="input"></param>
/// <returns></returns>
[Obsolete("废弃,请单独使用Csredis驱动或 StackExchange.Redis")] Task<long> PublishAsync(string channel, string input);
/// <summary>
/// 订阅消息
/// </summary>
/// <param name="channel">管道</param>
/// <returns>收到的消息</returns>
[Obsolete("废弃,请单独使用Csredis驱动或 StackExchange.Redis")] string Subscriber(string channel);
/// <summary>
/// 订阅消息
/// </summary>
/// <param name="channel">管道</param>
/// <returns>收到的消息</returns>
[Obsolete("废弃,请单独使用Csredis驱动或 StackExchange.Redis")] Task<string> SubscriberAsync(string channel);
/// <summary>
/// 获得使用原生stackexchange.redis的能力,用于pipeline (stackExchange.redis专用,Csredis驱动使用此方法会报异常)
/// </summary>
IDatabase Database { get; }
}
}