Twemproxy

redis 生产环境部署方案

℡╲_俬逩灬. 提交于 2020-10-15 08:26:12
redis在生产环境首先要保证的高可用,要做到这点有很多方案 主备 一主一从:几乎没有业务场景这样用了,可能只有一些公司内部的业务系统会这样。 一主多从+哨兵监控:主负责写,从负责读,哨兵负责监控 集群与代理方案:大数据量的情况,利用数据数据可以相对均匀的放到集群的reids主机上, coids:有图形界面,但是需要引进zk twemproxy:简单,但是存在单点问题 redis cluster:redis官方方案。 predixy:支持的功能最全,但也存在单点 来源: oschina 链接: https://my.oschina.net/joeyjava/blog/4561837

为什么Redis要比Memcached更火?

♀尐吖头ヾ 提交于 2020-10-02 10:53:23
前言 我们都知道,Redis和Memcached都是内存数据库,它们的访问速度非常之快。但我们在开发过程中,这两个内存数据库,我们到底要如何选择呢?它们的优劣都有哪些? 为什么现在看Redis要比Memcached更火一些? 这篇文章,我们就从各个方面来对比这两个内存数据库的差异,方便你在使用时,做出最符合业务需要的选择。 要分析它们的区别,主要从以下几个方面对比: 线程模型 数据结构 淘汰策略 管道与事务 持久化 高可用 集群化 线程模型 要说性能,必须要分析它们的服务模型。 Memcached处理请求采用多线程模型,并且基于IO多路复用技术,主线程接收到请求后,分发给子线程处理。 这样做好的好处是,当某个请求处理比较耗时,不会影响到其他请求的处理。 当然,缺点是CPU的多线程切换必然存在性能损耗,同时,多线程在访问共享资源时必然要加锁,也会在一定程度上降低性能。 Redis同样采用IO多路复用技术,但它处理请求采用是单线程模型,从接收请求到处理数据都在一个线程中完成。 这意味着使用Redis,一旦某个请求处理耗时比较长,那么整个Redis就会阻塞住,直到这个请求处理完成后返回,才能处理下一个请求,使用Redis时一定要避免复杂的耗时操作。 单线程的好处是,少了CPU的上下文切换损耗,没有了多线程访问资源的锁竞争,但缺点是无法利用CPU多核的性能。 由于Redis是内存数据库

Redis 集群演进探讨和总结

丶灬走出姿态 提交于 2020-08-08 21:49:31
Redis 集群演进探讨和总结 Redis为什么需要集群? 首先Redis单实例主要有单点,容量有限,流量压力上限的问题。 Redis单点故障,可以通过主从复制replication,和自动故障转移sentinel哨兵机制。 但Redis单Master实例提供读写服务,仍然有容量和压力问题,因此需要数据分区,构建多个Master实例同时提供读写服务(不仅限于从replica节点提供读服务)。 那么就需要一定的机制保证数据分区。这样能充分把容量分摊到多台计算机,或能充分利用多核计算机的性能。 并且数据在各个主Master节点间不能混乱,当然最好还能支持在线数据热迁移的特性。 探讨数据分区方案 针对数据分区,一般来说,分为两个大类: 逻辑拆分: 逻辑上能拆分,比如 Redis 中的 M1 节点 存储 A服务需要的业务数据,而 Redis 中的 M2 节点存储 B服务需要的业务数据。 数据分区: 当逻辑上不能拆分,那么只能按数据来拆分,需要保证客户端读和写数据一致。 因此需要一个高效快速的数据结构来路由对应的Master节点。 最容易想到的就是类比 Java 中的 HashMap, 采用 哈希算法,快速找到,快速设置。 这里有四种方式,分别是固定取模,随机,哈希一致性,哈希槽。 固定取模 假设有三个 Master,配置IP 和权重如下: Real Server IP weight 10

Redis常见面试题

隐身守侯 提交于 2020-08-08 19:00:39
http://jasontec.cn/articles/2019/12/20/1576826633007.html 介绍:Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API的非关系型数据库。 传统数据库遵循 ACID 规则。而 Nosql(Not Only SQL 的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称) 一般为分布式而分布式一般遵循 CAP 定理。 Github 源码:https://github.com/antirez/redis Redis 官网:https://redis.io/ Redis支持的数据类型? String字符串: 格式: set key value string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。 string类型是Redis最基本的数据类型,一个键最大能存储512MB。 Hash(哈希) 格式: hmset name key1 value1 key2 value2 Redis hash 是一个键值(key=>value)对集合。 Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。 List(列表)

Redis 集群演进探讨和总结

吃可爱长大的小学妹 提交于 2020-08-05 13:56:27
Redis为什么需要集群? 首先Redis单实例主要有单点,容量有限,流量压力上限的问题。 Redis单点故障,可以通过主从复制 replication ,和自动故障转移 sentinel 哨兵机制。 但Redis单 Master 实例提供读写服务,仍然有容量和压力问题,因此需要数据分区,构建多个 Master 实例同时提供读写服务(不仅限于从 replica 节点提供读服务)。 那么就需要一定的机制保证数据分区。这样能充分把容量分摊到多台计算机,或能充分利用多核计算机的性能。 并且数据在各个主Master节点间不能混乱,当然最好还能支持在线数据热迁移的特性。 探讨数据分区方案 针对数据分区,一般来说,分为两个大类: 逻辑拆分: 逻辑上能拆分,比如 Redis 中的 M1 节点 存储 A服务需要的业务数据,而 Redis 中的 M2 节点存储 B服务需要的业务数据。 数据分区: 当逻辑上不能拆分,那么只能按数据来拆分,需要保证客户端读和写数据一致。 因此需要一个高效快速的数据结构来路由对应的 Master 节点。 最容易想到的就是类比 Java 中的 HashMap , 采用 哈希算法,快速找到,快速设置。 这里有四种方式,分别是固定取模,随机,哈希一致性,哈希槽。 固定取模 假设有三个 Master,配置IP 和权重如下: Real Server IP weight 10.0.2

