1 介紹
redis使用API查詢數(shù)據(jù),當碰到多個key查詢的時候,會下意識的使用循環(huán)的查詢方式。
示例代碼:
/**
* 大量key的查詢
* @param keys
* @return
*/
@GetMapping("/getKeys")
public List<String> getKeys(String... keys){
List<String> result = new ArrayList<>();
for (String key : keys) {
result.add(redisOperator.get(key));
}
return result;
}
@Component
public class RedisOperator {
@Autowired
private StringRedisTemplate redisTemplate;
/**
* 實現(xiàn)命令:GET key,返回 key所關(guān)聯(lián)的字符串值。
*
* @param key
* @return value
*/
public String get(String key) {
return (String)redisTemplate.opsForValue().get(key);
}
}
2 mget批量查詢
示例代碼:
/**
* 批量查詢 mget
* @param keys
* @return
*/
@GetMapping("/mget")
public List<String> mget(String... keys){
List<String> keysList = Arrays.asList(keys);
return redisOperator.mget(keysList);
}
@Component
public class RedisOperator {
@Autowired
private StringRedisTemplate redisTemplate;
/**
* 批量查詢
* 實現(xiàn)命令:MGET key1 key2,返回 多個結(jié)果。
*
* @param keys
* @return value
*/
public List<String> mget(List<String> keys) {
return redisTemplate.opsForValue().multiGet(keys);
}
}
3 pipeline管道
正常的redis通過key獲取數(shù)據(jù),需要先建立連接,然后返回數(shù)據(jù)。
pipeline管道就相當于,nginx的keepalive,類似于長連接,將每次的操作都從一個管道里面進行操作,交互,只需要建立一次連接。
示例代碼:
/**
* 批量查詢 pipeline
* @param keys
* @return
*/
@GetMapping("/batchGet")
public List<Object> batchGet(String... keys){
List<String> keysList = Arrays.asList(keys);
return redisOperator.batchGet(keysList);
}
@Component
public class RedisOperator {
@Autowired
private StringRedisTemplate redisTemplate;
/**
* 批量查詢 管道 pipeline
*
* @param keys
* @return value
*/
public List<Object> batchGet(List<String> keys) {
// nginx -> keepalive
// redis -> pipeline
List<Object> result = redisTemplate.executePipelined(new RedisCallback<String>() {
@Override
public String doInRedis(RedisConnection connection) throws DataAccessException {
StringRedisConnection src = (StringRedisConnection) connection;
for (String key : keys) {
src.get(key);
}
return null;
}
});
return result;
}
}
4 相關(guān)信息
- 博文不易,辛苦各位猿友點個關(guān)注和贊,感謝