This commit is contained in:
boybook
2025-12-01 20:59:16 +08:00
parent 12738a142c
commit 760c2dd9ad
5535 changed files with 21070 additions and 2021 deletions

View File

@@ -0,0 +1,52 @@
# Redis缓存的使用
### 概述
Redis是一个业务逻辑为单线程的基于内存的键值数据存储可以理解为一个数据类型更简单但效率更高的service他可以实现的功能使用service也可以实现但是不需要额外编写service代码与占用额外的进程资源。
### 分布式锁
当某个业务可能在多个进程上执行又需要保证原子性时可以使用redis来添加锁。在业务前设置key获取锁业务完成后删除key释放锁。
可参考neteaseChunkRes插件
![redis1](./images/redis1.png)
### 保存全局数据
对于一些需要多个服同时频繁修改与访问的全局数据可以存放在redis上。如果一次修改或访问需要多条redis操作则还需要配合分布式锁使用。
例如
- 玩家的在线状态
可参考neteaseFriend插件玩家登录与登出时设置key打开好友界面查询好友在线状态时获取key
- 全局弹幕
可参考neteaseDanmu插件。
玩家发的弹幕缓存在server内存然后每一段时间插入到netease:danmu:list。
server每一段时间从netease:danmu:list取一部分弹幕到netease:danmu:latest分布式锁保证每7秒执行一次
server每一段时间从netease:danmu:latest取弹幕并推送到客户端。
### 作为sql的缓存
相比于直接使用server内存作为sql缓存在中间加入一层redis的好处有避免server崩溃丢失大量数据更多地减少sql请求的频率以及降低server内存峰值。
例如neteaseQuest插件
- 玩家任务进度有更新,先更新到内存
- 每隔4秒将内存数据整合写入redis
- 每隔444秒将redis数据整合写入sql