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 }