Redis 批量查询优化
1 介绍redis使用API查询数据,当碰到多个key查询的时候,会下意识的使用循环的查询方式。示例代码:/*** 大量key的查询* @param keys* @return*/@GetMapping("/getKeys")public List<String> getKeys(String... keys){List<String> result = new Array
·
1 介绍
redis使用API查询数据,当碰到多个key查询的时候,会下意识的使用循环的查询方式。
示例代码:
/**
* 大量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;
/**
* 实现命令:GET key,返回 key所关联的字符串值。
*
* @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;
/**
* 批量查询
* 实现命令:MGET key1 key2,返回 多个结果。
*
* @param keys
* @return value
*/
public List<String> mget(List<String> keys) {
return redisTemplate.opsForValue().multiGet(keys);
}
}
3 pipeline管道
正常的redis通过key获取数据,需要先建立连接,然后返回数据。
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 相关信息
- 博文不易,辛苦各位猿友点个关注和赞,感谢
更多推荐
已为社区贡献4条内容
所有评论(0)