redis的scan语法及作用对象
发表于:2024-11-26 作者:千家信息网编辑
千家信息网最后更新 2024年11月26日,这篇文章主要讲解了"redis的scan语法及作用对象",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"redis的scan语法及作用对象"吧!redis
千家信息网最后更新 2024年11月26日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安全错误
数据库的锁怎样保障安全
无法连接服务器怎样才能连接
数据库查找表中的数据库
现在有哪些软件开发模型
贵阳软件开发培训机构
博山物流竞价软件开发定制
我的世界1.17.3服务器
数据库服务器本机
滨州手机软件开发系统
js 循环生成表格数据库
网络安全法二十一条是什么
青浦区本地软件开发工艺
江苏电力应急软件开发服务推广
青浦区软件开发生产过程
vs三维软件开发
网络技术服务部经营项目
四平软件开发系统购买电话
网络安全专家谭晓生
未转变者加载界面连接服务器失败
数据库查询按日
通信网络技术常用的组网结构
我的世界国际版服务器藏宝藏
好医生APP软件开发设计
计算机网络技术顶岗实习周报
灰兔软件开发有限公司
新乡磐石网络技术公司
数据库临床研究
如何关闭数据库强密码
暴雪亚洲服务器注册账号
桦南游戏软件开发
对于违反网络安全法的处罚