PHP操作Redis(Hash数据集)进行分页读取

<?php
$redis = new \Redis;
$redis->connect('127.0.0.1','6379');
/* 设置遍历的特性为不重复查找,该情况下扩展只会scan一次,所以可能会返回空集合 */
$redis->setOption(\Redis::OPT_SCAN, \Redis::SCAN_NORETRY);
$redis->select(3);
//        $data = $redis->hLen('play_times');
$it = NULL;
$pattern = '*';
$count = 50; // 每次遍历50条,注意是遍历50条,遍历出来的50条key还要去匹配你的模式,所以并不等于就能够取出50条key
do{
	$keysArr = $redis->hScan('play_times',$it, $pattern, $count);
	if ($keysArr) {
		foreach ($keysArr as $key => $val) {
			echo $key.'=>'.$val . "\n";
		}
	}
} while ($it > 0); //每次调用 Scan会自动改变 $it 值,当$it = 0时 这次遍历结束 退出循环
echo '------------------------------------------------------------' . "\n";
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现 Spring Boot 和 Redis Hash分页并条件查询,可以使用 RedisHash 数据结构来存储数据。以下是基本的步骤: 1. 根据条件查询需要的数据,将数据存入 RedisHash 中; 2. 使用 Redis 的 HSCAN 命令获取符合条件的数据; 3. 对获取到的数据进行分页处理。 以下是示例代码: ```java @Autowired private RedisTemplate<String, Object> redisTemplate; public List<Map<Object, Object>> queryData(int pageNo, int pageSize, String hashKey, String pattern) { Cursor<Map.Entry<Object, Object>> cursor = redisTemplate.opsForHash().scan(hashKey, ScanOptions.scanOptions().match(pattern).build()); List<Map.Entry<Object, Object>> list = new ArrayList<>(); while (cursor.hasNext()) { list.add(cursor.next()); } int startIndex = (pageNo - 1) * pageSize; if (startIndex >= list.size()) { return new ArrayList<>(); } int endIndex = Math.min(startIndex + pageSize, list.size()); List<Map.Entry<Object, Object>> subList = list.subList(startIndex, endIndex); List<Map<Object, Object>> result = new ArrayList<>(); for (Map.Entry<Object, Object> entry : subList) { Map<Object, Object> map = new HashMap<>(); map.put(entry.getKey(), entry.getValue()); result.add(map); } return result; } ``` 在这个示例中,我们使用 RedisTemplate 来操作 Redis,其中 hashKey 是存储数据的 Hash 键名,pattern 是查询的匹配模式,pageNo 和 pageSize 是分页的页码和每页数据量。 我们使用 scan 方法获取符合条件的数据,并指定分页参数。然后,我们对获取到的数据进行分页处理,使用 subList 方法获取分页数据,并将其转换成 Map 的列表返回。 需要注意的是,HSCAN 命令是基于游标的扫描,而不是基于索引的分页。因此,我们需要在代码中实现分页逻辑。同时,还需要注意 Hash 中每个字段的类型必须是字符串类型,否则无法使用 HSCAN 命令进行扫描。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值