指定时间自动取消订单
1 | 1) 使用Linux内置的crontab定时任务,每隔几秒甚至几分钟轮训遍历一次数据库,找到超出时间间隔的订单,进行取消。这种办法没有失效性以及在没有订单的时间内属于浪费服务器资源。 |
数据类型不一致
1 | 两处使用了一个 zSets,一处是从网页获取数据,放到 zSets 里面;另一处是从数据库获取数据放到 zSets 里面。在后期做清除数据操作的时候,发现了数据清除的不完全,后来仔细的检查了一下。发现数据重复。 |
Redis 被黑
1 | https://learnku.com/laravel/t/28411 |
加锁和解锁问题
1 | if ($redis->set('my:lock', 1, ['NX'])) { |
php redis
1 | try { |
常用命令
1 | ping ping我们的主机能否链接 链接是否存活 |
批量删除redis的key
1 | redis-cli -h host -p 6379 -a pwd -n 15 --scan --pattern 'exchange*' | xargs -0 -n 5000 redis-cli -h host -a pwd -p 6379 -n 15 DEL |
有序集合实现 24 小时排行榜实时更新
1 | 利用 ZADD 按小时划分添加用户的积分信息,然后用 ZUNIONSTORE 并集实现 24 小时的游戏积分总和,实现 “24 小时排行榜”; |
主从配置
1 | cp /usr/local/redis/redis.conf /usr/local/redis/redis.6380.conf |
分布式锁
1 | $redis = new Redis(); |
异步消息队列与延时队列
1 | $redis = new Redis(); |
geo
1 | 添加杭州北京上海的地理位置 |
限流
1 | 在高并发场景下有三把利器保护系统:缓存、降级、和限流。缓存的目的是提升系统的访问你速度和增大系统能处理的容量;降级是当服务出问题或影响到核心流程的性能则需要暂时屏蔽掉。而有些场景则需要限制并发请求量,如秒杀、抢购、发帖、评论、恶意爬虫等。 |
redis 删除大key集合的方法
1 | import redis |
删除redis中过时的key
1 |
|
redis总结
1 | redis中的键的生存时间 |
签到
1 | $dayKey = 'login:'.\date('Ymd',\time()); |
Redis 分布式存储
1 | class RedisCluster { |
获取大 key
1 | redis-cli -h 127.0.0.1 -p 7001 –-bigkeys 也可以追加一个休眠参数,防止在查询过程 ops 暴增,使用此命令:redis-cli -h 127.0.0.1 -p 7001–-bigkeys -i 0.1 |
redis锁
1 | // 如果获取到锁,则执行 $callback 回调 |
Redis 未授权访问配合
1 | 部分 Redis 绑定在 0.0.0.0:6379,并且没有开启认证(这是Redis 的默认配置),如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,将会导致 Redis 服务直接暴露在公网上,导致其他用户可以直接在非授权情况下直接访问Redis服务并进行相关操作。 |
Redis 查看所有 key 的 value 值所占内存大小
1 | https://github.com/sripathikrishnan/redis-rdb-tools#generate-memory-report |
管理平台工具 RedisManager
1 | github项目地址:https://github.com/ngbdf/redis-manager |
Redis监控工具 redis-stat
1 | https://github.com/junegunn/redis-stat |
loading redis is loading the dataset in memory laravel
1 | [root@localhost ~]# redis-cli |
提前10分钟提醒信息
1 | 1.修改redis配置文件 |
Redis 持久化存储
1 | 一种是 aof 日志追加的方式,另外一种是 rdb 数据快照的方式。 |
文章投票
1 | 一个用户对一篇文章只能投一票 |
缓存穿透
1 | 缓存穿透 : DB 承受了没有必要的查询流量,意思就是查到空值的时候没有做缓存处理,再次查询的时候继续读库了 |
Redis 的 LBS 尝试地理位置
1 | $redis->rawCommand('geoadd', 'location', '120.118007', '30.259293', '桃园岭'); |
基于redis的秒杀
1 | //实例化redis |
查看所有 key 的 value 值所占内存大小
1 |
|
Redis 快速上手
1 | Redis 的事务处理的命令 |
redis安全
1 | Redis 默认情况下,会绑定在 0.0.0.0:6379,在没有利用防火墙进行屏蔽的情况下,将会将 Redis 服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下利用 Redis 的相关方法,可以成功将自己的公钥写入目标服务器的 ~/.ssh 文件夹的 authotrized_keys 文件中,进而可以直接登录目标服务器;如果 Redis 服务是以 root 权限启动,可以利用该问题直接获得服务器 root 权限。 |
Redis scard主从延时问题
1 | function setPrize($arrPrizes) { |
redis数据持久化
1 | edis作为内存数据库,一共支持2种数据持久化方案:RDB、AOF。这两种方案把数据存储到磁盘中,既可以同时使用,也可以单独使用,甚至都不使用,具体使用可以配置。 |
基于redis实现分布式锁
1 | $ret = $this->getCon()->setnx($key,1); |
Redis 使用 lua 脚本
1 | 减少网络开销,一个脚本包含多个命令 |
redis未授权&弱密码漏洞复现和防护
1 | vi /etc/redis/redis.conf,注释掉bind 127.0.0.1 ::1即让redis监听所有网段 |
删除大key
1 |
|
redis中的并发问题
1 | require "vendor/autoload.php"; |
Redis 使用 Lua 脚本替代 SETNX / DECR 保证原子性
1 | /** |
Redis 一站式管理平台工具ngbdf/redis-manager