Java Redis Template批量查詢指定鍵值對的實現(xiàn)
一.Redis使用pipeline批量查詢所有鍵值對
一次性獲取所有鍵值對的方式:
private RedisTemplate redisTemplate;
@SuppressWarnings({ "rawtypes", "unchecked" })
?? ?public List executePipelined(Collection<String> keySet) {
?? ??? ?return redisTemplate.executePipelined(new SessionCallback<Object>() {
?? ??? ??? ?@Override
?? ??? ??? ?public <K, V> Object execute(RedisOperations<K, V> operations) throws DataAccessException {
?? ??? ??? ??? ?HashOperations hashOperations = operations.opsForHash();
?? ??? ??? ??? ?for (String key : keySet) {
?? ??? ??? ??? ??? ?hashOperations.entries(key);
?? ??? ??? ??? ?}
?? ??? ??? ??? ?return null;
?? ??? ??? ?}
?? ??? ?});
?? ?}說明: 上面的方法,可以將多個Redis 哈希表一次性取出,只有一次IO的時間。但也有個缺點,當(dāng)哈希表中有個鍵值對中的內(nèi)容特別長的時候,效率明顯下降。如果我們根本不需要這個鍵值對,但每次都要將它取出,會大大浪費性能,解決方案就是第二種方式。
二.批量獲取指定的鍵值對列表
/**
?? ? * 獲取批量keys對應(yīng)的列表中,指定的hash鍵值對列表
?? ? * @param keys redis 鍵
?? ? * @param hashKeys 哈希表鍵的集合(你需要獲取的那些鍵)
?? ? * @return
?? ? */
?? ?@SuppressWarnings("unchecked")
?? ?public List<Map<String, String>> getSelectiveHashsList(List<String> keys, List<String> hashKeys) {
?? ??? ?List<Map<String, String>> hashList = new ArrayList<Map<String, String>>();
?? ??? ?List<List<String>> pipelinedList = redisTemplate.executePipelined(new RedisCallback<Object>() {
?? ??? ??? ?@Override
?? ??? ??? ?public Object doInRedis(RedisConnection connection) throws DataAccessException {
?? ??? ??? ??? ?StringRedisConnection stringRedisConnection = (StringRedisConnection) connection;
?? ??? ??? ??? ?for (String key : keys) {
?? ??? ??? ??? ??? ?stringRedisConnection.hMGet(key, hashKeys.toArray(new String[hashKeys.size()]));
?? ??? ??? ??? ?}
?? ??? ??? ??? ?return null;
?? ??? ??? ?}
?? ??? ?});
?? ??? ?for (List<String> hashValueList : pipelinedList) {
?? ??? ??? ?Map<String, String> map = new LinkedHashMap<String, String>();
?? ??? ??? ?for (int i = 0; i < hashValueList.size(); i++) {
?? ??? ??? ??? ?map.put(hashKeys.get(i), hashValueList.get(i));
?? ??? ??? ?}
?? ??? ??? ?hashList.add(map);
?? ??? ?}
?? ??? ?return hashList;
?? ?}使用示例:
可以批量取出你想要的人物屬性:

調(diào)用上述方法示例:
"tom","jack"是你想要操作的表;"name","age"是你想要獲取的屬性,想要幾個屬性,寫幾個,提升請求速度。
getSelectiveHashsList(Arrays.asList("tom","jack"),Arrays.asList("name","age"));
到此這篇關(guān)于Java Redis Template批量查詢指定鍵值對的實現(xiàn)的文章就介紹到這了,更多相關(guān)Java Redis Template批量查詢指定鍵值對內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java使用RedisTemplate如何根據(jù)前綴獲取key列表
這篇文章主要介紹了Java使用RedisTemplate如何根據(jù)前綴獲取key列表,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06
Maven入門之使用Nexus搭建Maven私服及上傳下載jar包
這篇文章主要介紹了Maven入門之使用Nexus搭建Maven私服及上傳下載jar包,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12

