redis的scan语法及作用对象
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,这篇文章主要讲解了"redis的scan语法及作用对象",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"redis的scan语法及作用对象"吧!redis
千家信息网最后更新 2025年01月31日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(){ Cursorcursor = 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安全错误
数据库的锁怎样保障安全
深入网络安全监督检查工作
服务器开机检测硬盘如何关闭
核磁碳谱图分析数据库
湖南省定额数据库
双路服务器
克隆网站数据库软件
oracle数据库激活
软件开发英语单词有哪些
mysql数据库约束怎么导出
sql数据库恢复备份
数据库导入大文件
雷德服务器人多吗
期初金额和期末金额数据库
mt4怎么申请服务器
iso 认证网络安全
数据库和网站的关系
深圳前沿软件开发有限公司
注册1688店铺服务器
黄山网络安全考试scse认证
综述文献检索数据库
优合信网络技术怎么样
技术恢复手机数据库
如何改网络安全密钥
网络安全 国家网站
卫辉软件开发哪个品牌好
济南纽航互联网科技有限公司
天津市网络安全知识竞赛系统
松江区网络技术咨询信息推荐
批量excel导入数据库
湖南放心软件开发服务检测中心