redis 搭配 SQL 实践问题
问题描述
团队准备做一套系统,因为考虑到后期的高并发的问题,所以想在开始阶段就将 NOSQL 设计进来。
不想把 redis 做的和memcached作用一样,只是简单的缓存。想将 redis 设计成数据的中间层。大概流程如下:
读取数据,如果redis中没有,从SQL读取然后放到redis里面并设置过期时间。修改数据(更新、删除、添加),先直接在redis操作,这里可能涉及到处于业务逻辑考虑,在redis里面使用list作为索引的情况,在redis里面删除、更新、添加,然后使用一个例如redis的订阅发布功能实现的队列,“异步”的更新 mysql没有太多的开发经验,这样做的目的就是为了读取和写入的分离,而且利用redis的优势,降低热数据的读写造成的损耗。
有类似经验的希望提出需要改进的地方,或者这个整个就是个不好的方案。
- - - 3月12日更新内容 - - -
今天又看了百度数据库中间层的PPT,于是特意去搜索了dbproxy的相关内容,思想中介绍说是通过sql语句的MD5值匹配进行缓存的选择,这样的问题是很容易造成数据更新的延时。于是我又想到了我自己的方案,将 redis 和 SQL 数据库搭配做成数据库中间层,这样是不是就可以迎合对数据实时要求很高的应用了。
- - - 3月13日更新内容 - - -
和评论中的 @鱼丸粗面 讨论了下 http://www.oschina.net/p/mysql-syncer 这个项目,这个项目更多的是通过首先更新到 Mysql,然后再根据Mysql的更新内容去更新 其他数据库例如redis。有一个问题很明显,就是高并发下写入Mysql是个可怕的事情,所以我之前想到的是直接更新redis然后异步更新Mysql,最后将redis作为缓冲层。如下图(来自新浪某PPT)
问题解答
回答1:感觉更新redis时将sql入队列然后再操作。控制好逻辑即可。
相关文章:
1. javascript - webpack build出错后如何定位文件?2. java - springboot使用容器加载时,如何预先获取ClassLoader资源?3. html5 - 想要写一个H5页面,就微信打开来那种,然后几个输入框,把数据保存在我后台(java)的数据库里,实现思路是怎样的?4. boot2docker无法启动5. android - 百度地图加载大量marker点有没有比较好的解决方案6. 怎么在phpstudy中用phpexcel上传数据到MYSQL?7. java - AtomicInteger等原子类,是不是不用volatile修饰,自带volatile属性?8. vue.js - 为什么我的vue项目上传到github不能预览?9. css3 邊框漸層 及 ios背景模糊?10. 请在微信客户端打开链接怎么在PC端打开