redis分页查询

redis不仅可以存普通文本,还可以存入List,这里就整理了下用redis做分页查询的功能。首先定义一个redis工具类,这里只贴出了需要的方法。

复制代码
public class RedisUtils {

	private JedisPool pool;

	public RedisUtils() {
		if (pool == null) {
			JedisPoolConfig config = new JedisPoolConfig();
			config.setMaxIdle(10);
			config.setTestOnBorrow(true);
			pool = new JedisPool(config, 127.0.0.1, 6379, 100000);
		}
	}
	
	/**
	 * <p>
	 * 通过key向list尾部添加字符串
	 * </p>
	 * 
	 * @param key
	 * @param strs
	 *            可以使一个string 也可以使string数组
	 * @return 返回list的value个数
	 */
	public Long rpush(String key, String... strs) {
		Jedis jedis = null;
		Long res = null;
		try {
			jedis = pool.getResource();
			res = jedis.rpush(key, strs);
		} catch (Exception e) {
			pool.returnBrokenResource(jedis);
			e.printStackTrace();
		} finally {
			returnResource(pool, jedis);
		}
		return res;
	}

/**
	 * 获取key当前页的list
	 * @param key
	 * @param curr
	 * @param pageSize
	 * @return
	 */
	public List<String> page(String key, int curr, int pageSize){

		Jedis jedis = null;
		String res = null;
		List<String> lrange = null;
		try {
			jedis = pool.getResource();
			lrange = jedis.lrange(key, (curr - 1) * pageSize, curr * pageSize);
		} catch (Exception e) {
			pool.returnBrokenResource(jedis);
			e.printStackTrace();
		} finally {
			returnResource(pool, jedis);
		}
		return lrange;
	}

/**
	 * 获取key的总条数
	 * @param key
	 * @return
	 */
	public long count(String key){
		Jedis jedis = null;
		long total = 0L;
		try {
			jedis = pool.getResource();
			total = jedis.llen(key);
		} catch (Exception e) {
			pool.returnBrokenResource(jedis);
			e.printStackTrace();
		} finally {
			returnResource(pool, jedis);
		}
		return total;
	}
}

接下来是应用层的调用

复制代码
	//这里演示存入redis的操作
    public static void main(String[] args) {
		RedisUtils redisUtils = new RedisUtils();
		for(int i=0;i<1000;i++){
			HashMap<String, Object> map = new HashMap<>();
			map.put("key_"+i, "value_"+i);
			//存入redis
			redisUtils.rpush("key", map.toString());
		}
	}

	//这里演示读取redis数据的操作
    public static void main(String[] args) {
		RedisUtils redisUtils = new RedisUtils();
		//获取当前页的数据,1代表当前页 10代表每页条数
		List<String> list = redisUtils.page("key", 1, 10);
		//获取总条数
		long count = redisUtils.count("key");
	}

redis分页查询效率很高,对于不需要持久化的数据可以使用此方案。

相关推荐
AIgorithmGEEK7 小时前
MySQL 索引全解(下):建、查、删实战与知识速查表
数据库·mysql·b+树·索引
行百里er9 小时前
Redis 完结篇——Redis 热点问题在 Spring Boot 项目中实战
redis·后端
唠点键盘之外的10 小时前
26 向量数据库实战:从 0 搭一条能用的检索链路(pgvector + Spring AI)
数据库·人工智能·spring
云和恩墨10 小时前
数据库监控简史:监控不止于告警——从图表大爆发到健康管理闭环
数据库
ly768910 小时前
MongoDB 事务开销实测:快照隔离下的写冲突、重试与分片事务边界
数据库·mongodb·事务·分片集群·快照隔离·写冲突
豆角焖肉10 小时前
Spring AOP 自定义注解实现系统操作日志
数据库·自定义注解·springaop·操作日志·aop 切面
金伟API102411 小时前
不会写复杂SQL怎么办?
数据库·sql
执笔为剑12 小时前
2.1.2-1、V8R3迁移到V8R6-Oracle兼容特性
数据库
geovindu12 小时前
sql:Search-Optimized SQL Queries using mysql 9.0
android·数据库·sql·mysql·数据库开发·数据库架构
for_ever_love__12 小时前
MySQL SELECT 与 WHERE 优化实战:可搜索条件、联合索引与执行计划
数据库·mysql·oracle·select·where·条件优化·查询优化技巧