redis数据存储解决方案_第1页
redis数据存储解决方案_第2页
redis数据存储解决方案_第3页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、redis 数据存储解决方案篇一: Redis 详解与常见问题解决方案Redis 简介redis 是一个key-value 存储系统。和Memcachec类似, 它支持存储的 value 类型相对更多,包括 string( 字符串 ) 、 list( 链表)、set(集合)、zset(sortedset -有序集合)和hash (哈希类型)。这些数据类型都支持push/pop、 add/remove 及取交集并集和差集及更丰富的操作, 而且这些 操作都是原子性的。在此基础上, redis 支持各种不同方式 的排序。与memcached样,为了保证效率,数据都是缓存 在内存中。区别的是 redi

2、s 会周期性的把更新的数据写入磁 盘或者把修改操作写入追加的记录文件,并且在此基础上实 现了 master-slave( 主从)同步。 安装:安装 Redis官方网站: p> 官方下载: p> windows 版: https:/ServiceStack/redis-windows下载安装包:解压启动 Redis解压版本后,找到,修改配置文件内容,内容如下。支持数据结构redis 提供五种数据类型: String , hash, list , set 及 zset(sortedset) 。 Redis 配置文件主要参数配置1、指定 Redis 监听端口,默认端口为 6379。por

3、t 63792、绑定的主机地址bind3、当客户端闲置多长时间后关闭连接, 如果指定为 0, 表示关闭该功能 timeout 3004、指定日志记录级别, Redis 总共支持四个级别: debug 、 verbose 、 notice 、 warning ,默认为 verbose 。loglevel verbose5、日志记录方式,默认为标准输出,如果配置Redis为守护进程方式运行,而这里又配置为日志记录方式为标准 输出,则日志将会发送给 /dev/null 。 logfile stdout6、设置数据库的数量,默认数据库为0,可以使用SELECT命令在连接上指定数据库 id。databa

4、ses 167、指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合。save8、Redis 默认配置文件中提供了三个条件:save 900 1save 300 10save 60 10000分别表示 900 秒( 15分钟)内有 1个更改, 300 秒(5 分钟)内有 10 个更改以及 60 秒内有 10000 个更改。9、指定存储至本地数据库时是否压缩数据,默认为 yes ,Redis采用LZF压缩,如果为了节省 CPU时间,可以关闭该 选项, 但会导致数据库文件变的巨大。 rdbcompression yes10、指定本地数据库文件名,默认值为。dbfilenam

5、e11、指定本地数据库存放目录。dir ./12、设置当本机为 slave 服务时,设置 master 服务的 IP 地址及端口,在 Redis 启动时,它会自动从 master 进行数据同步。slaveof13、当 master 服务设置了密码保护时, slave 服务连 接 master 的密码。 masterauth14、设置 Redis 连接密码,如果配置了连接密码,客 户端在连接 Redis 时需要通过 AUTH 命令提供密码,默认关 闭。requirepass foobared15、设置同一时间最大客户端连接数,默认无限制,Redis 可以同时打开的客户端连接数为 Redis 进程

6、可以打开 的最大文件描述符数,如果设置 maxclients 0 ,表示不作 限制。当客户端连接数到达限制时, Redis 会关闭新的连接 并向客户端返回 max number of clientsreached 错误信息。maxclients 12816、指定 Redis 最大内存限制, Redis 在启动时会把数 据加载到内存中,达到最大内存后, Redis 会先尝试清除已 到期或即将到期的 Key,当此方法处理后,仍然到达最大内 存设置, 将无法再进行写入操作, 但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区。17、指定是否在每次更新操作

7、后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能 会在断电时导致一段时间内的数据丢失。 因为 redis 本身同 步数据文件是按上面 save 条件来同步的,所以有的数据会 在一段时间内只存在于内存中。默认为 no。appendonly no18、指定更新日志文件名,默认为appendfilename19、指定更新日志条件,共有 3 个可选值:no:表示等操作系统进行数据缓存同步到磁盘(快)always :表示每次更新操作后手动调用 fsync() 将数据 写到磁盘(慢,安全)everysec :表示每秒同步一次(折衷,默认值)appendfsync everys

8、ec20、设置在向客户端应答时,是否把较小的包合并为 一个包发送,默认为开启 glueoutputbuf yes21、指定在超过一定的数量或者最大的元素超过某一 临界值时,采用一种特殊的哈希算法。hash-max-zipmap-value 51222、指定是否激活重置哈希,默认为开启(后面在介 绍 Redis 的哈希算法时具体介绍) 。activerehashing yes23、slave 根据指定的时间间隔向服务器发送ping 请求。时间间隔可以通过 repl_ping_slave_period 来设置。 默认 10 秒repl-ping-slave-period10 24、当一个 slav

9、e 失去和 master 的连接,或者同步正在进行中, slave 的行为有两种可能:设 置 为 "yes"(1) 如 果 slave-serve-stale-data( 默认值 ) ,slave 会继续响应客户端请求, 可能是正常数据, 也可能是还没获得值的空数据。(2) 如果 slave-serve-stale-data 设置为 "no" , slave 会回复 " 正在从 master 同步 (SYNCwith master in progress)" 来处理各种请求,除了 INFO 和 SLAVEOF 命令slave-serv

