`

redis 学习问题总结

阅读更多

    

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由代理完成;

目前有TwemproxyCodis两种

实现方式

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学习网址推荐?

    redis英文官网

    redis中文官网

    高效运维最佳实践(03):Redis集群技术及Codis实践

    Redis集群方案应该怎么做?

    Redis集群解决方案比较

 

 

分享到:
评论

相关推荐

    个人整理的redis学习资料汇总

    【Redis学习资料汇总】 Redis,全称Remote Dictionary Server,是一种基于键值对的高性能非关系型数据库。它以数据持久化、支持多种数据结构、内存优化以及丰富的客户端库等特点受到广大开发者的青睐。本资料汇总将...

    redis学习相关资料

    redis学习相关资料 redis命令 redis文档总结 Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash...

    超详细的redis学习笔记

    ### 超详细的Redis学习笔记知识点汇总 #### 1. Redis 的启动与停止 ##### 1.1 直接启动 Redis 服务 - **默认端口启动**:使用 `$ redis-server` 命令,默认监听端口为 `6379`。 - **指定端口启动**:使用 `$ ...

    redis学习笔记Redis.md

    ### Redis 学习笔记知识点概览 #### 一、Redis 概述与应用场景 ##### 1.1 NoSQL 数据库简介 - **定义**: NoSQL(Not Only SQL)泛指非关系型数据库,它们通常不使用传统的表格关系来存储数据。 - **特性**: NoSQL ...

    Redis学习-实战.docx

    ### Redis 学习与实战应用 ...通过对 Redis 的学习和实战,可以有效地解决缓存问题,提高应用性能。同时,结合 Spring Data Redis 或 Jedis 这样的高级客户端,能够进一步简化 Redis 的使用过程,提升开发效率。

    redis学习笔记(详细总结)

    Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它支持存储的 value 类型相对更多,包括 ...

    Redis学习实战总结.md

    Redis学习实战总结.md

    redis有关学习总结

    学习Redis不仅需要掌握其基本操作和数据类型,还需要理解其持久化策略、复制机制以及如何在实际项目中合理使用。通过不断的实践和探索,开发者可以充分利用Redis的特性,提升应用程序的性能和功能。

    Redis个人学习总结

    Redis个人学习总结

    Redis学习总结

    Redis是一个开源的高性能键值存储数据库,它支持多种类型...而随着对Redis的进一步学习,例如学习其持久化机制、事务处理、发布订阅、Lua脚本以及Redis模块系统等,可以更深入地理解和应用这一强大的数据存储解决方案。

    手慢无!redis学习资料打开网盘即可下载.rar

    在本压缩包中,你将找到一系列的Redis学习资料,涵盖了从基础到深入的多个方面,对于初学者来说是很好的学习资源。 首先,让我们了解一下Redis的基础知识。Redis是一个开源、基于内存的数据结构存储系统,它可以将...

    Redis 2.2.4学习总结.ppt

    Redis 在实际应用中,如在酷米客的使用中,可能遇到的问题包括内存管理、数据持久化策略的选择、主从复制的实现、以及如何有效地利用其高级功能,如事务、发布订阅等。通过深入理解和优化这些方面,可以充分发挥...

    Redis_2.2.4学习总结.ppt

    Redis_2.2.4学习总结.ppt

    Redis数据库学习总结

    Redis基本操作,包括五种类型数据的设置,查找,删除等命令

    redis学习心得与笔记

    Redis,全称Remote Dictionary Server,是一款开源的、高性能的键值对存储系统,常被用于数据库缓存和消息中间件。...通过不断地实践和学习,我们可以更好地利用Redis解决实际问题,优化系统架构。

    电脑语言Redis学习总结.pdf

    电脑语言Redis学习总结.pdf

    Redis学习资料的完整笔记

    ### Redis学习资料的完整笔记 #### 一、入门简介 ##### 1.1 NoSQL非关系型数据库 - **概念**:NoSQL全称为Not Only SQL,是指非关系型...以上就是关于Redis学习资料中的关键知识点总结,希望对学习Redis有所帮助。

    redis学习案例

    总结,"redis学习案例"和"springmvc整合redis架构搭建实例"涉及了Redis的基础知识、Spring MVC与Redis的整合方法,以及如何在实际应用中实现Redis的模块化。通过这些知识,我们可以有效地利用Redis提升Web应用的性能...

    Redis 学习教程1

    Redis 学习教程 Redis 是一个完全开源免费的、高性能的key-value内存数据库。它有三个主要的特点:支持数据的持久化、支持丰富的数据类型、支持数据的备份。 ### Redis 环境安装 Redis 的安装可以通过多种方式,...

Global site tag (gtag.js) - Google Analytics