Redis中的Scan命令的使用】的更多相关文章

1 原本以为自己对redis命令还蛮熟悉的,各种数据模型各种基于redis的骚操作.但是最近在使用redis的scan的命令式却踩了一个坑,顿时发觉自己原来对redis的游标理解的很有限.所以记录下这个踩坑的过程,背景如下: 公司因为redis服务器内存吃紧,需要删除一些无用的没有设置过期时间的key.大概有500多w的key.虽然key的数目听起来挺吓人.但是自己玩redis也有年头了,这种事还不是手到擒来? 当时想了下,具体方案是通过lua脚本来过滤出500w的key.然后进行删除动作.lu…
Redis中有一个经典的问题,在巨大的数据量的情况下,做类似于查找符合某种规则的Key的信息,这里就有两种方式,一是keys命令,简单粗暴,由于Redis单线程这一特性,keys命令是以阻塞的方式执行的,keys是以遍历的方式实现的复杂度是 O(n),Redis库中的key越多,查找实现代价越大,产生的阻塞时间越长.二是scan命令,以非阻塞的方式实现key值的查找,绝大多数情况下是可以替代keys命令的,可选性更强   以下写入100000条key***:value***格式的测试数据(ps:…
前言 由于redis的keys命令是线上禁用,所以就有了SCAN.SSCAN.HSCAN和ZSCAN四个命令. 但是这四个命令也不是每次返回全部匹配结果,因此需要一遍遍执行下去,而且每次返回的cursor要作为下一个的参数. 因此查找也不太方便,我写了一个简单的方法,用来查找scan的所有结果.关于这几个命令可以参考[详细解释] 代码分享 package main import ( "errors" "flag" "fmt" "stri…
在redis.c的initServerConfig()方法中,通过调用dictCreate方法初始化server端的命令表.这个命令表是一个hashtable,可以通过key找到相关的命令: /* Command table -- we initiialize it here as it is part of the* initial configuration, since command names may be changed via* redis.conf using the renam…
127.0.0.1:8376> info all# Server    --- 服务器信息redis_version:2.8.20 -- redis服务器版本redis_git_sha1:00000000 -- Git SHA1redis_git_dirty:0 -- Git Dirty Flagredis_build_id:b873423ea3d4fc14 -- redis build idredis_mode:standalone -- redis的运行模式:standalone还是clus…
bitmap,位图,即是使用bit. redis字符串是一个字节序列. 1 Byte = 8 bit SETBIT key offset value 设置或者清空key的value(字符串)在offset处的bit值. 那个位置的bit要么被设置,要么被清空,这个由value(只能是0或者1)来决定.当key不存在的时候,就创建一个新的字符串value.要确保这个字符串大到在offset处有bit值. offset 表示bit的位置数,从0开始计,1字节的bit数组最大为7 . SETBIT K…
a.hset 存储一个哈希键值对的集合 b.hget获取一个哈希键的值c.hdel 删除一个或多个字段 d.hgetall 获取一个哈希是键值对的集合 e.lpush key value向链表左侧添加f.rpush key value向链表右侧添加g.lpop key 从左边移出一个元素 h.rpop key 从右边移出一个元素 i.keys * 返回所有的key 可以加*通配 j.exists key判断string类型一个key是否存在 如果存在返回1 否则返回0…
Redis 如何应对并发访问 Redis 中处理并发的方案 原子性 Redis 的编程模型 Unix 中的 I/O 模型 thread-based architecture(基于线程的架构) event-driven architecture(事件驱动模型) Reactor 模式 Proactor 模式 为什么 Redis 选择单线程 事件驱动框架对事件的捕获分发 客户端连接应答 命令的接收 命令的回复 Redis 多IO线程 多 IO 线程的初始化 命令的接收 命令的回复 原子性的单命令 总结…
Redis 如何应对并发访问 使用 Lua 脚本 Redis 中如何使用 Lua 脚本 EVAL EVALSHA SCRIPT 命令 SCRIPT LOAD SCRIPT EXISTS SCRIPT FLUSH SCRIPT KILL SCRIPT DEBUG 为什么 Redis 中的 Lua 脚本的执行是原子性的 Redis 中 Lua 脚本的使用 总结 参考 Redis 如何应对并发访问 上个文章中,我们分析了Redis 中命令的执行是单线程的,虽然 Redis6.0 版本之后,引入了 I/…
Redis 内置的数据类型有 5种:字符串String.哈希Hash.列表List.集合Set.有序集合ZSet 字符串类型 String 是 Redis 中最基本的类型,一个 key 对应着一个 value,String 类型是二进制安全的,即其值可以存储任何的类型,如图片或者序列化后的对象,其一个键最大可以存储 512MB 的数据. 字符串类型的操作 赋值操作 Set key value [EX seconds] [PX milseconds] [NX|XX] 设置指定键的值,若不存在指定的…