10、e-stale-datayes25、Redis 主从配置redis 支持 master-slave 的主从配置,配置方法是在 从机的配置文件中指定 slaveof 参数为主机的 ip 和 port 即 可。slaveof 6379篇二: Redis 分布式解决方案 -CoidsCodis 是一个分布式 解决方案 , 对于上层的应用来 说 , 连接到 CodisProxy 和连接原生的 Redis Server 没有 明显的区别 ( 不支持的命令列表 ), 上层应用可以像使用单 机的 Redis 一样使用 , Codis 底层会处理请求的转发 , 不 停机的数据迁移等工作 , 所有后边的一切事情

11、 , 对于前面 的客户端来说是透明的 , 可以简单的认为后边连接的是一 个内存无限大的 Redis 服务 .Codis 由四部分组成 : Codis Proxy(codis-proxy) 实现 redis 协议,由于本身是无状态的,因此可以部署很多 个节点? ? Codis Manager (codis-config)是 codis 的管理工具,包括添加 / 删除 redis 节点添加删除 proxy 节点,发起数据迁移等操作,自带 httpserver ,支持管理后台方式管理配置Codis Redis(codis-server) 是 codis 维护的 redis分支,基于分支,加入了 sl

12、ot 的支持和原子的数据迁移命令 ;codis-proxy 和 codis-config 只能和这个版本的 redis 交互才能正常运 行? ZooKeeper 用于 codis 集群元数据的存储 , 维护 codis 集群节点Codis 优缺点-优点? 对客户端透明,与 codis 交互方式和 redis 本身交 互一样? 支持在线数据迁移,迁移过程对客户端透明? 有简单的管理和监控界面? 支持高可用,无论是 redis 数据存储还是代理节点? 自动进行数据的均衡分配? 最大支持 1024 个 redis 实例,存储容量海量? 高性能-缺点? 采用自有的 redis 分支,不能与原版的 re

13、dis保持同 ?的性muti? 如果 codis 的 proxy 只有一个的情况下, redis 能会下降 20%左右 ? 某些命令不支持,比如事务命令? 国内开源产品,活跃度相对弱一些Codis 架构Codis 的性能 ( 代理 +两个 redis 节点1. wget1.tar -zxvf1. wget zookeeper/1. vi /.bash_profile配置 go 环境变量还有 zk homehtml1. vi /.bash_profile1. PATH=$PATH:$HOME/bin3. export PATH4. JAVA_HOME=/java/_765. PATH=$JAVA

14、_HOME/bin:$PATH6. CLASSPATH=.:$JAVA_HOME/lib/:$JAVA_HOME/lib/7. export JAVA_HOME8. export CLASSPATH9.10.ZOOKEEPER_HOME=/java/11.12.13.GOROOT=/java/go14.exportGOPATH=/java/codis15.PATH=$PATH:$GOROOT/bin:$GOPATH/bin:$ZOOKEEPER_HOME/ bin16. export PATH1. source /.bash_profile1. mkdir codis1. go get -u

15、-d /CodisLabs/codis进入到 coids 里面执行 make 编译代码篇三:基于 redis 的缓存方案假设最近对 redis 的使用方案进行了思考和假设,和前辈 们交流了下,整理如下。方案假设:1. 所有实体对象(公司,产品,经理等)放入 redis 缓存。(刷新缓存时的最小单位就是某实体,比如刷新一个 经理的缓存)。2. 静态页面与现有方案相同,整页面缓存,经常更新的放本地,不经常的放 memcache或者redis。3. 静态页面订阅页面中需要的实体对象,后台更新实体模型时,会发布相关实体更新的消息,不使用监听的方式,使用基于配置的函数调用实现)重新生成并缓存静态页 面。

16、4. 不知道老郭的注解有没关于 aop 方(来自 : 小龙文 档网:redis数据存储解决方案)面的,有就牛掰了,我们只需在原有方法的 before 和 after 中加入实体更新消息的代 码即可。5. 针对 IP 登录的问题,用 redis 的命令容易实现(key-value , INCR命令),只需与其他缓存的 key统一命名 或者混淆 key 名。问题:中实体的存储方案, 主要两种, 一种是只使用 key-value ,对象数据存 string 。第二种,每个对象用 hash 存放。可能会导致的区别就是查询和存储的效率问题。2. 本地是否能架设 redis 服务,如果一个页面中几个 小块

17、都要请求 redis 缓存中的数据,会有多次网络请求,性 能受影响。库中多对象、多层级的设计、命名等问题。坑: 服务的灾容。默认的存储和备份方式会导致宕机之后, 能恢复的内容有限。所以还是要有相应的模块重新生成缓存, 至少要把所有的产品等写入缓存。研究:针 对 问 题 1 : 官 方 解 释 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 扩展安装T

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论