使用关系型数据库作为Redis落地的思路
Redis的持久化方式主要有2种:RDB和AOF,但各有不足,同时Redis没有SQL支持,Redis本身提供的命令不足以实现大多数SQL查询需求,对后期运营的分析需求支撑不足。此外,对于游戏来说,活跃玩家只占总玩家的很少一部分,所以冷热数据分离也很有必要。因此我觉得Redis最好的持久化方案是备份到MySql之类的关系型数据库中,Redis本身只作为一个内存缓存系统使用。
- 启动过程:从数据库里面把修改时间在过期时间内的记录(热数据)全部读取写入到Redis中,并设置过期时间。
- 读取过程:先读Redis,如果存在,则直接返回并更新过期时间(如果不存在过期时间则不更新),否则再去读数据库,读取结果写入到Redis中。如果数据库中不存在,则也用记录的key在Redis做一个不存在的标记,以避免之后再次查询还需要去读数据库,拖慢速度。
- 写入过程:直接写入Redis(同时去掉过期时间),同时把key以当前时间为score写入一个特定的sorted set(dirtylist)中。
- 持久化过程:持久化程序跟随系统启动,每隔一段时间获取Redis的dirtylist中是否有元素,如果有元素则pop出来,通过key获取记录写入数据库,再把Redis中的key设置过期时间。
风险:
- 额外多了关系型数据库这一个单点。如果数据库发生了故障,则短时间内无法读取冷数据,读取热数据和写入都没有问题。只要监控到位,反应及时,风险影响不大。
- 数据丢失的风险。如果Redis发生了故障,则会丢失写入到Redis但还未持久化的记录(dirtylist里面的记录)。这一点无法避免,但单从游戏的角度来说,只要保证以事务为单位的持久化(比如说dirtylist同一时间的key,作为一个事务写入到数据库),出现问题可以通过短时间的回挡+补偿解决问题。
这里只是记录下一个思路,具体的问题和解决方案,等具体实践了之后,再来补充。
使用关系型数据库作为Redis落地的思路的更多相关文章
- Redis 01: 非关系型数据库 + 配置Redis
数据库应用的发展历程 单机数据库时代:一个应用,一个数据库实例 缓存时代:对某些表中的数据访问频繁,则对这些数据设置缓存(此时数据库中总的数据量不是很大) 水平切分时代:将数据库中的表存放到不同数据库 ...
- 非关系型数据库(NOSQL)-Redis
整理一波Redis 简介,与memcached比较 官网:http://redis.io Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括 ...
- 非关系型数据库之Redis
一.Redis简介 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统. Redis是一个开源的使用 ...
- 【Redis】(1)-- 关系型数据库与非关系型数据库
关系型数据库与非关系型数据库 2019-07-02 16:34:48 by冲冲 1. 关系型数据库 1.1 概念 关系型数据库,是指采用了关系模型来组织数据的数据库.关系模型指的就是二维表格模型, ...
- 初识关系型数据库(SQL)与非关系型数据库(NOSQL)
一.关系型数据库(SQL): Mysql,oracle 特点:数据和数据之间,表和字段之间,表和表之间是存在关系的 例如:部门表 001部分, 员工表 001 用户表,用户名.密码 分类表 和 商 ...
- Redis非关系型数据库
1.简介 Redis是一个基于内存的Key-Value非关系型数据库,由C语言进行编写. Redis一般作为分布式缓存框架.分布式下的SESSION分离.分布式锁的实现等等. Redis速度快的原因: ...
- Spring+Redis集成+关系型数据库持久化
本篇文章主要介绍了"Spring+Redis集成+关系型数据库持久化",主要涉及到Spring+Redis集成+关系型数据库持久化方面的内容,对于Spring+Redis集成+关系 ...
- redis相对关系型数据库的优势
它是键值数据库(非关系),数据查询比关系型数据库快. ps:redis是树状结构,查询快 redis是基于内存的一个数据库,I/O的效率影响较小. ps: 备份数据同步是才进行I/O操作.这个数据同步 ...
- python 之操作redis数据库(非关系型数据库,k-v)
数据库: 1. 关系型数据库 表结构 2. 非关系型数据库 nosql (k - v 速度快),常用的时以下三种: memcache 存在内存里 redis 存在内存里 mangodb 数据还是存在磁 ...
随机推荐
- Win32/MFC/COM学习推荐书籍
以前有不少朋友问关于学习各种技术的推荐书籍的问题,这里把我觉得比较好的一些书籍列一下,希望能起到抛砖引玉的作用就好了:) Win32开发 Programming Windows by Charles ...
- strpos、 strstr、 substr三个函数的对比讲解
mixed strpos ( string $haystack , mixed $needle [, int $offset = 0 ] ) 返回 needle 在 haystack 中首次出现的数字 ...
- vmware安装黑苹果教程
1.下载最新版vmware http://pan.baidu.com/s/1pLD8wxt 秘钥:UY192-0DW12-M81XY-DWW7C-MCKU6 2.确保hyper-v功能已关闭 3.下载 ...
- HTML5拖放加入购物车
H5拖放事件巩固实例: 1.简单布局一下,商品信息放入一个ul中:div为购物车,后续会创建元素 <ul> <li draggable="true"> &l ...
- Linux下ls命令显示符号链接权限为777的探索
Linux下ls命令显示符号链接权限为777的探索 --深入ls.链接.文件系统与权限 一.摘要 ls是Linux和Unix下最常使用的命令之一,主要用来列举目录下的文件信息,-l参数允许查看当前目录 ...
- 微信小程序,超能装的实例教程
序言 开始开发应用号之前,先看看官方公布的「小程序」教程吧!(以下内容来自微信官方公布的「小程序」开发指南) 本文档将带你一步步创建完成一个微信小程序,并可以在手机上体验该小程序的实际效果.这个小程序 ...
- caoz大神力作、互联网从业者必读之书——《你凭什么做好互联网》深入总结
作者简介:曹政--俞军的关门弟子,CNZZ统计工具的缔造者,前百度商业产品部boss,4399CTO,微信公众号"caoz的梦呓"(yi),文后附上二维码,经常发布各种互联网干货, ...
- 【转】jqGrid学习之参数
jqGrid参数 名称 类型 描述 默认值 可修改 url string 获取数据的地址 datatype string 从服务器端返回的数据类型,默认xml.可选类型:xml,local,json, ...
- 计算机存储负数以及int转byte时-128的出现
我们看下面这段代码 输出的结果的是128,这个没什么疑问 但是当我们不改变数值仅仅加了一个强制转换后 这时我们会发现结果会变成负的128.这时候我们就要怀疑了,为什么会出现这样的结果呢? 对于这个问题 ...
- iOS 图片旋转方法
iOS 图片旋转方法 通过 CGImage 或 CIImage 旋转特定角度 UIImage可通过CGImage或CIImage初始化,初始化方法分别为init(cgImage: CGImage, s ...