
Redis
文章平均质量分 61
Redis
raoxiaoya
这个作者很懒,什么都没留下…
展开
-
缓存一致性,删除缓存,写入缓存,缓存击穿,缓存穿透,缓存雪崩
缓存一致性,删除缓存,写入缓存,缓存击穿,缓存穿透,缓存雪崩原创 2022-06-24 09:52:15 · 487 阅读 · 0 评论 -
集群模式下,redis锁的问题,红锁
在使用redis来实现分布式锁的时候,如果redis是集群的,比如1主4从,这种主从模式就会存在延迟问题,导致加锁出现问题。此时就应该使用红锁的方案,即在代码中不依赖于主从,将这5台机器视为平等的,在代码中依次对这5台机器去加锁,只有成功的机器数大于一半就算加锁成功,其他机器也就没必要再去操作了,相反,如果大于一半的机器失败了,就算失败,其他机器也就没必要再去操作了。由于是遍历操作这5台机器,也就不用关心有没有机器挂掉了,因为挂掉了自然算加锁失败。红锁方案要求机器数为奇数。而且从原理上来看,每一个请求都原创 2021-10-10 12:06:53 · 1903 阅读 · 0 评论 -
redis集群模式下使用LUA脚本注意事项 ERR ‘EVAL‘ command keys must in same slot
今天在使用LUA脚本操作redis,传入了多个key,发现返回值一直是false,这让我很怀疑,于是开始研究这个事情。打开redis客户端并连接上服务器,复现问题redis.rds.aliyuncs.com:6379> eval "return {KEYS[1], KEYS[2]}" 2 '11' '22'(error) ERR 'EVAL' command keys must in same slot查找资料说是集群的问题。连接本机redis服务127.0.0.1:6379> e原创 2020-07-02 15:38:02 · 8578 阅读 · 0 评论 -
php调用redis的scan,hscan,zscan 命令
使用redis扩展的scan函数,发现这个函数写的很有问题,返回值并没有游标,而且游标初始值要设置为null而不是0,感觉用起来还是挺别捏的,直接放弃了,直接使用万能的rawCommand函数来执行原生的redis命令。可参考:https://blog.youkuaiyun.com/raoxiaoya/article/details/100515541具体实现:public function fun2(...原创 2020-03-04 22:49:57 · 3815 阅读 · 0 评论 -
日活跃用户的统计与持久化-Redis
统计日活用户首先需要在项目中对每一个请求做统计,排重,最终得到今天多少用户访问了这个项目。对于这种与用户请求响应无关的数据使用队列来处理。1、设置一个路由中间件,将每一个请求以及参数投递到消息队列。2、消费队列信息来统计。3、一般在后台查看日活量数据。这种场景不能使用MySQL,因为操作太过于频繁,而且redis有更好的实现方式。方法1:使用set将每个请求的userid作为集合的元素...原创 2019-12-02 18:26:29 · 1162 阅读 · 0 评论 -
predis批量删除key
当有大量数据需要清除的时候,可以使用del批量删除 del k1 k2 …但是当要删除的key是需要通过匹配来获得的时候,或许最先想到的办法就是先通过keys拿到这些key,然后拼接到 del 后面,这样是能解决问题,但是首先keys会造成短暂的阻塞,其次keys的返回,其次 del 后面的n个key的长指令也需要传输时间,实际上我们并不关心都是哪些key被删除了,于是我们可以lua脚本来实现。...原创 2019-11-28 10:11:23 · 875 阅读 · 0 评论 -
redis缓存淘汰策略LRU和LFU对比与分析
一、Redis占用内存大小我们知道Redis是基于内存的key-value数据库,因为系统的内存大小有限,所以我们在使用Redis的时候可以配置Redis能使用的最大的内存大小。1、通过配置文件配置通过在Redis安装目录下面的redis.conf配置文件中添加以下配置设置内存大小//设置Redis最大占用内存大小为100Mmaxmemory 100mb2、通过命令修改Redis支...原创 2019-11-19 14:09:55 · 7725 阅读 · 0 评论 -
下单后半小时未付款订单自动取消的实现,延迟队列
下单后半小时未付款订单自动取消的实现,延迟队列类似的需要:订单的评论如果7天未评价,系统需要自动产生一条评论订单的15天之后未点击收货,系统需要自动更改为已收货。。。。因为是需要一个常驻进程来检查的,我们使用redis存储会更好。延迟队列就是需要延迟一段时间后执行。Redis可通过zset来实现。我们可以将有序集合的value 设置为我们的消息任务(orderId),把value的s...原创 2019-11-14 14:23:00 · 3522 阅读 · 0 评论 -
redis令牌桶限流
redis令牌桶限流1、频率设置首先得知道限流的上限,以QPS表示,比如10000/QPS,然后如果每10ms注入一次,那么频率就是100/10ms,也就是每10ms注入100个令牌。所以需要一个进程来定时做这个事情。2、实现<?phpclass Token{ private $_config; // redis设定 private $_redis; // redi...原创 2019-11-13 18:04:15 · 1379 阅读 · 0 评论 -
phpredis使用zadd批量添加到集合
命令行ZADD key score member [[score member] [score member] ...]redis> ZADD page_rank 9 baidu.com 8 bing.com(integer) 2redis> ZRANGE page_rank 0 -1 WITHSCORES1) "bing.com"2) "8"3) "baidu.co...原创 2019-11-08 17:13:48 · 6291 阅读 · 0 评论 -
redis-乐观锁与事务
一、乐观锁先表明态度,乐观锁并不是一个好的实现方式!在mysql中,我们一般通过给数据表额外建一个version字段,读的时候读出verson,更新的时候 v2 = versin+1,语句为update xxx set xxx=xxx, version = version + 1 where id = xxx and version < v2;只要有人在我前面更新了,我就会更新失败...原创 2019-09-23 17:34:32 · 840 阅读 · 0 评论 -
redis-setbit和getbit来实现布隆过滤器php实现
redis >= 4.0 版本可以加载布隆过滤器插件来实现布隆过滤器,但是,对于低版本的redis服务器就没法加载该插件了,还好redis提供了setbit和getbit的位操作。版本要求 >= 2.2.0根据布隆过滤器的原理来存储和判断是否存在。请先阅读原理:https://blog.youkuaiyun.com/raoxiaoya/article/details/101026919代码仓...原创 2019-09-19 18:00:23 · 1092 阅读 · 0 评论 -
win7下的redis服务器多实例加后台运行
win7下的redis服务器多实例加后台运行redis-server不需要安装,下载解压就可以 https://github.com/MSOpenTech/redis/releases主要文件: redis.windows.conf redis.windows-service.conf redis-cli.exe redis-server.exe 两个配置是一样的,但是red...原创 2019-06-17 20:58:42 · 212 阅读 · 0 评论 -
关于redis查询分页
关于redis查询分页由于redis的键都是字符串,所以理论上是不支持排序及分页的。但是实际业务中又需要实现分页查询,于是只能借助sortedset来实现。比如商品表由hash类型存储good:10001good:10002…good:20000后面的数字为good_idzadd good_set 1 10001zadd good_set 2 10002…zadd good...原创 2019-06-25 18:13:26 · 395 阅读 · 0 评论 -
redis中keys和scan的对比
redis中keys和scan的对比两者都是用来返回key的,但是使用场景和方法不同。一、keysKEYS pattern比如: keys * keys user_info:*特点:1、在选定的库中,一次性全部返回符合条件的key,如果数据量很大将会等待很久,因此,只适合用在可控的量小的键查询,比如几百,几千。2、返回的键精确,不会重复,可放心使用。二、scanSC...原创 2019-06-25 18:17:00 · 8639 阅读 · 0 评论 -
Linux下安装redis-server
Linux下安装redis-server编译安装redis-3.0.6http://www.redis.net.cn/download/cd /usr/local/wget http://download.redis.io/releases/redis-3.0.6.tar.gztar xzf redis-3.0.6.tar.gzrm -rf redis-3.0.6.tar.gz...原创 2019-06-18 18:31:37 · 657 阅读 · 0 评论 -
redis长连接与单例
<?phpnamespace app\admin\redis;use think\cache\driver\Redis;class RedisClubPool{ public static $redis = null; public static $prefix = ''; public static $user_config = 'redis_clu...原创 2019-07-14 14:12:21 · 1321 阅读 · 0 评论 -
redis锁,集群redis锁
redis实现分布式锁分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。首先安装redis并启动服务:https://blog.youkuaiyun.com/raoxiaoya/article/details/92797864首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件:1、互斥性。在任意时刻,只有一个客户...原创 2019-08-09 10:26:44 · 371 阅读 · 0 评论 -
PHP扩展 -- 安装php-redis扩展
redis扩展依赖 igbinary 扩展,所以实际上要安装两个扩展pecl install redispecl install igbinaryextension=php_igbinary.dllextension=php_redis.dllphp -m |grep redisphp -m |grep igbinary...原创 2019-09-03 08:21:06 · 650 阅读 · 0 评论 -
redis通过发布与订阅实现消息队列
相比于kafka,rabbitMQ,redis的消息队列是一款轻量级的实现,消息不会存储与补发,只能用在不重要的信息上。六个函数1、发布端publish 将信息发送到指定的频道pubsub 查看订阅与发布系统状态 pubsub channels [pattern] 列出当前的活跃频道 pubsub numsub test 返回给定频道的订阅者数量, 订阅模式的客户端不计算在内...原创 2019-09-03 11:57:19 · 1144 阅读 · 0 评论 -
php-redis执行原生的redis指令
我们知道php-redis是php的一个扩展,方便了我们调用redis,但是它也有不足的地方,比如set方法public function set( $key, $value, $timeout = 0 ) {}对应redis的set指令SET key value [EX seconds] [PX milliseconds] [NX|XX]Redis >= 2.6.12 时增加了...原创 2019-09-03 14:07:36 · 3196 阅读 · 0 评论 -
redis缓存击穿
1、雪崩出现的场景我们知道redis的数据是存储在内存的,而内存是有限的,所以一般会设置过期时间,当某个key或者一批key同时过期了,而此时大量的并发来请求这个key,导致都去请求Mysql啦,而mysql的并发连接数很低,缺少了redis这层盾牌,mysql自然扛不住,这不是架构的问题,因为之前的架构中有redis的,系统是扛得住的,雪崩是一种特殊情况。2、雪崩的预防首先,防止大量key...原创 2019-09-19 09:05:28 · 604 阅读 · 0 评论 -
redis缓存的穿透
一、缓存击穿的出现缓存击穿的意思就是缓存永远无法拦截这个请求,而让它去了数据库。当一个查询的key不存在redis,去数据库查也没有,这样也就没法做缓存,这样当要查这个key时,就永远会去到数据库了,如果此时并发很高,那么数据库就很危险了,这叫缓存击穿。缓存击穿一般是恶意的并发请求。二、缓存击穿的预防1、去到数据库之前先设置zookeeper分布式锁,类似于雪崩的处理。参考:https:/...原创 2019-09-19 09:57:20 · 590 阅读 · 0 评论 -
redis-安装布隆过滤器插件及PHP调用
redis >= 4.0手册:https://oss.redislabs.com/redisbloom/一、Linux下安装redis的BloomFilter插件cd /usr/localwget https://github.com/RedisBloom/RedisBloom/archive/v1.1.1.tar.gztar -zxf v1.1.1.tar.gzcd Redis...原创 2019-09-19 12:44:05 · 2818 阅读 · 0 评论 -
redis-布隆过滤器原理
参考:http://imhuchao.com/1271.htmlhttps://www.cnblogs.com/zhanggguoqi/p/10571225.html作用判断某个值是否在某个集合中。特点1、存储空间小:因为它的原理是由一个长度为m的位数组(二进制向量),一个字节有8个位,如果我们使用四个hash函数来运算,那么每个key就会占用四个位,一个字节可表示两个key。相比于...原创 2019-09-19 16:32:01 · 1400 阅读 · 0 评论