
Redis
Leon0204
这个作者很懒,什么都没留下…
展开
-
解析redis bitmap数据
import redisimport binascii#连接redispool = redis.ConnectionPool(host='122.112.163.26', port=6379, db=0, password='fb0401')r = redis.Redis(connection_pool=pool)#获取bitmap 存储 的字符 ==> b'` \x00\x0...原创 2020-04-25 17:12:15 · 460 阅读 · 0 评论 -
二进制安全
1. php的二进制安全 binary-safephp的内部函数在操作二进制数据时能保证达到预期的结果,例如 str_replace、stristr、strcmp 等函数,我们就说这些函数是二进制安全的。下面通过 c 语言 和 php 的对比 来看 他们对二进制数据的处理#include "stdio.h"#include "string.h"int main(){cha...原创 2018-03-02 13:59:55 · 1138 阅读 · 0 评论 -
Redis二进制数组Bitmap
好久没有更新了,之前公司在做 关注/粉丝 这块儿缓存的时候,我选择的就是 Bitmap ,那时是我第一次见识到这种数据数组形式,用到的有 SETBIT , GETBIT , BITCOUNT ,命令如何使用就不说了,今天来仔细看看这三个命令的实现和原理。选用 bitmap 的考量:位数组的实现关注关系需求中 关注对象 和 被关注人 都是 0-几千万 的数据对象,存储这种对应关系时,采用...原创 2019-03-20 20:13:50 · 1929 阅读 · 0 评论 -
瞅一瞅缓存穿透、缓存击穿和缓存雪崩
概念缓存穿透:正常来说,一个合理设计的缓存命中率肯定是在50%以上,如果大量 的去避开缓存 ,就会因为 miss cache 造成对DB的负载缓存击穿:某一个高流量的 热点Key,在失效的一瞬间,造成的负载缓存雪崩:很多Key的失效时间相同 ,缓存同一时间大面积的失效,这个时候又来了一波请求,结果请求都怼到数据库上,从而导致数据库连接异常缓存雪崩给一类缓存的失效时间,加...原创 2018-09-21 10:20:48 · 483 阅读 · 0 评论 -
Redis 分布式集群,分配Slots
某天在开启了Redis集群之后,发现网站没法正常访问了,发现Nginx-lua 中的 Redis 丢失连接 …集群下线问题表现通过查看 openrestry log 发现 lua脚本报错 :2018/06/12 17:48:20 [error] 23272#0: *75665 lua entry thread aborted: runtime error: /usr...原创 2018-06-22 15:53:42 · 7849 阅读 · 4 评论 -
Redis过期策略以及内存淘汰机制
如果你的 Redis 只能存10G数据,你写了12G,那么 Redis 会怎么淘汰那2G数据呢?过期键删除策略我们都知道,删除键的目的,就是释放内存占用。那么,当一个键过期了,Redis 什么时候会去删除她呢?定时删除设置键的过期时间时,创建一个 Timer ,当过期时间到临时,立刻删除键。内存友好型策略,一旦键过期,就会被删除,并释放所占用的内存,Cpu 不友好,当一...原创 2018-06-21 18:28:59 · 23441 阅读 · 5 评论 -
Redis源码阅读:Redis字符串SDS
SDS 基本概念简单动态字符串(Simple Dynamic String)SDS,用作Redis 的默认字符串。 C语言中的字符串:以空字符结尾的字符数组SDS实现举例redis > SET msg "hello world"OK我们通过 SET 在 Redis 数据库中创建了一个数据键对象为 "msg" 和 数据值对象为 "hello world" 的键值对,其中...原创 2018-06-21 13:09:48 · 369 阅读 · 0 评论 -
高并发场景下数据重复插入的问题
高并发场景下,数据库经常会发生数据重复插入的问题,这时候单单在插入前,查询数据库,判断是否存在,再进行插入,往往不能保证数据唯一性。查询数据库判断是否存在测试代码: th_insert_test.py 每次插入前,去数据库查询,要插入的 User0-9 是否存在,若不存在则插入,若存在,则返回已经有。#-*- coding:utf8 -*-def db_op_thread_func...原创 2018-05-08 15:56:43 · 23715 阅读 · 2 评论 -
安装 Openrestry 并使用 lua-redis 实现封禁ip高频访问
一 、安装 Openrestry# 1.下载源码包wget https://openresty.org/download/openresty-1.11.2.2.tar.gztar -xzvf openresty-1.11.2.2.tar.gzcd openresty-1.11.2.2# 2.查看 nginx 编译选项:$ nginx -Vnginx version: nginx/...原创 2018-03-08 00:22:02 · 4820 阅读 · 0 评论 -
踩坑之路——Redis迁移遇到的一路坑
坑点redis-Docker 里面没有redis.conf ?redis 从 rdb 无缝切换到 aof 备份方式redis 迁移命令1. Redis-Docker 里面没有 redis.conf需求是,公司要上云,把之前的机房的redis迁移到云redis。阿里的数据库redis版只支持aof方式,而公司之前的redis用的是rdb,所以首先需要把 rdb 转换成 aof ,所以需要改 redi原创 2017-11-03 11:22:40 · 4015 阅读 · 0 评论 -
Redis Set 实现关注,粉丝功能
采用 Redis 的 Set 类型 ,这是一种 string 类型的无序集合,成员具有唯一性,哈希表实现,复杂度为 O(1) ,成员的最大数量是 232−12^{32-1},大约是40亿。关注Key:followUID粉丝Key:fansStaffID往 key = follow417 添加一个 Staff147 成员127.0.0.1:6379> SADD follow417 Staff147原创 2017-10-24 10:31:10 · 5953 阅读 · 0 评论 -
介绍 redis-Bit-Map 的相关命令和常用场景
介绍 redis-Bit-Map 的相关命令和常用场景相关命令(5种)SETBIT key offset value设置 key offset 偏移位置 value 0 或 1 GETBIT key offset获取置 key offset 偏移位置 的 value 返回 0 或 1 BITCOUNT key [start end]获取 key 的 value 为1 的总数 , [sta原创 2017-08-02 10:42:18 · 3364 阅读 · 0 评论