redis缓存其实就是把经常访问的数据放到redis里面,用户查询的时候先去redis查询,没有查到就执行sql语句查询,同时把数据同步到redis里面。redis只做读操作,在内存中查询速度快。
创新互联建站主营海北州网站建设的网络公司,主营网站建设方案,成都app软件开发,海北州h5小程序制作搭建,海北州网站营销推广欢迎海北州等地区企业咨询
使用redis做缓存必须解决两个问题,首先就是确定用何种数据结构存储来自mysql的数据;确定数据结构之后就是需要确定用什么标识来作为数据的key。
mysql是按照表存储数据的,这些表是由若干行组成。每一次执行select查询,mysql都会返回一个结果集,这个结果是由若干行组成的。redis有五种数据结构:列表list,哈希hash,字符串string,集合set,sorted set(有序集合),对比几种数据结构,string和hash是比较适合存储行的数据结构,可以把数据转成json字符串存入redis。
全量遍历键: keys pattern keys *
有人说 KEYS 相当于关系性数据的库的 select * ,在生产环境几乎是要禁用的
不管上面说的对不对, keys 肯定是有风险的。那我们就换一种方案,在存数据的时候。把数据的键存一下,也存到redis里面选hash类型,那么取的时候就可以直接通过这个hash获取所有的值,自我感觉非常好用!
程序实现mysql更新、添加、删除就删除redis数据。
程序查询redis,不存在就查询mysql并保存redis
redis和mysql数据的同步,代码级别大致可以这样做:
读: 读redis-没有,读mysql-把mysql数据写回redis
写: 写mysql-成功,写redis(捕捉所有mysql的修改,写入和删除事件,对redis进行操作)
方法有很多 其中之一
实时获取mysql binlog进行解析 然后修改redis
MySQL到Redis数据方案
无论MySQL还是Redis 自身都带有数据同步的机制,像比较常用的MySQL的Master/Slave模式,就是由Slave端分析Master的binlog来实现的,这样的数据其实还是一个异步过程,只不过当服务器都在同一内网时,异步的延迟几乎可以忽略
那么理论上我们也可以用同样方式,分析MySQL的binlog文件并将数据插入Redis。但是这需要对binlog文件以及MySQL有非常深入的理解,同时由于binlog存在Statement/Row/Mixedlevel多种形式,分析binlog实现同步的工作量是非常大的。
因此这里选择了一种开发成本更加低廉的方式,借用已经比较成熟的MySQL UDF,将MySQL数据首先放入Gearman中,然后通过一个自己编写的PHP Gearman Worker,将数据同步到Redis
微博的系统架构,想用mysql+redis配合使用,具体操作步骤:
写入数据到Redis,,然后在写个运行cron的脚本,美妙读内存,并写入数据库即可。
使用注意:
1、MySQL使用需要注意的地方:
1) 、存储引擎选择InnoDB,在高并发下读写有很好的表现;
2)、 数据合理分表分区,均衡各数据库服务器的负载;
3) 、适当作数据的冗余,便于在cache失效时的快速恢复;
2、Redis使用需要注意的地方:
1) 、合理规划cache;
将访问量高的热点数据统计出来、分类缓存。
2)、 缓存的压缩;
在高访问量和高并发下,每一个字节的减少都是巨大的节省。
3、数据实时性与一致性。