KANG's BLOG

Let's have some fun

Bitmap的使用

1 操作命令 Bitmap在Redis中并不是一个单独的数据类型,而是由字符串类型(Redis内部称Simple Dynamic String,SDS)之上定义的与比特相关的操作实现的,此时SDS就被当做位数组了。 SETBIT key offset value getbit key offset 在redis中,借助Bitmap可实现布隆过滤器。

Redis Cluster集群方式

1 部署方式 至少为3主3从,以保证可靠性,比如下面这种部署架构: 2 如何负载均衡 cluster采用hash槽方式进行key和redis实例的匹配,共2^14个槽,即16384个槽。 集群中,每个redis主节点都负责一部分槽,从节点仅冷备作用。 当redis设置值时,槽公式如下: slot = CRC16(key) & 16383 每个节点和槽的映射关系手动配置,如:

Redis支持的数据类型

String(字符串) set key value get key 底层是SDS(Simple Dynamic String),以字符数组储存,也记录了长度,所以属于二进制安全。 Hash(哈希) hset key field value hget key field

Redis的主从复制过程

主从复制过程 slave 服务启动,slave 会建立和 master 的连接,发送 sync 命令。 master 启动一个后台进程将数据库快照保存到 RDB 文件中 注意:此时如果生成 RDB 文件过程中存在写数据操作会导致 RDB 文件和当前主 redis 数据不一致,所以此时 master 主进程会开始收集写命令并缓存起来。 master 就发送 RDB 文件给 slave slave 将文件保存到磁盘上,然后加载到内存恢复 master 把缓存的命令转发给 slave 后续 master 收到的写命令都会通过开始建立的连接发送给 slave。 当 master 和 slave 的连接断开时 slave 可以自动重新建立连接。如果 master 同时收到多个 slave 发来的同步连接命令,只会启动一个进程来写数据库镜像,然后发送给所有 slave。

Redis过期处理和内存清除

常用命令 1. 设置过期时间 expire pexpire expireat pexpireat p开头代表以毫秒为单位 at结尾代表在某一刻过期 非at结尾代表多长时间后过期

lua脚本实现令牌桶

通过lua脚本实现原子操作 令牌桶实现 local ratelimit_info=redis.pcall("HMGET",KEYS[1],"last_mill_second","curr_permits","max_burst","rate","app") local last_mill_second=ratelimit_info[1] local curr_permits=tonumber(ratelimit_info[2]) local max_burst=tonumber(ratelimit_info[3]) local rate=tonumber(ratelimit_info[4]) local app=tostring(ratelimit_info[5]) if app == nil then return 0 end local local_curr_permits=max_burst; if(type(last_mill_second) ~='boolean' and last_mill_second ~=nil) then local reverse_permits=math.