Redis vs memcached vs mongo
Redis vs memcached:
Redis作为一个高性能的key-value数据库具有以下特征:
1.多样的数据模型(String、Hash、List、Set和Sorted Set)
2.持久化-bgsave(使用RDB快照的方式,在发起落地指令时,fork 出一个进程把整个内存 dump 到硬盘上(fork会消耗不少内存和IO);或使用类似MySQL的AOF日志方式,记录每次更新的日志。前者性能较高,但是可能会引起一定程度的数据丢失;后者相反。)
3.主从同步(对提高读取性能非常有益, 也触发了fork)
4.分布式可拓展性:
4.1 2.8以前的版本:与Memcached一致,可以在客户端实现,也可以使用代理,twitter已开发出用于Redis和Memcached的代理Twemproxy 。
4.2 3.0以后的版本:Redis Cluster是一个实现了分布式且允许单点故障的Redis高级版本,它没有中心节点,各个节点地位一致,具有线性可伸缩的功能。
5. Redis只使用单核,而Memcached可以使用多核
6. Memcached单个key-value大小有限,一个value最大只支持1MB,而Redis最大支持512MB
7. Memcached只是个内存缓存,对可靠性无要求;而Redis更倾向于内存数据库,因此对对可靠性方面要求比较高
8. 冷备机制: 定期把 redis 数据库文件复制一份打包备份。而操作系统在拷贝文件时,似乎利用了大量的内存做文件 cache 而没有及时释放。调整了操作系统的内核参数,关掉了 cache ,暂时解决了问题。
可靠性上:
MemCached不支持数据持久化,断电或重启后数据消失,但其稳定性是有保证的。Redis支持数据持久化和数据恢复,允许单点故障,但是同时也会付出性能的代价。
应用场景:
Memcached:动态系统中减轻数据库负载,提升性能;做缓存,适合多读少写,大数据量的情况(如人人网大量查询用户信息、好友信息、文章信息等)。
Redis:适用于对读写效率要求都很高,数据处理业务复杂和对安全性要求较高的系统(如新浪微博的计数和微博发布部分系统,对数据安全性、读写要求都很高)。
mongo
磁盘映射内存数据库
value为document类型, 基于BSON的value序列化
应用场景:
适合多写少读, 例如日志和备份
SQL vs NoSQL:
MySQL中, 背包其实跟角色完全没有关系, 只是通过1个角色id映射过去, 人为的割裂了数据的关联性. 还硬生生的整出个概念叫结构化查询让你学
NoSQL中, 只是把数据库当成是存储点, 每个角色的数据是完整的一块. 里面怎么存随你便. 每个角色通过id来查询, 其他都没有了
于是乎, 游戏开发变得异常简单. MySQL角色进门查询4~5次才能搞定要的数据.而NoSQL一口气全查出来, 存盘也无需增量, 直接存盘就可以了
http://blog.codingnow.com/2014/03/mmzb_redis.html
https://github.com/shenzhe/redis-storage