2.6
This commit is contained in:
52
docs/mcguide/27-手机网络游戏/课程8:性能优化/第5节:Redis缓存的使用.md
Normal file
52
docs/mcguide/27-手机网络游戏/课程8:性能优化/第5节:Redis缓存的使用.md
Normal file
@@ -0,0 +1,52 @@
|
||||
# Redis缓存的使用
|
||||
|
||||
### 概述
|
||||
|
||||
Redis是一个业务逻辑为单线程的,基于内存的键值数据存储,可以理解为一个数据类型更简单,但效率更高的service,他可以实现的功能使用service也可以实现,但是不需要额外编写service代码与占用额外的进程资源。
|
||||
|
||||
|
||||
|
||||
### 分布式锁
|
||||
|
||||
当某个业务可能在多个进程上执行,又需要保证原子性时,可以使用redis来添加锁。在业务前设置key获取锁,业务完成后删除key释放锁。
|
||||
|
||||
可参考neteaseChunkRes插件
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
### 保存全局数据
|
||||
|
||||
对于一些需要多个服同时频繁修改与访问的全局数据,可以存放在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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user