/// <summary> /// Redis list的實現為一個雙向鏈表,即可以支持反向查找和遍歷,更方便操作,不過帶來了部分額外的內存開銷, /// Redis內部的很多實現,包括發送緩沖隊列等也都是用的這個數據結構。 /// </summary> public class RedisListService : RedisBase { #region 賦值 /// <summary> /// 從左側向list中添加值 /// </summary> public void LPush(string key, string value) { RedisBase.iClient.PushItemToList(key, value); } /// <summary> /// 從左側向list中添加值,並設置過期時間 /// </summary> public void LPush(string key, string value, DateTime dt) { RedisBase.iClient.PushItemToList(key, value); RedisBase.iClient.ExpireEntryAt(key, dt); } /// <summary> /// 從左側向list中添加值,設置過期時間 /// </summary> public void LPush(string key, string value, TimeSpan sp) { RedisBase.iClient.PushItemToList(key, value); RedisBase.iClient.ExpireEntryIn(key, sp); } /// <summary> /// 從左側向list中添加值 /// </summary> public void RPush(string key, string value) { RedisBase.iClient.PrependItemToList(key, value); } /// <summary> /// 從右側向list中添加值,並設置過期時間 /// </summary> public void RPush(string key, string value, DateTime dt) { RedisBase.iClient.PrependItemToList(key, value); RedisBase.iClient.ExpireEntryAt(key, dt); } /// <summary> /// 從右側向list中添加值,並設置過期時間 /// </summary> public void RPush(string key, string value, TimeSpan sp) { RedisBase.iClient.PrependItemToList(key, value); RedisBase.iClient.ExpireEntryIn(key, sp); } /// <summary> /// 添加key/value /// </summary> public void Add(string key, string value) { RedisBase.iClient.AddItemToList(key, value); } /// <summary> /// 添加key/value ,並設置過期時間 /// </summary> public void Add(string key, string value, DateTime dt) { RedisBase.iClient.AddItemToList(key, value); RedisBase.iClient.ExpireEntryAt(key, dt); } /// <summary> /// 添加key/value。並添加過期時間 /// </summary> public void Add(string key, string value, TimeSpan sp) { RedisBase.iClient.AddItemToList(key, value); RedisBase.iClient.ExpireEntryIn(key, sp); } /// <summary> /// 為key添加多個值 /// </summary> public void Add(string key, List<string> values) { RedisBase.iClient.AddRangeToList(key, values); } /// <summary> /// 為key添加多個值,並設置過期時間 /// </summary> public void Add(string key, List<string> values, DateTime dt) { RedisBase.iClient.AddRangeToList(key, values); RedisBase.iClient.ExpireEntryAt(key, dt); } /// <summary> /// 為key添加多個值,並設置過期時間 /// </summary> public void Add(string key, List<string> values, TimeSpan sp) { RedisBase.iClient.AddRangeToList(key, values); RedisBase.iClient.ExpireEntryIn(key, sp); } #endregion #region 獲取值 /// <summary> /// 獲取list中key包含的數據數量 /// </summary> public long Count(string key) { return RedisBase.iClient.GetListCount(key); } /// <summary> /// 獲取key包含的所有數據集合 /// </summary> public List<string> Get(string key) { return RedisBase.iClient.GetAllItemsFromList(key); } /// <summary> /// 獲取key中下標為star到end的值集合 /// </summary> public List<string> Get(string key, int star, int end) { return RedisBase.iClient.GetRangeFromList(key, star, end); } #endregion #region 阻塞命令 /// <summary> /// 阻塞命令:從list中keys的尾部移除一個值,並返回移除的值,阻塞時間為sp /// </summary> public string BlockingPopItemFromList(string key, TimeSpan? sp) { return RedisBase.iClient.BlockingDequeueItemFromList(key, sp); } /// <summary> /// 阻塞命令:從list中keys的尾部移除一個值,並返回移除的值,阻塞時間為sp /// </summary> public ItemRef BlockingPopItemFromLists(string[] keys, TimeSpan? sp) { return RedisBase.iClient.BlockingPopItemFromLists(keys, sp); } /// <summary> /// 阻塞命令:從list中keys的尾部移除一個值,並返回移除的值,阻塞時間為sp /// </summary> public string BlockingDequeueItemFromList(string key, TimeSpan? sp) { return RedisBase.iClient.BlockingDequeueItemFromList(key, sp); } /// <summary> /// 阻塞命令:從list中keys的尾部移除一個值,並返回移除的值,阻塞時間為sp /// </summary> public ItemRef BlockingDequeueItemFromLists(string[] keys, TimeSpan? sp) { return RedisBase.iClient.BlockingDequeueItemFromLists(keys, sp); } /// <summary> /// 阻塞命令:從list中key的頭部移除一個值,並返回移除的值,阻塞時間為sp /// </summary> public string BlockingRemoveStartFromList(string keys, TimeSpan? sp) { return RedisBase.iClient.BlockingRemoveStartFromList(keys, sp); } /// <summary> /// 阻塞命令:從list中key的頭部移除一個值,並返回移除的值,阻塞時間為sp /// </summary> public ItemRef BlockingRemoveStartFromLists(string[] keys, TimeSpan? sp) { return RedisBase.iClient.BlockingRemoveStartFromLists(keys, sp); } /// <summary> /// 阻塞命令:從list中一個fromkey的尾部移除一個值,添加到另外一個tokey的頭部,並返回移除的值,阻塞時間為sp /// </summary> public string BlockingPopAndPushItemBetweenLists(string fromkey, string tokey, TimeSpan? sp) { return RedisBase.iClient.BlockingPopAndPushItemBetweenLists(fromkey, tokey, sp); } #endregion #region 刪除 /// <summary> /// 從尾部移除數據,返回移除的數據 /// </summary> public string PopItemFromList(string key) { return RedisBase.iClient.PopItemFromList(key); } /// <summary> /// 移除list中,key/value,與參數相同的值,並返回移除的數量 /// </summary> public long RemoveItemFromList(string key, string value) { return RedisBase.iClient.RemoveItemFromList(key, value); } /// <summary> /// 從list的尾部移除一個數據,返回移除的數據 /// </summary> public string RemoveEndFromList(string key) { return RedisBase.iClient.RemoveEndFromList(key); } /// <summary> /// 從list的頭部移除一個數據,返回移除的值 /// </summary> public string RemoveStartFromList(string key) { return RedisBase.iClient.RemoveStartFromList(key); } #endregion #region 其它 /// <summary> /// 從一個list的尾部移除一個數據,添加到另外一個list的頭部,並返回移動的值 /// </summary> public string PopAndPushItemBetweenLists(string fromKey, string toKey) { return RedisBase.iClient.PopAndPushItemBetweenLists(fromKey, toKey); } #endregion }
