前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis中scan命令实战

Redis中scan命令实战

作者头像
素履coder
发布2022-12-10 15:28:44
1.6K0
发布2022-12-10 15:28:44
举报
文章被收录于专栏:素履coder素履coder

1. 介绍#

scan命令和作用和keys *的作用类似,主要用于查找redis中的键,但是在正式的生产环境中一般不会直接使用keys *这个命令,因为他会返回所有的键,如果键的数量很多会导致查询时间很长,进而导致服务器阻塞,所以需要scan来进行更细致的查找

scan总共有这几种命令:scansscanhscanzscan,分别用于迭代数据库中的:数据库中所有键、集合键、哈希键、有序集合键,命令具体结构如下:

代码语言:javascript
复制
scan cursor [MATCH pattern] [COUNT count] [TYPE type]
sscan key cursor [MATCH pattern] [COUNT count]
hscan key cursor [MATCH pattern] [COUNT count]
zscan key cursor [MATCH pattern] [COUNT count]

更详细的介绍请看官方文档: Title http://doc.redisfans.com/key/scan.html

2. scan#

scan cursor [MATCH pattern] [COUNT count] [TYPE type],cursor表示游标,指查询开始的位置,count默认为10,查询完后会返回下一个开始的游标,当返回0的时候表示所有键查询完了

代码语言:javascript
复制
127.0.0.1:6379[2]> scan 0
1) "3"
2)  1) "mystring"
    2) "myzadd"
    3) "myhset"
    4) "mylist"
    5) "myset2"
    6) "myset1"
    7) "mystring1"
    8) "mystring3"
    9) "mystring4"
   10) "myset"
127.0.0.1:6379[2]> scan 3
1) "0"
2) 1) "myzadd1"
   2) "mystring2"
   3) "mylist2"
   4) "myhset1"
   5) "mylist1"

MATCH可以采用模糊匹配找出自己想要查找的键,这里的逻辑是先查出20个,再匹配,而不是先匹配再查询,这里加上count 20是因为默认查出的10个数中可能不能包含所有的相关项,所以把范围扩大到查20个,我这里测试的键总共有15个

代码语言:javascript
复制
127.0.0.1:6379[2]> scan 0 match mylist* count 20
1) "0"
2) 1) "mylist"
   2) "mylist2"
   3) "mylist1"

TYPE可以根据具体的结构类型来匹配该类型的键

代码语言:javascript
复制
127.0.0.1:6379[2]> scan 0 count 20 type list
1) "0"
2) 1) "mylist"
   2) "mylist2"
   3) "mylist1"

3. sscan#

sscan key cursor [MATCH pattern] [COUNT count],sscan的第一个参数总是集合类型的key

代码语言:javascript
复制
127.0.0.1:6379[2]> sadd myset1 a b c d
(integer) 4
127.0.0.1:6379[2]> smembers myset1
1) "d"
2) "a"
3) "c"
4) "b"
127.0.0.1:6379[2]> sscan myset1 0
1) "0"
2) 1) "d"
   2) "c"
   3) "b"
   4) "a"
127.0.0.1:6379[2]> sscan myset1 0 match a
1) "0"
2) 1) "a"

4. hscan#

hscan key cursor [MATCH pattern] [COUNT count],sscan的第一个参数总是哈希类型的key

代码语言:javascript
复制
127.0.0.1:6379[2]> hset myhset1 kk1 vv1 kk2 vv2 kk3 vv3
(integer) 3
127.0.0.1:6379[2]> hgetall myhset1
1) "kk1"
2) "vv1"
3) "kk2"
4) "vv2"
5) "kk3"
6) "vv3"
127.0.0.1:6379[2]> hscan myhset1 0
1) "0"
2) 1) "kk1"
   2) "vv1"
   3) "kk2"
   4) "vv2"
   5) "kk3"
   6) "vv3"

5. zscan#

zscan key cursor [MATCH pattern] [COUNT count],sscan的第一个参数总是有序集合类型的key

代码语言:javascript
复制
127.0.0.1:6379[2]> zadd myzadd1 1 zz1 2 zz2 3 zz3
(integer) 3
127.0.0.1:6379[2]> zrange myzadd1 0 -1 withscores
1) "zz1"
2) "1"
3) "zz2"
4) "2"
5) "zz3"
6) "3"
127.0.0.1:6379[2]> zscan myzadd1 0
1) "0"
2) 1) "zz1"
   2) "1"
   3) "zz2"
   4) "2"
   5) "zz3"
   6) "3"
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-11-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 介绍#
  • 2. scan#
  • 3. sscan#
  • 4. hscan#
  • 5. zscan#
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档