[转]Redis 与Mysql通信

http://blog.csdn.net/hpb21/article/details/7852934

找了点资料看了下。学习心得如下:

1 Mysql更新Redis

Mysql更新Redis借鉴memcache与mysql通信,利用mysql udf,每有更新操作触发更新redis操作。不足在高并发时mysql压力较大,且针对每张表均需增删改触发,且Redis服务器不好更换(不知道有没有方法)。

2 Redis更新Mysql

最简单的就是读redis->写mysql.但是在高并发下,这样就不太适合了,因此考虑利用消息队列每隔的固定时间更新Mysql。

但是数据中主键为自增时,目前想法如下:

第一,Redis采用tempId为key,id为空,通过mysql udf重写数据到缓存如 ,清空缓存临时数据。

第二,redis key值不采用Id,采用字段uuid,再通过mysql udf 同步redis缓存 id。

第三,Redis读取Mysql表最新自增键Id值,Redis传递id。

Redis更新Mysql需注意,Redis在系统中的定位,作缓存服务器时,需规划存储哪些数据,保存多长时间等等。

并发访问

Redis为单进程单线程模式,采用队列模式将并发访问变为串行访问。Redis本身没有锁的概念,Redis对于多个客户端连接并不存在竞争,但是在Jedis客户端对Redis进行并发访问时会发生连接超时、数据转换错误、阻塞、客户端关闭连接等问题,这些问题均是由于客户端连接混乱造成。对此有2种解决方法:

1.客户端角度,为保证每个客户端间正常有序与Redis进行通信,对连接进行池化,同时对客户端读写Redis操作采用内部锁synchronized。

2.服务器角度,利用setnx实现锁。如某客户端要获得一个名字list的锁,客户端使用下面的命令进行获取:

Setnx lock.list  current time + lock timeout

  • 如返回1,则该客户端获得锁,把lock. list的键值设置为时间值表示该键已被锁定,该客户端最后可以通过DEL lock.list来释放该锁。
  • 如返回0,表明该锁已被其他客户端取得,等对方完成或等待锁超时。

3.线程池

mysql通信

数据一致性主要针对系统中Redis与mysql中的数据而言。为保证二者数据一致可采用以下策略:对于重要的数据,系统可以采取先写数据库再写缓存的方式来保证,而对于一般而响应速度要求很高的数据可以采取先写缓存然后通过消息队列再写入数据库的方式,同时做好错误日志记录以及能根据日志恢复数据。(jms/Redis消息队列)

存在问题:

(1)当用户进行添加操作, Redis与Mysql如何同步?

首先服务器启动,Redis读取Mysql表最新自增键Id值,然后Redis 读取id并封装缓存,同时保持mysql最后由队列完成mysql更新

(2)消息队列处理?

定位Redis操作:

定位dao:定义类、方法对应规则,结合存储Redis key定位方法,更新mysql

分类处理:按照类、方法。

时间: 2024-10-15 02:55:45

[转]Redis 与Mysql通信的相关文章

redis缓存mysql数据

redis (Remote Dictionary Server)是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件.它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hash(哈希类型).Redis支持主从同步.数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器.这使得Redis可执行单层树复制. MySQL和Redis,自身都

用Redis作为Mysql数据库的缓存【转】

用Redis作Mysql数据库缓存,必须解决2个问题.首先,应该确定用何种数据结构存储来自Mysql的数据:在确定数据结构之后,还要考虑用什么标识作为该数据结构的键. 直观上看,Mysql中的数据都是按表存储的:更微观地看,这些表都是按行存储的.每执行一次select查询,Mysql都会返回一个结果集,这个结果集由若干行组成.所以,一个自然而然的想法就是在Redis中找到一种对应于Mysql行的数据结构.Redis中提供了五种基本数据结构,即字符串(string).列表(list).哈希(has

Redis和MySQL的结合方案

方案由从易到难的顺序,但不管哪种方法.都须要保证的是Reids和MySQL的数据一致性. 方案一: 程序同一时候写Redis和MySQL 读Redis 方案二: 程序写MySQL, 使用Gearman调用MySQL的UDF.完毕对Redis的写 读Redis 參考 <利用Gearman进行Mysql到Redis的复制> 方案三: 程序写MySQL, 解析binlog.数据放入队列写Redis 读Redis 參考 <利用Canal完毕Mysql数据同步Redis> 方案四: 程序写R

redis缓存mysql

Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset(有序集合).这些数据类型都支持push/pop.add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的.在此基础上,redis支持各种不同方式的排序.与memcached一样,为了保证效率,数据都是缓存在内存中.区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且

python之路day11【RabbitMQ、Redis、Mysql】

大纲 1.RabbitMQ 2.Redis 3.Mysql 1.RabbitMQ消息队列 1.1 RabbitMQ简介 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计.消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然. AMQP的主要特征是面向消息.队列.路由(包括点对点和发布/订阅).可靠性.安全. RabbitMQ是一个开源的AMQP实现,服务器端用Erlan

使用HAProxy、PHP、Redis和MySQL支撑10亿请求每周架构细节

[编者按]在公司的发展中,保证服务器的可扩展性对于扩大企业的市场需要具有重要作用,因此,这对架构师提出了一定的要求.Octivi联合创始人兼软件架构师Antoni Orfin将向你介绍一个非常简单的架构,使用HAProxy.PHP.Redis和MySQL就能支撑每周10亿请求.同时,你还能了解项目未来的横向扩展途径及常见的模式. 以下为译文: 在这篇文章中,我将展示一个非常简单的架构,使用HAProxy.PHP.Redis和MySQL支撑每周10亿请求.除此之外,我还将展示项目未来的横向扩展途径

使用HAProxy、PHP、Redis和MySQL支撑每周10亿请求

在公司的发展中,保证服务器的可扩展性对于扩大企业的市场需要具有重要作用,因此,这对架构师提出了一定的要求.Octivi联合创始人兼软件架构师Antoni Orfin将向你介绍一个非常简单的架构,使用HAProxy.PHP.Redis和MySQL就能支撑每周10亿请求.同时,你还能了解项目未来的横向扩展途径及常见的模式. 状态 服务器 3个应用程序节点 2个MySQL+1个备份 2个Redis 应用程序 应用程序每周处理10亿请求 峰值700请求/秒的单Symfony2实例(平均工作日约550请求

利用gearman实现redis缓存mysql

环境: centos6.5 mysql5.6 gearman简介: Gearman是一个支持分布式的任务分发框架.设计简洁,获得了非常广泛的支持.一个典型的Gearman应用包括以下这些部分: Gearman Job Server:Gearman核心程序,以守护进程形式运行在后台 Gearman Client:可以理解为任务的收件员,比如我要在后台执行一个发送邮件的任务,可以在程序中调用一个Gearman Client并传入邮件的信息,然后就可以将执行结果立即展示给用户,而任务本身会慢慢在后台运

redis作为mysql的缓存服务器(读写分离) (转)

一.redis简介Redis是一个key-value存储系统.和Memcached类似,为了保证效率,数据都是缓存在内存中.区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步.在部分场合可以对关系数据库起到很好的补充作用.它提供了Java,C/C++(hiredis),C#,PHP,JavaScript,Perl,Object-C,Python,Ruby等客户端,使用很方便. 二.架构图<ignore_js_