Redis 集群演进探讨和总结

坚强是说给别人听的谎言 提交于 2020-07-28 08:47:24
Redis为什么需要集群? 首先Redis单实例主要有单点,容量有限,流量压力上限的问题。 Redis单点故障,可以通过主从复制 replication ,和自动故障转移 sentinel 哨兵机制。 但Redis单 Master 实例提供读写服务,仍然有容量和压力问题,因此需要数据分区,构建多个 Master 实例同时提供读写服务(不仅限于从 replica 节点提供读服务)。 那么就需要一定的机制保证数据分区。这样能充分把容量分摊到多台计算机,或能充分利用多核计算机的性能。 并且数据在各个主Master节点间不能混乱,当然最好还能支持在线数据热迁移的特性。 探讨数据分区方案 针对数据分区,一般来说,分为两个大类: 逻辑拆分: 逻辑上能拆分,比如 Redis 中的 M1 节点 存储 A服务需要的业务数据,而 Redis 中的 M2 节点存储 B服务需要的业务数据。 数据分区: 当逻辑上不能拆分,那么只能按数据来拆分,需要保证客户端读和写数据一致。 因此需要一个高效快速的数据结构来路由对应的 Master 节点。 最容易想到的就是类比 Java 中的 HashMap , 采用 哈希算法,快速找到,快速设置。 这里有四种方式,分别是固定取模,随机,哈希一致性,哈希槽。 固定取模 假设有三个 Master,配置IP 和权重如下: Real Server IP weight 10.0.2

redis系列之——一致性hash算法

时间秒杀一切 提交于 2020-07-27 15:50:32
一致性hash算法你了解吗?什么时候使用?解决什么问题?redis集群模式使用了一致性hash算法了吗? 数据分片(sharding) 分布式数据存储时,经常要考虑数据分片,避免将大量的数据放在单表或单库中,造成查询等操作的耗时过长。比如,存储订单数据时使用三个mysql库(编号0,1,2),当一条订单数据过来时,对订单id求hash后与机器数量取模,hash(orderId) % 3,假如得到的结果是2,则这条数据会存储到编号为2的mysql中。分表分库存储时,根据数据库的主键或唯一键做hash,然后跟数据库机器的数量取模,从而决定该条数据放在哪个库中。 根据机器数量取模就会存在一个问题,当机器不够用需要扩容或机器宕机,机器的数量就会发生变化,造成数据的命中率下降,所以之前的数据就需要重新hash做一次sharding。这种操作会导致服务在一定的时间不可用,而且每次扩缩容都会存在这个问题。 一致性hash 一致性hash算法主要应用于分布式存储系统中,可以有效地解决分布式存储结构下普通余数Hash算法带来的伸缩性差的问题,可以保证在动态增加和删除节点的情况下尽量有多的请求命中原来的机器节点。 Hash环 一致性Hash算法也是使用取模的方法,只是,刚才描述的取模法是对服务器的数量进行取模,而一致性Hash算法是对2^ 32-1取模,什么意思呢简单来说

史上最全Redis面试题及答案

纵然是瞬间 提交于 2020-04-28 23:18:51
1、什么是Redis? 2、Redis相比memcached有哪些优势? 3、Redis支持哪几种数据类型? 4、Redis主要消耗什么物理资源? 5、Redis的全称是什么? 6、Redis有哪几种数据淘汰策略? 7、Redis官方为什么不提供Windows版本? 8、一个字符串类型的值能存储最大容量是多少? 9、为什么Redis需要把所有数据放到内存中? 10、Redis集群方案应该怎么做?都有哪些方案? 11、Redis集群方案什么情况下会导致整个集群不可用? 12、MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据? 13、Redis有哪些适合的场景? 14、Redis支持的Java客户端都有哪些?官方推荐用哪个? 15、Redis和Redisson有什么关系? 16、Jedis与Redisson对比有什么优缺点? 17、Redis如何设置密码及验证密码? 18、说说Redis哈希槽的概念? 19、Redis集群的主从复制模型是怎样的? 20、Redis集群会有写操作丢失吗?为什么? 21、Redis集群之间是如何复制的? 22、Redis集群最大节点个数是多少? 23、Redis集群如何选择数据库? 24、怎么测试Redis的连通性? 25、Redis中的管道有什么用? 26、怎么理解Redis事务? 27

StackExchange.Redis 官方文档(二) Configuration

不羁岁月 提交于 2020-04-24 05:03:24
原文: StackExchange.Redis 官方文档(二) Configuration 配置 有多种方式可以配置redis,StackExchange.Redis提供了一个丰富的配置模型,在执行 Connect (or ConnectAsync ) 时被调用: var conn = ConnectionMultiplexer.Connect(configuration); 这里的 configuration 可以是一下类型当中的任意一项: 一个 ConfigurationOptions 实例 一个包含配置数据的字符串 后者基本上是前者的字符串形式 基本的配置字符串 最简单 的例子就是只包含主机的名称: var conn = ConnectionMultiplexer.Connect("localhost"); 这样就会链接到部署在本地机器上使用默认端口(6379)的单服务器。其余的配置选项只需要拼接在后面(要用逗号分隔).端口之前通常使用分号( : )分隔。配置 选项 在名称后边有一个 = 。示例: var conn = ConnectionMultiplexer.Connect("redis0:6380,redis1:6380,allowAdmin=true"); string 和 ConfigurationOptions 之间的映射在下面有详细的概述