redis的scan语法及作用对象
发表于:2025-11-12 作者:千家信息网编辑
千家信息网最后更新 2025年11月12日,这篇文章主要讲解了"redis的scan语法及作用对象",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"redis的scan语法及作用对象"吧!redis
千家信息网最后更新 2025年11月12日redis的scan语法及作用对象
这篇文章主要讲解了"redis的scan语法及作用对象",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"redis的scan语法及作用对象"吧!
序
在redis的db存在大量key或者db里头的某个set、zset、hash里头的元素非常多的话,用普通的get all操作很可能导致redis因为这个操作阻塞了,导致不能响应其他操作,特别是在高并发、海量数据的背景下,这个问题显得尤其严重。那么能不能像数据库那样有个分页的功能呢,答案就是scan操作。本文主要展示怎么在redis-cli以及SpringDataRedis中的使用。【推荐:redis视频教程】
scan语法
scan之后返回两部分,第一部分是下次scan的参数,第二部分就是scan出来的项
作用对象(db、set、zset、hash)
db(
key)
127.0.0.1:6379> scan 01) "120"2) 1) "articleMap:63" 2) "articleMap:37" 3) "counter:__rand_int__" 4) "articleMap:60" 5) "tagSet:tag5" 6) "articleMap:80" 7) "messageCache~keys" 8) "mymap" 9) "articleMap:46" 10) "articleMap:55"127.0.0.1:6379> scan 1201) "28"2) 1) "articleMap:17" 2) "tagSet:tag1" 3) "articleMap:18" 4) "articleMap:81" 5) "\xac\xed\x00\x05t\x00\btest-cas" 6) "articleMap:51" 7) "articleMap:94" 8) "articleMap:26" 9) "articleMap:71" 10) "user-abcde"
set(
value)
127.0.0.1:6379> sscan myset 01) "3"2) 1) "m" 2) "j" 3) "c" 4) "h" 5) "f" 6) "i" 7) "a" 8) "g" 9) "n" 10) "e" 11) "b"127.0.0.1:6379> sscan myset 31) "0"2) 1) "l" 2) "k" 3) "d"
zset(
value & score)
127.0.0.1:6379> zscan sortset 01) "0"2) 1) "tom" 2) "89" 3) "jim" 4) "90" 5) "david" 6) "100"
hash(
key & value)
127.0.0.1:6379> hscan mymap 01) "0"2) 1) "name" 2) "codecraft" 3) "email" 4) "pt@g.cn" 5) "age" 6) "20" 7) "desc" 8) "hello" 9) "sex" 10) "male"
SCAN的额外参数
count(
指定每次取多少条)
127.0.0.1:6379> scan 0 count 51) "240"2) 1) "articleMap:63" 2) "articleMap:37" 3) "counter:__rand_int__" 4) "articleMap:60" 5) "tagSet:tag5"
match(
匹配key)
127.0.0.1:6379> scan 0 match article*1) "120"2) 1) "articleMap:63" 2) "articleMap:37" 3) "articleMap:60" 4) "articleMap:80" 5) "articleMap:46" 6) "articleMap:55"
RedisTemplate操作
遍历数据库key
@Test public void scanDbKeys(){ template.execute(new RedisCallback>() { @Override public Iterable doInRedis(RedisConnection connection) throws DataAccessException { List binaryKeys = new ArrayList(); Cursor cursor = connection.scan(ScanOptions.scanOptions().count(5).build()); while (cursor.hasNext()) { byte[] key = cursor.next(); binaryKeys.add(key); System.out.println(new String(key, StandardCharsets.UTF_8)); } try { cursor.close(); } catch (IOException e) { // do something meaningful } return binaryKeys; } }); } 遍历set
/** * sadd myset a b c d e f g h i j k l m n */ @Test public void scanSet(){ Cursor cursor = template.opsForSet().scan("myset",ScanOptions.NONE); while (cursor.hasNext()){ System.out.println(cursor.next()); } } 遍历zset
/** * zadd sortset 89 tom 90 jim 100 david */ @Test public void scanZSet(){ Cursor> cursor = template.opsForZSet().scan("sortset",ScanOptions.NONE); while (cursor.hasNext()){ ZSetOperations.TypedTuple item = cursor.next(); System.out.println(item.getValue() + ":" + item.getScore()); } } 遍历hash
/** * hset mymap name "codecraft" * hset mymap email "pt@g.cn" * hset mymap age 20 * hset mymap desc "hello" * hset mymap sex "male" */ @Test public void scanHash(){ Cursor> curosr = template.opsForHash().scan("mymap", ScanOptions.NONE); while(curosr.hasNext()){ Map.Entry 感谢各位的阅读,以上就是"redis的scan语法及作用对象"的内容了,经过本文的学习后,相信大家对redis的scan语法及作用对象这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
作用
对象
语法
就是
数据
学习
内容
参数
数据库
问题
普通
元素
功能
思路
情况
教程
文章
是在
更多
海量
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
财务网络安全通讯
sca服务器
编程与数据库的关系
达卡天气预报软件开发
中国联通采用的网络技术有
上海小蓝本网络技术有限公司
党政部门网络安全知识
旗瀚科技 软件开发
漫说网络安全电子邮件篇
日照软件开发建设
中兴软件开发重庆待遇
笔记本坦克世界连不上服务器
长沙市网络安全产业联盟
服务器虚拟主机租用合同协议书
数据库外连接笛卡尔积
cmd登录ftp服务器
专业服务好的屏幕共享软件开发
底层网络技术
数据库建立索引是在哪个阶段设计
中公优网络安全吗
微信安全服务器
dnf无法连接到服务器
无代码软件开发平台那个好用
服务器磁盘阵列卡
软件开发外包能否算自行研发
武汉数据库优势
数据库vf和sql的关系
饥荒服务器启动失败
怎么限制我的世界服务器边界
黏土服务器