redis 学习问题总结 |
http://aperise.iteye.com/blog/2310639 |
ehcache memcached redis 缓存技术总结 |
http://aperise.iteye.com/blog/2296219 |
redis-stat 离线安装 |
http://aperise.iteye.com/blog/2310254 |
redis cluster 非ruby方式启动 |
http://aperise.iteye.com/blog/2310254 |
redis-sentinel安装部署 |
http://aperise.iteye.com/blog/2342693 |
spring-data-redis使用 |
http://aperise.iteye.com/blog/2342615 |
redis客户端redisson实战 |
http://blog.csdn.net/zilong_zilong/article/details/78252037 |
redisson-2.10.4源代码分析 |
http://blog.csdn.net/zilong_zilong/article/details/78609423 |
tcmalloc jemalloc libc选择 |
http://blog.csdn.net/u010994304/article/details/49906819 |
什么是redis集群
- 官方推荐的2种redis部署方式对比以及使用场景
- 实现redis集群的方式
- sentinel的作用,sentinel是实现集群的方式吗
- 非集群方式如何保证redis高可用
- redis官网集群方式默认采用ruby脚本redis-trib.rb实现,离开了ruby脚本,我们就玩不转redis官网推荐的redis cluster方式了吗
- redis学习网址推荐?
1.什么是redis集群
真正的redis集群,首先要实现redis数据的自由均匀自由分片(sharding),当数据分不到集群中各个节点之后,为保障该sharding节点的高可用性,该节点必须有足够多的从节点不断同步和备份数据,以便在该节点出现问题后,迅速通过某种方式(比如选举制)夺取出问题的主节点的原有角色位置。
这么理解的话,个人认为,redis集群首先要支持分片sharding,其次分片要高可用(出问题,迅速切换)
2.官方推荐的2种redis部署方式对比以及使用场景
我使用redis时间不长,主要通过官网了解关于redis的一切,大家知道,在官网介绍了关于redis高可用的两种部署方式,一是redis cluster(官网上介绍是通过ruby脚本redis-trib.rb灵活实现redis cluster模式),另一种方式是通过sentinel方式实现redis的高可用。
先来对比下官网的两种部署方式,列表如下:
官网介绍的redis部署方式 | redis cluster | redis sentinel |
是否支持数据分片 | 本身支持 | 本身不支持,需要自己实现 |
是否高可用 | 高可用,节点故障后自动切换 | 高可用,节点故障后自动切换 |
使用场景 |
数据量大,数据均匀分布于各个节点; 支持节点的横向扩展; 各个节点高可用。 |
数据量小,服务器个数有限; 单个节点已经能存储所有数据; 避免单节点故障,引入sentinel |
最少机器台数 |
6台(3主3从) |
3台(3sentinel与1主2从复用) |
官网介绍了两种redis部署方式,其实有其道理的。
场景一:在数据量超级大的情况下,单台redis服务器无法横向扩展,所以此时首先就要保证数据分布于能横向扩展的各个节点机器之上,这个就是sharding,这之后,为了保证数据有效性,每个sharding分片又必须有足够多的机器来做好备份,以便出问题时候能迅速被顶替上。这么看来,这种方式首先你要很多机器来存放sharding数据,需要很多机器来对sharding进行备份,对于机器资源本来不多的小公司,毕竟是一笔大的开销,最小的redis cluster部署方式下需要6台机器,3台主服务器做sharding,3台从服务器。
场景二:数据量非常小,基本单台redis服务器就能存储所有缓存数据,而且戳戳有余。但又怕单节点故障问题,所以引入了sentinel,其实sentinel就是一个哨兵服务了,它已经知道哪台机器是主节点,哪台机器是从节点,主节点不可用时,能迅速从从节点选举新的从节点作为主节点。但毕竟sentinel也存在单节点故障,所以最好sentinel也要大于或等于3台。此部署方式下,最少3台机器,3台sentinel,1台主1台从,最稳定最少机器为3台sentinel1台主2台从,且此方式不属于redis集群范畴,因为不具备sharding功能。
3.实现redis集群的方式
话说到这里,redis集群就只有redis cluster方式吗????????
不是的,纵观redis的发展历程,redis走到今天,经过社区的不断贡献,目前redis集群方式有3种,列表如下:
redis集群种类 | 方式一(客户端分片) | 方式二(代理分片) | 方式三(服务端分片) |
分片sharding |
sharding在客户端; 目前的实现有jedis |
sharding不在服务端更不在客户端; sharding由代理完成; 目前有Twemproxy和Codis两种 实现方式 |
sharding在服务端, 服务端自带sharding实现 |
优点 |
不依赖于第三方分布式中间件; 实现方法和代码都自己掌控; 静态分片技术; 性能比代理式更好(少了一个中间分发环节);
|
程序不用关心后端Redis 实例,运维起来也方便 |
无中心节点(和代理模式的重要不同之处);故障自动切换
|
缺点 |
可运维性较差。出现故障, 定位和解决都得研发和运维配 合着解决,故障时间变长。 |
多了一道环节,相对客户端 分片集群方式性能稍微降低 |
一种非常“重”的方案。 已经不是Redis单实例的“简单、可依赖” |
4.sentinel的作用,sentinel是实现集群的方式吗
1)sentinel的作用?
Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:
- 监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
- 提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
- 自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。
2)sentinel是实现集群的方式吗?
sentinel不是redis集群方式(这里集群指既支持数据sharding又支持高可用),因为sentinel首先不支持分片。
sentinel的出现是对那些数据量小单台机器已经能存储所有数据环境下,对于单节点故障问题的一种弥补技术,它能使得该场景下原来只有1台redis的机器,在增加一台从节点后, 在出现问题时候实现高可用,实现故障自动切换。
5.非集群方式如何保证redis高可用
非集群方式主要指不同时满足sharding和高可用的部署方式,目前很多小的应用或者不重要应用是采用单节点redis,存在的问题是这个redis节点宕机后,整个依靠redis作为缓存架构的应用会瘫痪无法使用,为了保证高可用(故障自动切换,不需人工干预),有两种部署方式可以满足高可用。
方式一:2台keepalived+2台redis
两台keepalived机器,两台redis节点(一主一从),keepalived通过虚IP方式转发请求给redis主节点,监测redis节点,在主节点宕机后,通过shell脚本触发从redis节点切换为主节点提供服务,当原先的主节点恢复时候,通过脚本首先从当前的主节点同步数据(实现方式是slaveof 当前主节点),等数据同步好后(通过脚本sleep睡眠一定时间控制),切换自己为主节点(slaveof no one实现),同时切换另一节点slaveof自己。
方式二:3台sentinel+3台redis(1主2从)
这里强调一点,sentinel节点一定要3台(sentinel发现需要故障切换时候会投票选举一个sentinel进行故障切换,2个sentinel时候,会存在脑裂(sentinel节点都互相投票让对方进行故障切换,但1:1的票数永远不能满足投票的总原则票多决定胜者,所以在一定情况下永远不会进行故障切换))
6.redis官网集群方式默认采用ruby脚本redis-trib.rb实现,离开了ruby脚本,我们就玩不转redis官网推荐的redis cluster方式了吗?
redis官网介绍的redis cluster方式是采用ruby脚本ruby-trib.rb实现的,该脚本的好处是,redis作者在自己对于ruby非常熟悉的情况下,已经将很多构建redis cluster集群的客户端脚本通过ruby语言进行了实现,提供的ruby-trib.rb脚本是为了方便使用者快速使用ruby搭建一个高可用redis cluster集群。
不使用该脚本,也是能够自己搭建redis cluster集群的,现大致介绍下其步骤,参见博客redis cluster 非ruby方式启动http://aperise.iteye.com/blog/2315810,大致步骤如下:
- 最少6台机器,分别安装redis环境,不需要安装ruby
- 6台机器分别配置端口等信息,单独启动redis
- 将 ip 和 port 所指定的6个节点添加到集群当中,让它成为集群的一份子,通过CLUSTER MEET实现
- 确定3台主节点,并将一个或多个槽(slot)指派(assign)给各个节点,通过CLUSTER ADDSLOTS实现
- 指定另外3台机器分别作为上面3台机器的从节点,通过CLUSTER REPLICATE实现
7.redis学习网址推荐?
高效运维最佳实践(03):Redis集群技术及Codis实践
相关推荐
【Redis学习资料汇总】 Redis,全称Remote Dictionary Server,是一种基于键值对的高性能非关系型数据库。它以数据持久化、支持多种数据结构、内存优化以及丰富的客户端库等特点受到广大开发者的青睐。本资料汇总将...
redis学习相关资料 redis命令 redis文档总结 Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash...
### 超详细的Redis学习笔记知识点汇总 #### 1. Redis 的启动与停止 ##### 1.1 直接启动 Redis 服务 - **默认端口启动**:使用 `$ redis-server` 命令,默认监听端口为 `6379`。 - **指定端口启动**:使用 `$ ...
### Redis 学习笔记知识点概览 #### 一、Redis 概述与应用场景 ##### 1.1 NoSQL 数据库简介 - **定义**: NoSQL(Not Only SQL)泛指非关系型数据库,它们通常不使用传统的表格关系来存储数据。 - **特性**: NoSQL ...
### Redis 学习与实战应用 ...通过对 Redis 的学习和实战,可以有效地解决缓存问题,提高应用性能。同时,结合 Spring Data Redis 或 Jedis 这样的高级客户端,能够进一步简化 Redis 的使用过程,提升开发效率。
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它支持存储的 value 类型相对更多,包括 ...
Redis学习实战总结.md
学习Redis不仅需要掌握其基本操作和数据类型,还需要理解其持久化策略、复制机制以及如何在实际项目中合理使用。通过不断的实践和探索,开发者可以充分利用Redis的特性,提升应用程序的性能和功能。
Redis个人学习总结
Redis是一个开源的高性能键值存储数据库,它支持多种类型...而随着对Redis的进一步学习,例如学习其持久化机制、事务处理、发布订阅、Lua脚本以及Redis模块系统等,可以更深入地理解和应用这一强大的数据存储解决方案。
redis学习总结分享,记录了redis整个学习过程总的知识点
在本压缩包中,你将找到一系列的Redis学习资料,涵盖了从基础到深入的多个方面,对于初学者来说是很好的学习资源。 首先,让我们了解一下Redis的基础知识。Redis是一个开源、基于内存的数据结构存储系统,它可以将...
Redis 在实际应用中,如在酷米客的使用中,可能遇到的问题包括内存管理、数据持久化策略的选择、主从复制的实现、以及如何有效地利用其高级功能,如事务、发布订阅等。通过深入理解和优化这些方面,可以充分发挥...
Redis_2.2.4学习总结.ppt
Redis基本操作,包括五种类型数据的设置,查找,删除等命令
Redis,全称Remote Dictionary Server,是一款开源的、高性能的键值对存储系统,常被用于数据库缓存和消息中间件。...通过不断地实践和学习,我们可以更好地利用Redis解决实际问题,优化系统架构。
电脑语言Redis学习总结.pdf
### Redis学习资料的完整笔记 #### 一、入门简介 ##### 1.1 NoSQL非关系型数据库 - **概念**:NoSQL全称为Not Only SQL,是指非关系型...以上就是关于Redis学习资料中的关键知识点总结,希望对学习Redis有所帮助。
总结,"redis学习案例"和"springmvc整合redis架构搭建实例"涉及了Redis的基础知识、Spring MVC与Redis的整合方法,以及如何在实际应用中实现Redis的模块化。通过这些知识,我们可以有效地利用Redis提升Web应用的性能...