文章系列先介绍环境搭建 介绍redis操做和代码编写运行 这是典型的实战工程过程。
那么咱们为什么要使用redis而不是常规的数据库好比 mysql呢?html
由于KV内存数据库最大的优点全部数据所有存储在内存中,速度快,并且key-value的特色也决定了他良好的扩展性.mysql
如下几点做为游戏服务器中的应用示例,更多的使用方法能够在实践中继续探索优化redis
好比前一章节的用户数据,在mysql进行读写和redis上进行读写在大量并发访问的场景下,差异是很大的。
Redis提供了较为丰富数据类型,使咱们能够更为容易地将数据对象缓存起来(序列化、protobuffer)。
当须要请求某一数据时,先从Redis中查找,若是没有再查数据库,同时交给Redis缓存起来。
当对数据进行修改时,则先将修改后的数据保存到Redis,而后保存至数据库sql
在保存到数据库这一环节根据不用的数据处理需求 能够有不用的思路
A不实时保存到数据库,而是交由另外的线程(甚至是专门的程序)去保存,以提升逻辑层的响应速度。
B部分数据交给Redis保存(Reids自身有持久化功能),像玩家已经完成过的任务ID集合,利用Redis的Set类型保存更为合适。
C玩家瞬时变化的数据不见得每次修改都须要保存(好比金钱、经验),但若是游戏服务器本身维护在内存中,出现宕机就会致使回档。
Redis是独立于游戏服务器的,交由它来保存,能够防止宕机回档的问题,也能够减小游戏服务器本身维护数据所占用的内存。数据库
游戏服务器中涉及到不少排行信息,好比玩家等级排名、金钱排名、战斗力排名等。
通常状况下仅须要取排名的前N名就能够了,这时能够利用数据库的排序功能,或者本身维护一个元素数量有限的top集合。
可是有时候咱们须要每个玩家的排名,玩家的数量太多,不能利用数据库(全表排序压力太大),本身维护也会比较麻烦。
使用Redis能够很好的解决这个问题。它提供的有序Set,支持每一个键值(好比玩家id)拥有一个分数(score),每次往这个set里添加元素,
Redis会对其进行排序,修改某一元素的score后,也会更新排序,在获取数据时,能够指定排序范围。
更重要的是,这个排序结果会被保存起来,不用在服务器启动时从新计算。
经过它,排行榜的实时刷新、全服排行都再也不成为麻烦事。
redis中能够使用sorted set,将排序的值设置成sorted set中的score,每次执行一条zadd便可缓存
好比你能够把上面说到的 sorted set 的 score 值设置成过时时间的时间戳,那么就能够简单地经过过时时间排序,定时清除过时数据了,
不只是清除 Redis 中的过时数据,你彻底能够把 Redis 里这个过时时间当成是对数据库中数据的索引,
用 Redis 来找出哪些数据须要过时删除,而后再精准地从数据库中删除相应的记录。 服务器
参考并发
https://www.cnblogs.com/captainl1993/p/4788236.html优化
https://www.cnblogs.com/agent-k/p/Redis.html.net
《redis实战》 www.ChinaDBA.net 中国DBA超级论坛电子书