县级监管平台

RedisHelper.cs 25KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790
  1. using System;
  2. using StackExchange.Redis;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using Newtonsoft.Json;
  6. namespace CallCenterApi.Common
  7. {
  8. public class RedisHelper
  9. {
  10. #region
  11. //执行顺序---静态字段---静态构造函数---构造函数
  12. private static ConnectionMultiplexer redis;
  13. static RedisHelper()
  14. {
  15. if (redis == null || !redis.IsConnected)
  16. {
  17. redis = ConnectionMultiplexer.Connect(Configs.GetValue("Redis_Server") + ":" + Configs.GetValue("Redis_Port"));
  18. //redis = ConnectionMultiplexer.Connect("192.168.4.18, abortConnect=false");
  19. }
  20. }
  21. #endregion
  22. #region redis 字符串(string)操作
  23. /// <summary>
  24. /// 设置指定键的值
  25. /// </summary>
  26. /// <param name="key"></param>
  27. /// <param name="value"></param>
  28. /// <returns></returns>
  29. public static bool StringSet(string key, string value)
  30. {
  31. return redis.GetDatabase().StringSet(key, value);
  32. }
  33. /// <summary>
  34. /// 获取指定键的值
  35. /// </summary>
  36. /// <param name="key"></param>
  37. /// <returns></returns>
  38. public static object StringGet(string key)
  39. {
  40. var rt = redis.GetDatabase().StringGet(key);
  41. if (rt.IsNull)
  42. {
  43. return null;
  44. }
  45. else
  46. {
  47. return rt;
  48. }
  49. }
  50. /// <summary>
  51. /// 获取存储在键上的字符串的子字符串
  52. /// </summary>
  53. /// <param name="key"></param>
  54. /// <param name="start"></param>
  55. /// <param name="end"></param>
  56. /// <returns></returns>
  57. public static object StringGet(string key, int start, int end)
  58. {
  59. var rt = redis.GetDatabase().StringGetRange(key, start, end);
  60. if (rt.IsNull)
  61. {
  62. return null;
  63. }
  64. else
  65. {
  66. return rt;
  67. }
  68. }
  69. /// <summary>
  70. /// 设置键的字符串值并返回其旧值
  71. /// </summary>
  72. /// <param name="key"></param>
  73. /// <param name="value"></param>
  74. /// <returns></returns>
  75. public static object StringGetAndSet(string key, string value)
  76. {
  77. var rt = redis.GetDatabase().StringGetSet(key, value);
  78. if (rt.IsNull)
  79. {
  80. return null;
  81. }
  82. else
  83. {
  84. return rt;
  85. }
  86. }
  87. /// <summary>
  88. /// 返回在键处存储的字符串值中偏移处的位值
  89. /// </summary>
  90. /// <param name="key"></param>
  91. /// <param name="offset"></param>
  92. /// <returns></returns>
  93. public static bool StringGetBit(string key, long offset)
  94. {
  95. return redis.GetDatabase().StringGetBit(key, offset);
  96. }
  97. /// <summary>
  98. /// 获取所有给定键的值
  99. /// </summary>
  100. /// <param name="keys"></param>
  101. /// <returns></returns>
  102. public static List<object> StringMultiGet(string[] keys)
  103. {
  104. List<object> list = new List<object>();
  105. for (int i = 0; i < keys.Length; i++)
  106. {
  107. list.Add(redis.GetDatabase().StringGet(keys[i]));
  108. }
  109. return list;
  110. }
  111. /// <summary>
  112. /// 存储在键上的字符串值中设置或清除偏移处的位
  113. /// </summary>
  114. /// <param name="key"></param>
  115. /// <param name="offset"></param>
  116. /// <param name="value"></param>
  117. /// <returns></returns>
  118. public static bool StringSetBit(string key, long offset)
  119. {
  120. return redis.GetDatabase().StringSetBit(key, offset, true);
  121. }
  122. /// <summary>
  123. /// 使用键和到期时间来设置值
  124. /// </summary>
  125. /// <param name="key"></param>
  126. /// <param name="value"></param>
  127. /// <param name="expiry"></param>
  128. /// <returns></returns>
  129. public static bool StringSet(string key, string value, TimeSpan expiry)
  130. {
  131. return redis.GetDatabase().StringSet(key, value, expiry);
  132. }
  133. /// <summary>
  134. /// 设置键的值,仅当键不存在时
  135. /// </summary>
  136. /// <param name="key"></param>
  137. /// <param name="value"></param>
  138. /// <returns></returns>
  139. public static void StringSetIfAbsent(string key, string value)
  140. {
  141. if (redis.GetDatabase().StringGet(key) == RedisValue.Null)
  142. {
  143. redis.GetDatabase().StringSet(key, value);
  144. }
  145. }
  146. /// <summary>
  147. /// 在指定偏移处开始的键处覆盖字符串的一部分
  148. /// </summary>
  149. /// <param name="key">键值</param>
  150. /// <param name="value">值</param>
  151. /// <param name="offset">偏移量</param>
  152. /// <returns></returns>
  153. public static object StringSet(string key, long offset, string value)
  154. {
  155. return redis.GetDatabase().StringSetRange(key, offset, value);
  156. }
  157. /// <summary>
  158. /// 获取存储在键中的值的长度
  159. /// </summary>
  160. /// <param name="key">键值</param>
  161. /// <returns></returns>
  162. public static long StringSize(string key)
  163. {
  164. return redis.GetDatabase().StringLength(key);
  165. }
  166. /// <summary>
  167. /// 为多个键分别设置它们的值
  168. /// </summary>
  169. /// <param name="keys"></param>
  170. /// <returns></returns>
  171. public static void StringMultiSet(Dictionary<string, string> dic)
  172. {
  173. foreach (KeyValuePair<string, string> key in dic)
  174. {
  175. redis.GetDatabase().StringSet(key.Key, key.Value);
  176. }
  177. }
  178. /// <summary>
  179. /// 为多个键分别设置它们的值,仅当键不存在时
  180. /// </summary>
  181. /// <param name="keys">键值集合</param>
  182. /// <returns></returns>
  183. public static void StringMultiSetIfAbsent(Dictionary<string, string> dic)
  184. {
  185. foreach (KeyValuePair<string, string> key in dic)
  186. {
  187. //判断键值是否存在
  188. if (redis.GetDatabase().StringGet(key.Key) == RedisValue.Null)
  189. {
  190. redis.GetDatabase().StringSet(key.Key, key.Value);
  191. }
  192. }
  193. }
  194. /// <summary>
  195. /// 将键的整数值按给定的数值增加
  196. /// </summary>
  197. /// <param name="key">键值</param>
  198. /// <param name="value">给定的数值</param>
  199. /// <returns></returns>
  200. public static double StringIncrement(string key, double value)
  201. {
  202. return redis.GetDatabase().StringIncrement(key, value);
  203. }
  204. /// <summary>
  205. /// 在key键对应值的右面追加值value
  206. /// </summary>
  207. /// <param name="key"></param>
  208. /// <param name="value"></param>
  209. /// <returns></returns>
  210. public static long StringAppend(string key, string value)
  211. {
  212. return redis.GetDatabase().StringAppend(key, value);
  213. }
  214. /// <summary>
  215. /// 删除某个键值
  216. /// </summary>
  217. /// <param name="key"></param>
  218. /// <returns></returns>
  219. public static bool StringDelete(string key)
  220. {
  221. return false;
  222. }
  223. #endregion
  224. #region redis 哈希/散列/字典(Hash)操作
  225. /// <summary>
  226. /// 删除指定的哈希字段
  227. /// </summary>
  228. /// <param name="key"></param>
  229. /// <param name="field"></param>
  230. /// <returns></returns>
  231. public static bool HashDelete(string key, string field)
  232. {
  233. return redis.GetDatabase().HashDelete(key, field);
  234. }
  235. /// <summary>
  236. /// 判断是否存在散列字段
  237. /// </summary>
  238. /// <param name=""></param>
  239. /// <param name=""></param>
  240. /// <returns></returns>
  241. public static bool HashHasKey(string key, string field)
  242. {
  243. return redis.GetDatabase().HashExists(key, field);
  244. }
  245. /// <summary>
  246. /// 获取存储在指定键的哈希字段的值
  247. /// </summary>
  248. /// <param name="key"></param>
  249. /// <param name="field"></param>
  250. /// <returns></returns>
  251. public static object HashGet(string key, string field)
  252. {
  253. return redis.GetDatabase().HashGet(key, field);
  254. }
  255. /// <summary>
  256. /// 获取存储在指定键的哈希中的所有字段和值
  257. /// </summary>
  258. /// <param name="key"></param>
  259. /// <returns></returns>
  260. public static Dictionary<string, object> HashGetAll(string key)
  261. {
  262. Dictionary<string, object> dic = new Dictionary<string, object>();
  263. var collection = redis.GetDatabase().HashGetAll(key);
  264. foreach (var item in collection)
  265. {
  266. dic.Add(item.Name, item.Value);
  267. }
  268. return dic;
  269. }
  270. /// <summary>
  271. /// 将哈希字段的浮点值按给定数值增加
  272. /// </summary>
  273. /// <param name="key"></param>
  274. /// <param name="field"></param>
  275. /// <param name="value">给定的数值</param>
  276. /// <returns></returns>
  277. public static double HashIncrement(string key, string field, double value)
  278. {
  279. return redis.GetDatabase().HashIncrement(key, field, value);
  280. }
  281. /// <summary>
  282. /// 获取哈希中的所有字段
  283. /// </summary>
  284. /// <param name="key"></param>
  285. /// <returns></returns>
  286. public static string[] HashKeys(string key)
  287. {
  288. return redis.GetDatabase().HashKeys(key).ToStringArray();
  289. }
  290. /// <summary>
  291. /// 获取散列中的字段数量
  292. /// </summary>
  293. /// <param name="key"></param>
  294. /// <returns></returns>
  295. public static long HashSize(string key)
  296. {
  297. return redis.GetDatabase().HashLength(key);
  298. }
  299. /// <summary>
  300. /// 获取所有给定哈希字段的值
  301. /// </summary>
  302. /// <param name="key"></param>
  303. /// <param name="hashKeys"></param>
  304. /// <returns></returns>
  305. public static List<object> HashMultiGet(string key, List<string> hashKeys)
  306. {
  307. List<object> result = new List<object>();
  308. foreach (string field in hashKeys)
  309. {
  310. result.Add(redis.GetDatabase().HashGet(key, field));
  311. }
  312. return result;
  313. }
  314. /// <summary>
  315. /// 为多个哈希字段分别设置它们的值
  316. /// </summary>
  317. /// <param name="key"></param>
  318. /// <param name="dic"></param>
  319. /// <returns></returns>
  320. public static void HashPutAll(string key, Dictionary<string, string> dic)
  321. {
  322. List<HashEntry> list = new List<HashEntry>();
  323. for (int i = 0; i < dic.Count; i++)
  324. {
  325. KeyValuePair<string, string> param = dic.ElementAt(i);
  326. list.Add(new HashEntry(param.Key, param.Value));
  327. }
  328. redis.GetDatabase().HashSet(key, list.ToArray());
  329. }
  330. /// <summary>
  331. /// 设置散列字段的字符串值
  332. /// </summary>
  333. /// <param name="key"></param>
  334. /// <param name="field"></param>
  335. /// <param name="value"></param>
  336. /// <returns></returns>
  337. public static void HashPut(string key, string field, string value)
  338. {
  339. redis.GetDatabase().HashSet(key, new HashEntry[] { new HashEntry(field, value) });
  340. }
  341. /// <summary>
  342. /// 仅当字段不存在时,才设置散列字段的值
  343. /// </summary>
  344. /// <param name="key"></param>
  345. /// <param name="fiels"></param>
  346. /// <param name="value"></param>
  347. /// <returns></returns>
  348. public static void HashPutIfAbsent(string key, string field, string value)
  349. {
  350. if (!HashHasKey(key, field))
  351. {
  352. redis.GetDatabase().HashSet(key, new HashEntry[] { new HashEntry(field, value) });
  353. }
  354. }
  355. /// <summary>
  356. /// 获取哈希中的所有值
  357. /// </summary>
  358. /// <param name="key"></param>
  359. /// <returns></returns>
  360. public static string[] HashValues(string key)
  361. {
  362. return redis.GetDatabase().HashValues(key).ToStringArray();
  363. }
  364. /// <summary>
  365. /// redis中获取指定键的值并返回对象
  366. /// </summary>
  367. /// <typeparam name="T"></typeparam>
  368. /// <param name="key"></param>
  369. /// <returns></returns>
  370. public static T GetHashValue<T>(string key)
  371. {
  372. HashEntry[] array = redis.GetDatabase().HashGetAll(key);
  373. Dictionary<string, object> dic = new Dictionary<string, object>();
  374. for (int i = 0; i < array.Length; i++)
  375. {
  376. dic.Add(array[i].Name, array[i].Value);
  377. }
  378. if (dic.Count > 0)
  379. {
  380. string strJson = JsonConvert.SerializeObject(dic);
  381. return JsonConvert.DeserializeObject<T>(strJson);
  382. }
  383. else
  384. {
  385. return default(T);
  386. }
  387. }
  388. /// <summary>
  389. /// 把指定对象存储在键值为key的redis中
  390. /// </summary>
  391. /// <typeparam name="T"></typeparam>
  392. /// <param name="t"></param>
  393. /// <param name="key"></param>
  394. public static void SetHashValue<T>(T t, string key)
  395. {
  396. string strJson = JsonConvert.SerializeObject(t);
  397. Dictionary<string, string> param = JsonConvert.DeserializeObject<Dictionary<string, string>>(strJson);
  398. HashPutAll(key, param);
  399. }
  400. #endregion
  401. #region redis 列表(List)操作
  402. /// <summary>
  403. /// 从左向右存压栈
  404. /// </summary>
  405. /// <param name="key"></param>
  406. /// <param name="value"></param>
  407. /// <returns></returns>
  408. public static long ListLeftPush(string key, string value)
  409. {
  410. return redis.GetDatabase().ListLeftPush(key, value);
  411. }
  412. /// <summary>
  413. /// 从左出栈
  414. /// </summary>
  415. /// <param name="key"></param>
  416. /// <returns></returns>
  417. public static object ListLeftPop(string key)
  418. {
  419. return redis.GetDatabase().ListLeftPop(key);
  420. }
  421. /// <summary>
  422. /// 队/栈长
  423. /// </summary>
  424. /// <param name="key"></param>
  425. /// <returns></returns>
  426. public static long ListSize(string key)
  427. {
  428. return redis.GetDatabase().ListLength(key);
  429. }
  430. /// <summary>
  431. /// 范围检索,返回List
  432. /// </summary>
  433. /// <param name="key"></param>
  434. /// <param name="start"></param>
  435. /// <param name="end"></param>
  436. /// <returns></returns>
  437. public static string[] ListRange(string key, int start, int end)
  438. {
  439. return redis.GetDatabase().ListRange(key, start, end).ToStringArray();
  440. }
  441. /// <summary>
  442. /// 移除key中值为value的i个,返回删除的个数;如果没有这个元素则返回0
  443. /// </summary>
  444. /// <param name="key"></param>
  445. /// <param name="i"></param>
  446. /// <param name="value"></param>
  447. /// <returns></returns>
  448. public static long ListRemove(string key, string value)
  449. {
  450. return redis.GetDatabase().ListRemove(key, value);
  451. }
  452. /// <summary>
  453. /// 检索
  454. /// </summary>
  455. /// <param name="key"></param>
  456. /// <param name="index"></param>
  457. /// <returns></returns>
  458. public static object ListIndex(string key, long index)
  459. {
  460. return redis.GetDatabase().ListGetByIndex(key, index);
  461. }
  462. /// <summary>
  463. /// 赋值
  464. /// </summary>
  465. /// <param name="key"></param>
  466. /// <param name="index"></param>
  467. /// <param name="value"></param>
  468. /// <returns></returns>
  469. public static void ListSet(string key, int index, string value)
  470. {
  471. redis.GetDatabase().ListSetByIndex(key, index, value);
  472. }
  473. /// <summary>
  474. /// 裁剪,删除除了[start,end]以外的所有元素
  475. /// </summary>
  476. /// <param name="key"></param>
  477. /// <param name="start"></param>
  478. /// <param name="end"></param>
  479. /// <returns></returns>
  480. public static void ListTrim(string key, int start, int end)
  481. {
  482. redis.GetDatabase().ListTrim(key, start, end);
  483. }
  484. /// <summary>
  485. /// 将源key的队列的右边的一个值删除,然后塞入目标key的队列的左边,返回这个值
  486. /// </summary>
  487. /// <param name="sourceKey"></param>
  488. /// <param name="destinationKey"></param>
  489. /// <returns></returns>
  490. public static object ListRightPopAndLeftPush(string sourceKey, string destinationKey)
  491. {
  492. return redis.GetDatabase().ListRightPopLeftPush(sourceKey, destinationKey);
  493. }
  494. #endregion
  495. #region redis 集合(Set)操作
  496. /// <summary>
  497. /// 集合添加元素
  498. /// </summary>
  499. /// <param name="key"></param>
  500. /// <param name="value"></param>
  501. public static void SetAdd(string key, string value)
  502. {
  503. redis.GetDatabase().SetAdd(key, value);
  504. }
  505. /// <summary>
  506. /// 集合组合操作
  507. /// </summary>
  508. /// <param name="point">操作标示:0--并集;1--交集;2--差集</param>
  509. /// <param name="firstKey">第一个集合的键值</param>
  510. /// <param name="secondKey">第二个集合的键值</param>
  511. public static string[] SetCombine(int point, string firstKey, string secondKey)
  512. {
  513. RedisValue[] array;
  514. switch (point)
  515. {
  516. case 0:
  517. array = redis.GetDatabase().SetCombine(SetOperation.Union, firstKey, secondKey);
  518. break;
  519. case 1:
  520. array = redis.GetDatabase().SetCombine(SetOperation.Intersect, firstKey, secondKey);
  521. break;
  522. case 2:
  523. array = redis.GetDatabase().SetCombine(SetOperation.Difference, firstKey, secondKey);
  524. break;
  525. default:
  526. array = new RedisValue[0];
  527. break;
  528. }
  529. return array.ToStringArray();
  530. }
  531. /// <summary>
  532. ///
  533. /// </summary>
  534. /// <param name="key"></param>
  535. /// <param name="value"></param>
  536. /// <returns></returns>
  537. public static bool SetContains(string key, string value)
  538. {
  539. return redis.GetDatabase().SetContains(key, value);
  540. }
  541. /// <summary>
  542. /// 返回对应键值集合的长度
  543. /// </summary>
  544. /// <param name="key"></param>
  545. /// <returns></returns>
  546. public static long SetLength(string key)
  547. {
  548. return redis.GetDatabase().SetLength(key);
  549. }
  550. /// <summary>
  551. /// 根据键值返回集合中所有的value
  552. /// </summary>
  553. /// <param name="key"></param>
  554. /// <returns></returns>
  555. public static string[] SetMembers(string key)
  556. {
  557. return redis.GetDatabase().SetMembers(key).ToStringArray();
  558. }
  559. /// <summary>
  560. /// 将成员从源集移动到目标集
  561. /// </summary>
  562. /// <param name="sourceKey">源集key</param>
  563. /// <param name="destinationKey">目标集key</param>
  564. /// <param name="value"></param>
  565. public static bool SetMove(string sourceKey, string destinationKey, string value)
  566. {
  567. return redis.GetDatabase().SetMove(sourceKey, destinationKey, value);
  568. }
  569. /// <summary>
  570. /// 移除集合中指定键值随机元素
  571. /// </summary>
  572. /// <param name="key"></param>
  573. public static string SetPop(string key)
  574. {
  575. return redis.GetDatabase().SetPop(key);
  576. }
  577. /// <summary>
  578. /// 返回集合中指定键值随机元素
  579. /// </summary>
  580. /// <param name="key"></param>
  581. /// <returns></returns>
  582. public static string SetRandomMember(string key)
  583. {
  584. return redis.GetDatabase().SetRandomMember(key);
  585. }
  586. /// <summary>
  587. ///
  588. /// </summary>
  589. /// <param name="key"></param>
  590. /// <param name="count"></param>
  591. public static string[] SetRandomMembers(string key, long count)
  592. {
  593. return redis.GetDatabase().SetRandomMembers(key, count).ToStringArray();
  594. }
  595. /// <summary>
  596. /// 移除集合中指定key值和value
  597. /// </summary>
  598. /// <param name="key"></param>
  599. /// <param name="value"></param>
  600. public static void SetRemove(string key, string value)
  601. {
  602. redis.GetDatabase().SetRemove(key, value);
  603. }
  604. /// <summary>
  605. ///
  606. /// </summary>
  607. /// <param name="key"></param>
  608. public static void SetScan(string key)
  609. {
  610. redis.GetDatabase().SetScan(key);
  611. }
  612. #endregion
  613. #region redis 有序集合(sorted set)操作
  614. public static void Method(string key, string value, double score)
  615. {
  616. redis.GetDatabase().SortedSetAdd(key, new SortedSetEntry[] { new SortedSetEntry(value, score) });
  617. }
  618. #endregion
  619. #region redis 键(Key)操作
  620. /// <summary>
  621. /// 获取 Key
  622. /// </summary>
  623. /// <param name="redisKey"></param>
  624. /// <returns></returns>
  625. //public static IEnumerable<RedisKey> GetKeyList(string redisKey)
  626. //{
  627. // var server = redis.GetServer(Configs.GetValue("Redis_Server"), Configs.GetValue("Redis_Port"));
  628. // return server.Keys(pattern: "*"+ redisKey + "*");
  629. //}
  630. public static List<string> GetKeyList(string redisKey)
  631. {
  632. var server = redis.GetServer(Configs.GetValue("Redis_Server"), Int32.Parse(Configs.GetValue("Redis_Port")));
  633. List<string> keylist = new List<string>();
  634. var redisenum = server.Keys(pattern: "*" + redisKey + "*");
  635. foreach (var r in redisenum.ToList())
  636. {
  637. keylist.Add(r.ToString());
  638. }
  639. return keylist;
  640. }
  641. /// <summary>
  642. /// 移除指定 Key
  643. /// </summary>
  644. /// <param name="redisKey"></param>
  645. /// <returns></returns>
  646. public static bool KeyDelete(string redisKey)
  647. {
  648. return redis.GetDatabase().KeyDelete(redisKey);
  649. }
  650. /// <summary>
  651. /// 移除指定 Key
  652. /// </summary>
  653. /// <param name="redisKey"></param>
  654. /// <returns></returns>
  655. //public static long KeysDelete(IEnumerable<RedisKey> redisKeys)
  656. //{
  657. // return redis.GetDatabase().KeyDelete(redisKeys.ToArray());
  658. //}
  659. public static long KeysDelete(List<string> redisKeys)
  660. {
  661. int n = 0;
  662. foreach (var r in redisKeys)
  663. {
  664. if (redis.GetDatabase().KeyDelete(r))
  665. {
  666. n++;
  667. }
  668. }
  669. return n;
  670. }
  671. /// <summary>
  672. /// 校验 Key 是否存在
  673. /// </summary>
  674. /// <param name="redisKey"></param>
  675. /// <returns></returns>
  676. public static bool KeyExists(string redisKey)
  677. {
  678. return redis.GetDatabase().KeyExists(redisKey);
  679. }
  680. /// <summary>
  681. /// 重命名 Key
  682. /// </summary>
  683. /// <param name="redisKey"></param>
  684. /// <param name="redisNewKey"></param>
  685. /// <returns></returns>
  686. public static bool KeyRename(string redisKey, string redisNewKey)
  687. {
  688. return redis.GetDatabase().KeyRename(redisKey, redisNewKey);
  689. }
  690. /// <summary>
  691. /// 设置 Key 的时间
  692. /// </summary>
  693. /// <param name="redisKey"></param>
  694. /// <param name="expiry"></param>
  695. /// <returns></returns>
  696. public static bool KeyExpire(string redisKey, TimeSpan? expiry)
  697. {
  698. return redis.GetDatabase().KeyExpire(redisKey, expiry);
  699. }
  700. #endregion
  701. /// <summary>
  702. /// 获取key过期时间
  703. /// </summary>
  704. /// <param name="redisKey"></param>
  705. /// <returns></returns>
  706. public static string GetKeyOutTime(string redisKey)
  707. {
  708. var server = redis.GetServer(Configs.GetValue("Redis_Server"), Int32.Parse(Configs.GetValue("Redis_Port")));
  709. var timeNow = server.Time().ToUniversalTime();
  710. var time = redis.GetDatabase().KeyTimeToLive(redisKey);
  711. var expire = time == null ? (DateTime?)null : timeNow.Add(time.Value); //返回UTC时间。
  712. return expire.Value.AddHours(8).ToString("yyyy-MM-dd HH:mm:ss");
  713. }
  714. }
  715. }