文章目錄
- ?介紹
- ?List的常見命令有
- ?RedisTemplate API
- ????添加緩存
- ????將List放入緩存
- ????設置過期時間(單獨設置)
- ????獲取List緩存全部內容(起始索引,結束索引)
- ????從左或從右彈出一個元素
- ????根據索引查詢元素
- ????獲取List緩存的長度
- ????根據索引修改List中的某條數據(key,索引,值)
- ????移除N個值為value(key,移除個數,值)
- 使用場景
?介紹
Redis
中的List類型與Java中的 LinkedList 類似,可以看做是一個 雙向鏈表 結構。既可以支持正向檢索和也可以支持反向檢索。
特征也與LinkedList
類似:
- 有序
- 元素可以重復
- 插入和刪除快
- 查詢速度一般
常用來存儲一個有序數據,例如:朋友圈點贊列表,評論列表等。
?List的常見命令有
- LPUSH key element … :向列表左側插入一個或多個元素
- LPOP key:移除并返回列表左側的第一個元素,沒有則返回nil
- RPUSH key element … :向列表右側插入一個或多個元素
- RPOP key:移除并返回列表右側的第一個元素
- LRANGE key star end:返回一段角標范圍內的所有元素
- BLPOP和BRPOP:與LPOP和RPOP類似,只不過在沒有元素時等待指定時間,而不是直接返回nil
?RedisTemplate API
????添加緩存
//1、通過redisTemplate設置值
redisTemplate.boundListOps("listKey").leftPush("listLeftValue1");
redisTemplate.boundListOps("listKey").rightPush("listRightValue2");//2、通過BoundValueOperations設置值
BoundListOperations listKey = redisTemplate.boundListOps("listKey");
listKey.leftPush("listLeftValue3");
listKey.rightPush("listRightValue4");//3、通過ValueOperations設置值
ListOperations opsList = redisTemplate.opsForList();
opsList.leftPush("listKey", "listLeftValue5");
opsList.rightPush("listKey", "listRightValue6");
????將List放入緩存
ArrayList<String> list = new ArrayList<>();
// left
redisTemplate.boundListOps("listKey").leftPushAll(list);
// right
redisTemplate.boundListOps("listKey").rightPushAll(list);
????設置過期時間(單獨設置)
redisTemplate.boundValueOps("listKey").expire(1,TimeUnit.MINUTES);
redisTemplate.expire("listKey",1,TimeUnit.MINUTES);
????獲取List緩存全部內容(起始索引,結束索引)
List listKey1 = redisTemplate.boundListOps("listKey").range(0, 10);
????從左或從右彈出一個元素
//從左側彈出一個元素
String listKey2 = (String) redisTemplate.boundListOps("listKey").leftPop();
//從右側彈出一個元素
String listKey3 = (String) redisTemplate.boundListOps("listKey").rightPop();
????根據索引查詢元素
String listKey4 = (String) redisTemplate.boundListOps("listKey").index(1);
????獲取List緩存的長度
Long size = redisTemplate.boundListOps("listKey").size();
????根據索引修改List中的某條數據(key,索引,值)
redisTemplate.boundListOps("listKey").set(3L,"listLeftValue3");
????移除N個值為value(key,移除個數,值)
redisTemplate.boundListOps("listKey").remove(3L,"value");
使用場景
-
消息隊列(Message Queue): List 可以用作簡單的消息隊列,生產者可以將消息 push 到列表的一端,而消費者可以從列表的另一端 pop 出消息進行處理。
-
任務隊列(Task Queue): List 可以用作任務隊列,生產者可以向列表中 push 任務,而消費者可以從列表中 pop 出任務進行處理。
-
發布與訂閱(Pub/Sub)的實現: 你可以將訂閱者的信息保存在列表中,發布者發布消息時,將消息推送到列表中,訂閱者可以從列表中獲取最新的消息。
-
實時數據更新: List 可以用來存儲一些需要實時更新的數據,比如用戶的行為記錄、實時日志等。