redis数据存储解决方案.docx
《redis数据存储解决方案.docx》由会员分享,可在线阅读,更多相关《redis数据存储解决方案.docx(7页珍藏版)》请在冰豆网上搜索。
redis数据存储解决方案
竭诚为您提供优质文档/双击可除
redis数据存储解决方案
篇一:
Redis详解与常见问题解决方案
Redis简介
redis是一个key-value存储系统。
和memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sortedset--有序集合)和hash(哈希类型)。
这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。
在此基础上,redis支持各种不同方式的排序。
与memcached一样,为了保证效率,数据都是缓存在内存中。
区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
安装:
安装Redis
官方网站:
http:
//redis.io/
官方下载:
http:
//redis.io/download可以根据需要下载不同版本
windows版:
下载安装包:
解压启动Redis
解压redis64-2.8.17版本后,找到redis.windows.conf,修改配置文件内容,内容如下。
支持数据结构
redis提供五种数据类型:
string,hash,list,set及zset(sortedset)。
Redis配置文件主要参数配置
1、指定Redis监听端口,默认端口为6379。
port6379
2、绑定的主机地址
bind127.0.0.1
3、当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能timeout300
4、指定日志记录级别,Redis总共支持四个级别:
debug、verbose、notice、warning,默认为verbose。
loglevelverbose
5、日志记录方式,默认为标准输出,如果配置Redis为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null。
logfilestdout
6、设置数据库的数量,默认数据库为0,可以使用select命令在连接上指定数据库id。
databases16
7、指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合。
save
8、Redis默认配置文件中提供了三个条件:
save9001
save30010
save6010000
分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。
9、指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用lzF压缩,如果为了节省cpu时间,可以关闭该选项,但会导致数据库文件变的巨大。
rdbcompressionyes
10、指定本地数据库文件名,默认值为dump.rdb。
dbfilenamedump.rdb
11、指定本地数据库存放目录。
dir./
12、设置当本机为slave服务时,设置master服务的ip地址及端口,在Redis启动时,它会自动从master进行数据同步。
slaveof
13、当master服务设置了密码保护时,slave服务连接master的密码。
masterauth
14、设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通过auth 命令提供密码,默认关闭。
requirepassfoobared
15、设置同一时间最大客户端连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数,如果设置maxclients0,表示不作限制。
当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回maxnumberofclientsreached错误信息。
maxclients128
16、指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的key,当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。
Redis新的vm机制,会把key存放内存,Value会存放在swap区。
maxmemory
17、指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。
因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。
默认为no。
appendonlyno
18、指定更新日志文件名,默认为appendonly.aof
appendfilenameappendonly.aof
19、指定更新日志条件,共有3个可选值:
no:
表示等操作系统进行数据缓存同步到磁盘(快)
always:
表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)
everysec:
表示每秒同步一次(折衷,默认值)
appendfsynceverysec
20、设置在向客户端应答时,是否把较小的包合并为一个包发送,默认为开启glueoutputbufyes
21、指定在超过一定的数量或者最大的元素超过某一临界值时,采用一种特殊的哈希算法。
hash-max-zipmap-entries64
hash-max-zipmap-value512
22、指定是否激活重置哈希,默认为开启(后面在介绍Redis的哈希算法时具体介绍)。
activerehashingyes
23、slave根据指定的时间间隔向服务器发送ping请求。
时间间隔可以通过repl_ping_slave_period来设置。
默认10秒
repl-ping-slave-period10
24、当一个slave失去和master的连接,或者同步正在进行中,slave的行为有两种可能:
(1)如果slave-serve-stale-data设置为"yes"(默认值),slave会继续响应客户端请求,可能是正常数据,也可能是还没获得值的空数据。
(2)如果slave-serve-stale-data设置为"no",slave会回复"正在从master同步(syncwithmasterinprogress)"来处理各种请求,除了inFo和slaVeoF命令。
slave-serve-stale-datayes
25、Redis主从配置
redis支持master-slave的主从配置,配置方法是在从机的配置文件中指定slaveof参数为主机的ip和port即可。
slaveof192.168.1.236379
篇二:
Redis分布式解决方案-coids
codis是一个分布式解决方案,对于上层的应用来说,连接到codisproxy和连接原生的Redisserver没有明显的区别(不支持的命令列表),上层应用可以像使用单机的Redis一样使用,codis底层会处理请求的转发,不停机的数据迁移等工作,所有后边的一切事情,对于前面的客户端来说是透明的,可以简单的认为后边连接的是一个内存无限大的Redis服务.
codis由四部分组成:
codisproxy(codis-proxy)实现redis协议,由于本身是无状态的,因此可以部署很多个节点
codismanager(codis-config)是codis的管理工具,包括添加/删除redis节点
添加删除proxy节点,发起数据迁移等操作,自带httpserver,支持管理后台方式管理配置
codisRedis(codis-server)是codis维护的redis分支,基于2.8.21分支,加
入了slot的支持和原子的数据迁移命令;codis-proxy和codis-config只能和这个版本的redis交互才能正常运行
zookeeper用于codis集群元数据的存储,维护codis集群节点
codis优缺点
–优点
对客户端透明,与codis交互方式和redis本身交互一样
支持在线数据迁移,迁移过程对客户端透明
有简单的管理和监控界面
支持高可用,无论是redis数据存储还是代理节点
自动进行数据的均衡分配
最大支持1024个redis实例,存储容量海量
高性能
–缺点
采用自有的redis分支,不能与原版的redis
保持同
如果codis的proxy只有一个的情况下,redis的性能会下降20%左右某些命令不支持,比如事务命令muti
国内开源产品,活跃度相对弱一些
codis架构
codis的性能(代理+两个redis节点
1.wget
1.
tar-zxvfgo1.4.1.linux-amd64.tar.gz
1.wget
.6.tar.gz
1.vi~/.bash_profile
配置go环境变量还有zkhome
[html]
1.vi~/.bash_profile
1.path=$path:
$home/bin
2.
3.exportpath
4.jaVa_home=/java/jdk1.7.0_76
5.path=$jaVa_home/bin:
$path
6.classpath
=.:
$jaVa_home/lib/dt.jar:
$jaVa_home/lib/tools.jar
7.exportjaVa_home
8.exportclasspath
9.
10.
zookeepeR_home=/java/zookeeper-3.4.6
11.
12.
13.
goRoot=/java/go
14.
export
gopath=/java/codis
15.path=$path:
$goRoot/bin:
$gopath/bin:
$zookeepeR_home/bin
16.exportpath
1.source~/.bash_profile
1.mkdircodis
1.goget-u-
进入到coids里面执行make编译代码
篇三:
基于redis的缓存方案假设
最近对redis的使用方案进行了思考和假设,和前辈们交流了下,整理如下。
方案假设:
1.所有实体对象(公司,产品,经理等)放入redis缓存。
(刷新缓存时的最小单位就是某实体,比如刷新一个经理的缓存)。
2.静态页面与现有方案相同,整页面缓存,经常更新的放本地,不经常的放memcache或者redis。
3.静态页面订阅页面中需要的实体对象,后台更新实体模型时,会发布相关实体更新的消息,(不使用监听的方式,使用基于配置的函数调用实现)重新生成并缓存静态页面。
4.不知道老郭的注解有没关于aop方(redis数据存储解决方案)面的,有就牛掰了,我们只需在原有方法的before和after中加入实体更新消息的代码即可。
5.针对ip登录的问题,用redis的命令容易实现(key-value,incR命令),只需与其他缓存的key统一命名或者混淆key名。
问题:
1.redis中实体的存储方案,主要两种,一种是只使用key-value,对象数据存string。
第二种,每个对象用hash存放。
可能会导致的区别就是查询和存储的效率问题。
2.本地是否能架设redis服务,如果一个页面中几个小块都要请求redis缓存中的数据,会有多次网络请求,性能受影响。
3.redis库中多对象、多层级的设计、命名等问题。
坑:
1.redis服务的灾容。
默认的存储和备份方式会导致宕机之后,能恢复的内容有限。
所以还是要有相应的模块重新生成缓存,至少要把所有的产品等写入缓存。
研究:
针对问题1:
官方解释http:
//redis.io/topics/memory-optimization#use-hashes-when-possible尽量用hash替代杂乱的多组简单的keys。
redis本身数据结构多keys比单一hash存多fields占用内存大。
不过redis的性能测试暂时不支持hash的测试。
针对问题1:
thinkphp提供的s()方法的用到的redis的驱动中,只实现了set、get等操作key-value的方法,关于操作hash方法需要用扩展。
(具体可用phpredis)
附录:
phpredis扩展安装
thinkphp采用php官方认证的第三方redis扩展phpredis
1.redis安装
$wgethttp:
//download.redis.io/releases/redis-3.0.2.tar.gz
$tarxzfredis-3.0.2.tar.gz
$cdredis-3.0.2
$make
$makeinstall
2.phpredis安装
1.1phpize安装(centos)
$sudoyum--nopluginsinstallphp-devel
1.2phpredis安装
3.redis服务启动
$redis-server