• redis在游戏服务器中的使用初探(四) redis应用


    文章系列先介绍环境搭建 介绍redis操作和代码编写运行  这是典型的实战工程过程。
    那么我们为何要使用redis而不是常规的数据库比如 mysql呢?


    因为KV内存数据库最大的优势所有数据全部存储在内存中,速度快,而且key-value的特点也决定了他良好的扩展性.

    以下几点作为游戏服务器中的应用示例,更多的使用方法可以在实践中继续探索优化

    1 数据库缓存

    比如前一章节的用户数据,在mysql进行读写和redis上进行读写在大量并发访问的场景下,差别是很大的。
    Redis提供了较为丰富数据类型,使我们可以更为容易地将数据对象缓存起来(序列化、protobuffer)。
    当需要请求某一数据时,先从Redis中查找,如果没有再查数据库,同时交给Redis缓存起来。
    当对数据进行修改时,则先将修改后的数据保存到Redis,然后保存至数据库


    在保存到数据库这一环节根据不用的数据处理需求 可以有不用的思路
    A不实时保存到数据库,而是交由另外的线程(甚至是专门的程序)去保存,以提高逻辑层的响应速度。
    B部分数据交给Redis保存(Reids自身有持久化功能),像玩家已经完成过的任务ID集合,利用Redis的Set类型保存更为合适。
    C玩家瞬时变化的数据不见得每次修改都需要保存(比如金钱、经验),但如果游戏服务器自己维护在内存中,出现宕机就会导致回档。
    Redis是独立于游戏服务器的,交由它来保存,可以防止宕机回档的问题,也可以减少游戏服务器自己维护数据所占用的内存。

    2 玩家排行榜

    游戏服务器中涉及到很多排行信息,比如玩家等级排名、金钱排名、战斗力排名等。
    一般情况下仅需要取排名的前N名就可以了,这时可以利用数据库的排序功能,或者自己维护一个元素数量有限的top集合。
    但是有时候我们需要每一个玩家的排名,玩家的数量太多,不能利用数据库(全表排序压力太大),自己维护也会比较麻烦。
    使用Redis可以很好的解决这个问题。它提供的有序Set,支持每个键值(比如玩家id)拥有一个分数(score),每次往这个set里添加元素,
    Redis会对其进行排序,修改某一元素的score后,也会更新排序,在获取数据时,可以指定排序范围。
    更重要的是,这个排序结果会被保存起来,不用在服务器启动时重新计算。
    通过它,排行榜的实时刷新、全服排行都不再成为麻烦事。
    redis中可以使用sorted set,将排序的值设置成sorted set中的score,每次执行一条zadd即可

    3 取最新N个数据的操作

    比如你可以把上面说到的 sorted set 的 score 值设置成过期时间的时间戳,那么就可以简单地通过过期时间排序,定时清除过期数据了,
    不仅是清除 Redis 中的过期数据,你完全可以把 Redis 里这个过期时间当成是对数据库中数据的索引,
    用 Redis 来找出哪些数据需要过期删除,然后再精准地从数据库中删除相应的记录。 

     

    参考

    https://www.cnblogs.com/captainl1993/p/4788236.html

    https://www.cnblogs.com/agent-k/p/Redis.html

    《redis实战》  www.ChinaDBA.net 中国DBA超级论坛电子书

    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    查看 FormData 中已存在的值
    dedecms 后台可以上传mp4,但无法选择
    dedecms 文章根据 权重排序
    js 单行注释
    dedecms给图片加水印覆盖整张图片
    Nginx服务器 配置 https
    dedecms 后台 菜单点击后打开的慢
    用 PHP文件引入css样式
    TFT、LCD、OLED、LPTS、CRT等显示屏的区别
    ORCAD中的一些操作小技巧
  • 原文地址:https://www.cnblogs.com/itdef/p/9559933.html
Copyright © 2020-2023  润新知