1 /// <summary>
2 /// Redis操作
3 /// </summary>
4 public class RedisHelper
5 {
6
7 //static NewtonsoftSerializer serializer = new NewtonsoftSerializer();
8 //static StackExchangeRedisCacheClient cacheClient = new StackExchangeRedisCacheClient(serializer);
9 //private static IDatabase db = cacheClient.Database;
10
11 private static string connstr = System.Configuration.ConfigurationManager.AppSettings["redisCacheClient"];// "127.0.0.1:6379,allowadmin=true";
12 private static ConnectionMultiplexer conn = ConnectionMultiplexer.Connect(connstr);
13 private static IDatabase db = conn.GetDatabase(1);
14
15
16 /// <summary>
17 /// 获取系统的redis key前缀
18 /// </summary>
19 /// <param name="resourceid">资源Id</param>
20 /// <returns></returns>
21 public static string GetMyKey(string resourceid = "")
22 {
23
24 string Key = "report_";
25 if (!string.IsNullOrWhiteSpace(resourceid))
26 {
27 Key = string.Format("report_res_{0}", resourceid);
28 }
29 return Key;
30 }
31
32 #region String 可以设置过期时间 同步
33
34 /// <summary>
35 /// 保存单个key value
36 /// </summary>
37 /// <param name="key">Redis Key</param>
38 /// <param name="value">保存的值</param>
39 /// <param name="expiry">过期时间</param>
40 /// <returns></returns>
41 public static bool SetStringKey(string key, string value, TimeSpan? expiry = default(TimeSpan?))
42 {
43
44 return db.StringSet(key, value, expiry);
45 }
46
47 /// <summary>
48 /// 保存多个key value
49 /// </summary>
50 /// <param name="arr">key</param>
51 /// <returns></returns>
52 public static bool SetStringKey(KeyValuePair<RedisKey, RedisValue>[] arr)
53 {
54 return db.StringSet(arr);
55 }
56
57 /// <summary>
58 /// 保存一个对象
59 /// </summary>
60 /// <typeparam name="T"></typeparam>
61 /// <param name="key"></param>
62 /// <param name="obj"></param>
63 /// <returns></returns>
64 public static bool SetStringKey<T>(string key, T obj, TimeSpan? expiry = default(TimeSpan?))
65 {
66 string json = JsonConvert.SerializeObject(obj);
67 return db.StringSet(key, json, expiry);
68 }
69
70 /// <summary>
71 /// 获取单个key的值
72 /// </summary>
73 /// <param name="key">Redis Key</param>
74 /// <returns></returns>
75
76 public static RedisValue GetStringKey(string key)
77 {
78 return db.StringGet(key);
79 }
80
81
82 /// <summary>
83 /// 获取多个Key
84 /// </summary>
85 /// <param name="listKey">Redis Key集合</param>
86 /// <returns></returns>
87 public static RedisValue[] GetStringKey(List<RedisKey> listKey)
88 {
89 return db.StringGet(listKey.ToArray());
90 }
91
92 /// <summary>
93 /// 获取一个key的对象
94 /// </summary>
95 /// <typeparam name="T"></typeparam>
96 /// <param name="key"></param>
97 /// <returns></returns>
98 public static T GetStringKey<T>(string key)
99 {
100 return JsonConvert.DeserializeObject<T>(db.StringGet(key));
101 }
102 /// <summary>
103 /// 为数字增长val
104 /// </summary>
105 /// <param name="key"></param>
106 /// <param name="val">可以为负</param>
107 /// <returns>增长后的值</returns>
108 public double StringIncrement(string key, double val = 1)
109 {
110 return db.StringIncrement(key, val);
111 }
112
113 /// <summary>
114 /// 为数字减少val
115 /// </summary>
116 /// <param name="key"></param>
117 /// <param name="val">可以为负</param>
118 /// <returns>减少后的值</returns>
119 public double StringDecrement(string key, double val = 1)
120 {
121 return db.StringDecrement(key, val);
122 }
123
124 #endregion
125
126 #region String 可以设置过期时间 异步
127
128 /// <summary>
129 /// 保存单个key value
130 /// </summary>
131 /// <param name="key">Redis Key</param>
132 /// <param name="value">保存的值</param>
133 /// <param name="expiry">过期时间</param>
134 /// <returns></returns>
135 public static async Task<bool> SetStringKeyAsync(string key, string value, TimeSpan? expiry = default(TimeSpan?))
136 {
137
138 return await db.StringSetAsync(key, value, expiry);
139 }
140
141 /// <summary>
142 /// 保存多个key value
143 /// </summary>
144 /// <param name="arr">key</param>
145 /// <returns></returns>
146 public static async Task<bool> SetStringKeyAsync(KeyValuePair<RedisKey, RedisValue>[] arr)
147 {
148 return await db.StringSetAsync(arr);
149 }
150
151 /// <summary>
152 /// 保存一个对象
153 /// </summary>
154 /// <typeparam name="T"></typeparam>
155 /// <param name="key"></param>
156 /// <param name="obj"></param>
157 /// <returns></returns>
158 public static async Task<bool> SetStringKeyAsync<T>(string key, T obj, TimeSpan? expiry = default(TimeSpan?))
159 {
160 string json = JsonConvert.SerializeObject(obj);
161 return await db.StringSetAsync(key, json, expiry);
162 }
163
164 /// <summary>
165 /// 获取单个key的值
166 /// </summary>
167 /// <param name="key">Redis Key</param>
168 /// <returns></returns>
169
170 public static async Task<RedisValue> GetStringKeyAsync(string key)
171 {
172 return await db.StringGetAsync(key);
173 }
174
175
176 /// <summary>
177 /// 获取多个Key
178 /// </summary>
179 /// <param name="listKey">Redis Key集合</param>
180 /// <returns></returns>
181 public static async Task<RedisValue[]> GetStringKeyAsync(List<RedisKey> listKey)
182 {
183 return await db.StringGetAsync(listKey.ToArray());
184 }
185
186 /// <summary>
187 /// 获取一个key的对象
188 /// </summary>
189 /// <typeparam name="T"></typeparam>
190 /// <param name="key"></param>
191 /// <returns></returns>
192 public static async Task<T> GetStringKeyAsync<T>(string key)
193 {
194 return JsonConvert.DeserializeObject<T>(await db.StringGetAsync(key));
195 }
196 /// <summary>
197 /// 为数字增长val
198 /// </summary>
199 /// <param name="key"></param>
200 /// <param name="val">可以为负</param>
201 /// <returns>增长后的值</returns>
202 public async Task<double> StringIncrementAsync(string key, double val = 1)
203 {
204 return await db.StringIncrementAsync(key, val);
205 }
206
207 /// <summary>
208 /// 为数字减少val
209 /// </summary>
210 /// <param name="key"></param>
211 /// <param name="val">可以为负</param>
212 /// <returns>减少后的值</returns>
213 public async Task<double> StringDecrementAsync(string key, double val = 1)
214 {
215 return await db.StringDecrementAsync(key, val);
216 }
217 #endregion
218
219 #region Hash 同步
220 /// <summary>
221 /// 存储数据到hash表
222 /// </summary>
223 /// <typeparam name="T"></typeparam>
224 /// <param name="key"></param>
225 /// <param name="dataKey"></param>
226 /// <param name="t"></param>
227 /// <returns></returns>
228 public static bool HashSet1<T>(string key, string dataKey, List<T> t)
229 {
230 string json = "";
231 foreach (var item in t)
232 {
233 json = JsonConvert.SerializeObject(item);
234 //listHashEntry.Add(new HashEntry(getModelId(item), json));
235 }
236 return db.HashSet(key, dataKey, json);
237
238 //return await ({
239 // string json = ConvertJson(t);
240 // return db.HashSetAsync(key, dataKey, json);
241 //});
242 }
243 /// <summary>
244 /// 保存一个集合
245 /// </summary>
246 /// <typeparam name="T"></typeparam>
247 /// <param name="key">Redis Key</param>
248 /// <param name="list">数据集合</param>
249 /// <param name="getModelId"></param>
250 public static void HashSet<T>(string key, List<T> list, Func<T, string> getModelId)
251 {
252 List<HashEntry> listHashEntry = new List<HashEntry>();
253 foreach (var item in list)
254 {
255 string json = JsonConvert.SerializeObject(item);
256 listHashEntry.Add(new HashEntry(getModelId(item), json));
257 }
258 db.HashSet(key, listHashEntry.ToArray());
259 }
260
261 /// <summary>
262 /// 获取Hash中的单个key的值
263 /// </summary>
264 /// <typeparam name="T"></typeparam>
265 /// <param name="key">Redis Key</param>
266 /// <param name="hasFildValue">RedisValue</param>
267 /// <returns></returns>
268 public static T GetHashKey<T>(string key, string hasFildValue)
269 {
270 if (!string.IsNullOrWhiteSpace(key) && !string.IsNullOrWhiteSpace(hasFildValue))
271 {
272 RedisValue value = db.HashGet(key, hasFildValue);
273 if (!value.IsNullOrEmpty)
274 {
275 return JsonConvert.DeserializeObject<T>(value);
276 }
277 }
278 return default(T);
279 }
280
281 /// <summary>
282 /// 获取hash中的多个key的值
283 /// </summary>
284 /// <typeparam name="T"></typeparam>
285 /// <param name="key">Redis Key</param>
286 /// <param name="listhashFields">RedisValue value</param>
287 /// <returns></returns>
288 public static List<T> GetHashKey<T>(string key, List<RedisValue> listhashFields)
289 {
290 List<T> result = new List<T>();
291 if (!string.IsNullOrWhiteSpace(key) && listhashFields.Count > 0)
292 {
293 RedisValue[] value = db.HashGet(key, listhashFields.ToArray());
294 foreach (var item in value)
295 {
296 if (!item.IsNullOrEmpty)
297 {
298 result.Add(JsonConvert.DeserializeObject<T>(item));
299 }
300 }
301 }
302 return result;
303 }
304
305 /// <summary>
306 /// 获取hashkey所有Redis key
307 /// </summary>
308 /// <typeparam name="T"></typeparam>
309 /// <param name="key"></param>
310 /// <returns></returns>
311 public static List<T> GetHashAll<T>(string key)
312 {
313 List<T> result = new List<T>();
314 RedisValue[] arr = db.HashKeys(key);
315 foreach (var item in arr)
316 {
317 if (!item.IsNullOrEmpty)
318 {
319 result.Add(JsonConvert.DeserializeObject<T>(item));
320 }
321 }
322 return result;
323 }
324
325 /// <summary>
326 /// 获取hashkey所有的值
327 /// </summary>
328 /// <typeparam name="T"></typeparam>
329 /// <param name="key"></param>
330 /// <returns></returns>
331 public static List<T> HashGetAll<T>(string key)
332 {
333 List<T> result = new List<T>();
334 HashEntry[] arr = db.HashGetAll(key);
335 foreach (var item in arr)
336 {
337 if (!item.Value.IsNullOrEmpty)
338 {
339 result.Add(JsonConvert.DeserializeObject<T>(item.Value));
340 }
341 }
342 return result;
343 }
344
345 /// <summary>
346 /// 删除hasekey
347 /// </summary>
348 /// <param name="key"></param>
349 /// <param name="hashField"></param>
350 /// <returns></returns>
351 public static bool DeleteHase(RedisKey key, RedisValue hashField)
352 {
353 return db.HashDelete(key, hashField);
354 }
355
356 #endregion
357
358 #region Hash 异步
359 /// <summary>
360 /// 存储数据到hash表
361 /// </summary>
362 /// <typeparam name="T"></typeparam>
363 /// <param name="key"></param>
364 /// <param name="dataKey"></param>
365 /// <param name="t"></param>
366 /// <returns></returns>
367 public static async Task<bool> HashSetAsync<T>(string key, string dataKey, List<T> t)
368 {
369 string json = "";
370 foreach (var item in t)
371 {
372 json = JsonConvert.SerializeObject(item);
373 //listHashEntry.Add(new HashEntry(getModelId(item), json));
374 }
375 return await db.HashSetAsync(key, dataKey, json);
376
377 //return await ({
378 // string json = ConvertJson(t);
379 // return db.HashSetAsync(key, dataKey, json);
380 //});
381 }
382
383 ///// <summary>
384 ///// 保存一个集合
385 ///// </summary>
386 ///// <typeparam name="T"></typeparam>
387 ///// <param name="key">Redis Key</param>
388 ///// <param name="list">数据集合</param>
389 ///// <param name="getModelId"></param>
390 //public static async Task<bool> HashSetAsync<T>(string key, List<T> list, Func<T, string> getModelId)
391 //{
392 // List<HashEntry> listHashEntry = new List<HashEntry>();
393 // string json = "";
394 // foreach (var item in list)
395 // {
396 // json = JsonConvert.SerializeObject(item);
397 // listHashEntry.Add(new HashEntry(getModelId(item), json));
398 // }
399 // return await db.HashSetAsync(key, listHashEntry.ToArray());
400 //}
401
402 /// <summary>
403 /// 获取Hash中的单个key的值
404 /// </summary>
405 /// <typeparam name="T"></typeparam>
406 /// <param name="key">Redis Key</param>
407 /// <param name="hasFildValue">RedisValue</param>
408 /// <returns></returns>
409 public static async Task<T> GetHashKeyAsync<T>(string key, string hasFildValue)
410 {
411 if (!string.IsNullOrWhiteSpace(key) && !string.IsNullOrWhiteSpace(hasFildValue))
412 {
413 RedisValue value = await db.HashGetAsync(key, hasFildValue);
414 if (!value.IsNullOrEmpty)
415 {
416 return JsonConvert.DeserializeObject<T>(value);
417 }
418 }
419 return default(T);
420 }
421
422 /// <summary>
423 /// 获取hash中的多个key的值
424 /// </summary>
425 /// <typeparam name="T"></typeparam>
426 /// <param name="key">Redis Key</param>
427 /// <param name="listhashFields">RedisValue value</param>
428 /// <returns></returns>
429 public static async Task<List<T>> GetHashKeyAsync<T>(string key, List<RedisValue> listhashFields)
430 {
431 List<T> result = new List<T>();
432 if (!string.IsNullOrWhiteSpace(key) && listhashFields.Count > 0)
433 {
434 RedisValue[] value = await db.HashGetAsync(key, listhashFields.ToArray());
435 foreach (var item in value)
436 {
437 if (!item.IsNullOrEmpty)
438 {
439 result.Add(JsonConvert.DeserializeObject<T>(item));
440 }
441 }
442 }
443 return result;
444 }
445
446 /// <summary>
447 /// 获取hashkey所有Redis key
448 /// </summary>
449 /// <typeparam name="T"></typeparam>
450 /// <param name="key"></param>
451 /// <returns></returns>
452 public static async Task<List<T>> GetHashAllAsync<T>(string key)
453 {
454 List<T> result = new List<T>();
455 RedisValue[] arr =await db.HashKeysAsync(key);
456 foreach (var item in arr)
457 {
458 if (!item.IsNullOrEmpty)
459 {
460 result.Add(JsonConvert.DeserializeObject<T>(item));
461 }
462 }
463 return result;
464 }
465
466 /// <summary>
467 /// 获取hashkey所有的值
468 /// </summary>
469 /// <typeparam name="T"></typeparam>
470 /// <param name="key"></param>
471 /// <returns></returns>
472 public static async Task<List<T>> HashGetAllAsync<T>(string key)
473 {
474 List<T> result = new List<T>();
475 HashEntry[] arr =await db.HashGetAllAsync(key);
476 foreach (var item in arr)
477 {
478 if (!item.Value.IsNullOrEmpty)
479 {
480 result.Add(JsonConvert.DeserializeObject<T>(item.Value));
481 }
482 }
483 return result;
484 }
485
486 /// <summary>
487 /// 删除hasekey
488 /// </summary>
489 /// <param name="key"></param>
490 /// <param name="hashField"></param>
491 /// <returns></returns>
492 public static async Task<bool> DeleteHaseAsync(RedisKey key, RedisValue hashField)
493 {
494 return await db.HashDeleteAsync(key, hashField);
495 }
496
497 #endregion
498
499 #region key 同步
500
501 /// <summary>
502 /// 删除单个key
503 /// </summary>
504 /// <param name="key">redis key</param>
505 /// <returns>是否删除成功</returns>
506 public static bool KeyDelete(string key)
507 {
508 return db.KeyDelete(key);
509 }
510
511 /// <summary>
512 /// 删除多个key
513 /// </summary>
514 /// <param name="keys">rediskey</param>
515 /// <returns>成功删除的个数</returns>
516 public static long keyDelete(RedisKey[] keys)
517 {
518 return db.KeyDelete(keys);
519 }
520
521 /// <summary>
522 /// 判断key是否存储
523 /// </summary>
524 /// <param name="key">redis key</param>
525 /// <returns></returns>
526 public static bool KeyExists(string key)
527 {
528 return db.KeyExists(key);
529 }
530
531 /// <summary>
532 /// 重新命名key
533 /// </summary>
534 /// <param name="key">就的redis key</param>
535 /// <param name="newKey">新的redis key</param>
536 /// <returns></returns>
537 public static bool KeyRename(string key, string newKey)
538 {
539 return db.KeyRename(key, newKey);
540 }
541
542 /// <summary>
543 /// 设置Key的时间
544 /// </summary>
545 /// <param name="key">redis key</param>
546 /// <param name="expiry"></param>
547 /// <returns></returns>
548 public static bool KeyExpire(string key, TimeSpan? expiry = default(TimeSpan?))
549 {
550 return db.KeyExpire(key, expiry);
551 }
552 #endregion
553
554 #region key 异步
555
556 /// <summary>
557 /// 删除单个key
558 /// </summary>
559 /// <param name="key">redis key</param>
560 /// <returns>是否删除成功</returns>
561 public static async Task<bool> KeyDeleteAsync(string key)
562 {
563 return await db.KeyDeleteAsync(key);
564 }
565
566 /// <summary>
567 /// 删除多个key
568 /// </summary>
569 /// <param name="keys">rediskey</param>
570 /// <returns>成功删除的个数</returns>
571 public static async Task<long> keyDeleteAsync(RedisKey[] keys)
572 {
573 return await db.KeyDeleteAsync(keys);
574 }
575
576 /// <summary>
577 /// 判断key是否存储
578 /// </summary>
579 /// <param name="key">redis key</param>
580 /// <returns></returns>
581 public static async Task<bool> KeyExistsAsync(string key)
582 {
583 return await db.KeyExistsAsync(key);
584 }
585
586 /// <summary>
587 /// 重新命名key
588 /// </summary>
589 /// <param name="key">就的redis key</param>
590 /// <param name="newKey">新的redis key</param>
591 /// <returns></returns>
592 public static async Task<bool> KeyRenameAsync(string key, string newKey)
593 {
594 return await db.KeyRenameAsync(key, newKey);
595 }
596
597
598 /// <summary>
599 /// 设置Key的时间
600 /// </summary>
601 /// <param name="key">redis key</param>
602 /// <param name="expiry"></param>
603 /// <returns></returns>
604 public static async Task<bool> KeyExpireAsync(string key, TimeSpan? expiry = default(TimeSpan?))
605 {
606 return await db.KeyExpireAsync(key, expiry);
607 }
608 #endregion
609
610
611 #region List 同步
612
613 /// <summary>
614 /// 移除指定ListId的内部List的值
615 /// </summary>
616 /// <param name="key"></param>
617 /// <param name="value"></param>
618 public void ListRemove<T>(string key, T value)
619 {
620 db.ListRemove(key, JsonConvert.SerializeObject(value));
621 }
622
623 /// <summary>
624 /// 获取指定key的List
625 /// </summary>
626 /// <param name="key"></param>
627 /// <returns></returns>
628 public List<T> ListRange<T>(string key)
629 {
630 var values = db.ListRange(key);
631 List<T> result = new List<T>();
632 foreach (var item in values)
633 {
634 var model = JsonConvert.DeserializeObject<T>(item);
635 result.Add(model);
636 }
637 return result;
638 }
639
640 /// <summary>
641 /// 入队
642 /// </summary>
643 /// <param name="key"></param>
644 /// <param name="value"></param>
645 public void ListRightPush<T>(string key, T value)
646 {
647 db.ListRightPush(key, JsonConvert.SerializeObject(value));
648 }
649
650 /// <summary>
651 /// 出队
652 /// </summary>
653 /// <typeparam name="T"></typeparam>
654 /// <param name="key"></param>
655 /// <returns></returns>
656 public T ListRightPop<T>(string key)
657 {
658 var value = db.ListRightPop(key);
659 return JsonConvert.DeserializeObject<T>(value);
660 }
661
662 /// <summary>
663 /// 获取集合中的数量
664 /// </summary>
665 /// <param name="key"></param>
666 /// <returns></returns>
667 public long ListLength(string key)
668 {
669 return db.ListLength(key);
670 }
671
672 #endregion 同步方法
673
674 #region List 异步
675
676 /// <summary>
677 /// 移除指定ListId的内部List的值
678 /// </summary>
679 /// <param name="key"></param>
680 /// <param name="value"></param>
681 public async Task<long> ListRemoveAsync<T>(string key, T value)
682 {
683 return await db.ListRemoveAsync(key, JsonConvert.SerializeObject(value));
684 }
685
686 /// <summary>
687 /// 获取指定key的List
688 /// </summary>
689 /// <param name="key"></param>
690 /// <returns></returns>
691 public async Task<List<T>> ListRangeAsync<T>(string key)
692 {
693 var values =await db.ListRangeAsync(key);
694 List<T> result = new List<T>();
695 foreach (var item in values)
696 {
697 var model = JsonConvert.DeserializeObject<T>(item);
698 result.Add(model);
699 }
700 return result;
701 }
702
703 /// <summary>
704 /// 入队
705 /// </summary>
706 /// <param name="key"></param>
707 /// <param name="value"></param>
708 public async Task<long> ListRightPushAsync<T>(string key, T value)
709 {
710 return await db.ListRightPushAsync(key, JsonConvert.SerializeObject(value));
711 }
712
713 /// <summary>
714 /// 出队
715 /// </summary>
716 /// <typeparam name="T"></typeparam>
717 /// <param name="key"></param>
718 /// <returns></returns>
719 public async Task<T> ListRightPopAsync<T>(string key)
720 {
721 var value = await db.ListRightPopAsync(key);
722 return JsonConvert.DeserializeObject<T>(value);
723 }
724
725
726 /// <summary>
727 /// 获取集合中的数量
728 /// </summary>
729 /// <param name="key"></param>
730 /// <returns></returns>
731 public async Task<long> ListLengthAsync(string key)
732 {
733 return await db.ListLengthAsync(key);
734 }
735
736 #endregion 异步方法
737
738
739 #region SortedSet 同步
740
741 /// <summary>
742 /// 添加
743 /// </summary>
744 /// <param name="key"></param>
745 /// <param name="value"></param>
746 /// <param name="score"></param>
747 public static bool SortedSetAdd<T>(string key, T value, double score)
748 {
749 return db.SortedSetAdd(key, JsonConvert.SerializeObject(value), score);
750 }
751
752 /// <summary>
753 /// 删除
754 /// </summary>
755 /// <param name="key"></param>
756 /// <param name="value"></param>
757 public static bool SortedSetRemove<T>(string key, T value)
758 {
759 return db.SortedSetRemove(key, JsonConvert.SerializeObject(value));
760 }
761
762 /// <summary>
763 /// 获取全部
764 /// </summary>
765 /// <param name="key"></param>
766 /// <returns></returns>
767 public static List<T> SortedSetRangeByRank<T>(string key)
768 {
769 var values = db.SortedSetRangeByRank(key);
770
771 List<T> result = new List<T>();
772 foreach (var item in values)
773 {
774 var model = JsonConvert.DeserializeObject<T>(item);
775 result.Add(model);
776 }
777 return result;
778 }
779
780 /// <summary>
781 /// 获取集合中的数量
782 /// </summary>
783 /// <param name="key"></param>
784 /// <returns></returns>
785 public static long SortedSetLength(string key)
786 {
787 return db.SortedSetLength(key);
788 }
789
790 #endregion 同步方法
791
792 #region SortedSet 异步
793
794 /// <summary>
795 /// 添加
796 /// </summary>
797 /// <param name="key"></param>
798 /// <param name="value"></param>
799 /// <param name="score"></param>
800 public static async Task<bool> SortedSetAddAsync<T>(string key, T value, double score)
801 {
802 return await db.SortedSetAddAsync(key, JsonConvert.SerializeObject(value), score);
803 }
804
805 /// <summary>
806 /// 删除
807 /// </summary>
808 /// <param name="key"></param>
809 /// <param name="value"></param>
810 public static async Task<bool> SortedSetRemoveAsync<T>(string key, T value)
811 {
812 return await db.SortedSetRemoveAsync(key, JsonConvert.SerializeObject(value));
813 }
814
815 /// <summary>
816 /// 获取全部
817 /// </summary>
818 /// <param name="key"></param>
819 /// <returns></returns>
820 public static async Task<List<T>> SortedSetRangeByRankAsync<T>(string key)
821 {
822 var values = await db.SortedSetRangeByRankAsync(key);
823 List<T> result = new List<T>();
824 foreach (var item in values)
825 {
826 var model = JsonConvert.DeserializeObject<T>(item);
827 result.Add(model);
828 }
829 return result;
830 }
831
832 /// <summary>
833 /// 获取集合中的数量
834 /// </summary>
835 /// <param name="key"></param>
836 /// <returns></returns>
837 public static async Task<long> SortedSetLengthAsync(string key)
838 {
839 return await db.SortedSetLengthAsync(key);
840 }
841
842 #endregion 异步方法
843
844
845 /// <summary>
846 /// 追加值
847 /// </summary>
848 /// <param name="key"></param>
849 /// <param name="value"></param>
850 public static void StringAppend(string key, string value)
851 {
852 ////追加值,返回追加后长度
853 long appendlong = db.StringAppend(key, value);
854 }
855
856 }