Redis Cluster

单机部署redis5.0集群环境

浪子不回头ぞ 提交于 2020-12-29 11:25:16
#安装redis cd redis-5.0.0 make make install #部署集群 mkdir redis_cluster mkdir -p redis_cluster/{7000,7001,7002,7003,7004,7004,7005} #设置配置文件 protected-mode no port 7000 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize yes supervised no pidfile /var/run/redis_7000.pid loglevel notice logfile "" databases 16 always-show-logo yes save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb dir ./ replica-serve-stale-data yes replica-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 repl-disable-tcp-nodelay no replica

Redis平滑升级

牧云@^-^@ 提交于 2020-12-26 17:05:53
先下载新版redis wget http://download.redis.io/releases/redis-6.0.5.tar.gz 解压 tar -zxvf redis-6.0.5.tar.gz 因为我将redis.conf 和 redis-6.0.5 解压后的文件夹分开放的所以不用动直接将redis干掉 注:如果将redis.conf放在了旧的redis-5.0.5目录在一起,你需要将redis_cluster这个目录移出来,编译好后放到redis-6.0.5新版目录中 pkill redis-server 查看下是否干掉了 ps -ef | grep redis 进到存活的服务器里查看集群状态,这个时候集群已经显示有个别redis挂了 redis-cli -c -h (你的reids服务器ip) -p 7001 -a "密码" cluster nodes 更新gcc因为6版本以上的redis需要新版gcc yum -y install gcc sudo yum install -y centos-release-scl sudo yum install -y devtoolset-7 sudo scl enable devtoolset-7 bash 直接进入文件夹编译 cd redis-6.0.9 make && make install 编译成功会提示: Hint:

Redis6安装(下)

生来就可爱ヽ(ⅴ<●) 提交于 2020-12-25 09:13:10
Redis6安装(下) - 集群与故障转移 Redis Cluster 搭建准备工作 搭建集群之前,务必有一点需要注意就是选举,因为在如今很多的分布式中间件里,集群都会有选举这个概念,一定要达到半数以上的节点,才能够发起公平的投票,否则就会脑裂,比如redis,zk,es等,所以至少保证3个master节点,master会发起选举投票的。这一点要须知。 配置6个节点的虚拟机(预先做好) 192.168.1.221 192.168.1.222 192.168.1.223 192.168.1.224 192.168.1.225 192.168.1.226 192.168.1.227(新增Master) 192.168.1.228(新增Slave) 每个节点搭建单机redis,清理aof和rdb文件(预先做好) 如果为单实例的Redis设置了密码password,那么每个节点都必须要设置masterauth,也就是对应密码,这样是为了master挂掉以后,对应的slave可以升级为master。 需要注意,选举的过程会短暂的对外不可用。 Redis Cluster 搭建实操演练 附: 关闭redis ./redis-cli -p <修改的端口号> -a <修改的密码> shutdown 开启redis: ./redis-server redis.conf 每个单实例中的 redis

程序员必看的Redis6.0多线程性能测试结果及分析 你懂了嘛?

末鹿安然 提交于 2020-12-24 15:09:50
单线程的Redis一向以简洁高效著称,但也有其阿喀琉斯之踵:阻塞!单个线程在最容易产生瓶颈的网络读写(Redis的key)请求完成之前,其他所有请求都将会被阻塞,严重影响其效率,因此Redis的多线程呼声就越来越高。由于是基于内存的操作延迟非常低,所以即便是单线程模式下CPU资源也不会是的瓶颈。最容易出现瓶颈的还是网络IO操作。在Redis 6.0开始支持多线程之后,所谓的多线程也只是socket层面的多线程,核心的内存读写还是单线程模式。 弄清楚了多线程的本质之后,就会有一系列的问题,多线程会比单线程有多大的提升?设置多少个线程合适?见一些大神测试过,其结果也非常理想,但只是看看也不太过瘾,决定一试为快,本文将对Redis的多线程进行一个粗浅的测试验证。同时需要思考另外一个问题:面对多线程版本的Redis,和Redis cluster,该如何选择? 多线程Redis redis 6.0 的“多线程”特性让很多标题党高潮连连,参考图片源自于:美图技术团队侵删,核心的线程(Execute Command)还是单线程,多线程是指网络IO(socket)读写的多线程化。 如下图所示,读写网络socket中的数据是可以用多个线程,所以Redis的多线程也叫做io thread,相关参数:“io-threads”。另一个参数是io-threads-do-reads,这里涉及另外一个细节

windows-redis 集群搭建

无人久伴 提交于 2020-12-24 09:06:04
Windows 配置Reids集群 Redis Cluster 1. 下载安装Redis Redis官方不支持Windows,但是Microsoft Open Tech group在 GitHub上开发了一个Win64的版本,下载地址为: https://github.com/MSOpenTech/redis/releases 解压之后,拷贝到自定义的Redis目录下,例如D:\dev\Redis 打开cmd,切换到Redis目录下,执行 redis-server redis.windows.conf 1 2 窗口不要关闭,再重新打开一个cmd窗口,连接Redis执行 redis-cli.exe -h 127.0.0.1 -p 6379 1 2 2. 安装Ruby并配置环境 安装Ruby,Windows可以安装RubyInstaller,下载地址: http://railsinstaller.org/en 一直下一步安装完成会自动弹出一个cmd的黑色窗口,需要对Ruby进行配置 执行 gem install redis 出现 SSL Connect error时,是因为ruby 没有包含 SSL 证书,所以 https 的链接被服务器拒绝。 解决方法很简单,首先在这里下载证书 http://curl.haxx.se/ca/cacert.pem , 然后再环境变量里设置 SSL

Redis:从应用到底层,一文帮你搞定

£可爱£侵袭症+ 提交于 2020-12-23 10:47:25
Python实战社群 Java实战社群 长按识别下方二维码, 按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群 ▲ 作者丨sowhat1412 来源丨sowhat1412(ID:sowhat9094) 高清思维导图已同步Git:https://github.com/SoWhat1412/xmindfile,关注公众号sowhat1412获取海量资源 总感觉哪里不对,但是又说不上来 1、基本类型及底层实现 1.1、String 用途: 适用于简单key-value存储、setnx key value实现分布式锁、计数器(原子性)、分布式全局唯一ID。 底层 :C语言中String用char[]数组表示,源码中用 SDS (simple dynamic string)封装char[],这是是Redis存储的 最小单元 ,一个SDS最大可以存储512M信息。 struct sdshdr{ unsigned int len; // 标记char[]的长度 unsigned int free; //标记char[]中未使用的元素个数 char buf[]; // 存放元素的坑 } Redis对SDS再次封装生成了 RedisObject ,核心有两个作用: 说明是5种类型哪一种。 里面有指针用来指向 SDS。 当你执行 set name sowhat

关于redis

牧云@^-^@ 提交于 2020-12-19 12:24:10
一.什么是redis? Redis 是一个基于内存的高性能key-value数据库。 nosql 单线程 单进程的 支持事务 二.redis 数据类型: string list hash set hset 三.redis的优缺点 优点: 1.速度快,数据存在内存中 2.有丰富的数据类型,应用场景广泛 可用于缓存 消息 缺点: 1.受物理内存的限制 四.redis 应用场景: 1.会话缓存 2.全页缓存 3.队列 提供list 和set 的操作 push pop操作 4.排行榜 计数器 五.为什么redis 把所有数据放到内存中? (为了快的读写速度) redis 为了最快的读写速度都读到内存中,并通过异步的方式将数据写入磁盘。如果不放入内存中,磁盘的io读写速度会影响redis 性能。 六. redis分布式锁 1.先拿setnx 来争夺锁,抢到之后 再用expire 给锁加一个过期时间防止锁忘记释放 若expire 命令 执行时出错,这个锁就会变成死锁,不被释放 解决方法 : set 命令有复杂的参数 可以把setnx expire合成一条命令 redis.set(String key, String value, String nxxx, String expx, int time) ,这个set()方法一共有五个形参: 第一个为key,我们使用key来当锁,因为key是唯一的

Redis基础、高级特性与性能调优

。_饼干妹妹 提交于 2020-12-18 05:04:51
本文将从Redis的基本特性入手,通过讲述Redis的数据结构和主要命令对Redis的基本能力进行直观介绍。之后概览Redis提供的高级能力,并在部署、维护、性能调优等多个方面进行更深入的介绍和指导。 本文适合使用Redis的普通开发人员,以及对Redis进行选型、架构设计和性能调优的架构设计人员。 目录 概述 Redis的数据结构和相关常用命令 数据持久化 内存管理与数据淘汰机制 Pipelining 事务与Scripting Redis性能调优 主从复制与集群分片 Redis Java客户端的选择 概述 Redis是一个开源的,基于内存的结构化数据存储媒介,可以作为数据库、缓存服务或消息服务使用。 Redis支持多种数据结构,包括字符串、哈希表、链表、集合、有序集合、位图、Hyperloglogs等。 Redis具备LRU淘汰、事务实现、以及不同级别的硬盘持久化等能力,并且支持副本集和通过Redis Sentinel实现的高可用方案,同时还支持通过Redis Cluster实现的数据自动分片能力。 Redis的主要功能都基于单线程模型实现,也就是说Redis使用一个线程来服务所有的客户端请求,同时Redis采用了非阻塞式IO,并精细地优化各种命令的算法时间复杂度,这些信息意味着: Redis是线程安全的(因为只有一个线程),其所有操作都是原子的,不会因并发产生数据异常

Spring Boot 集成Spring Data

夙愿已清 提交于 2020-12-16 23:31:39
参考文档: Reference 30.Working with NoSQL Technologies (使用NoSQL技术) Spring Data 提供额外的模块帮助你接入各种各样的NoSQL技术,有MongoDB,Neo4J,ElasticSearch,Solr,Redis,Gemfire,Cassandra,Couchbase 还有 LDAP。Spring Boot 为上面的中间件提供自动配置文件。你可以使用它们,但是必须自己配置。请参考Spring-Data相关文档 Spring Boot Data Reference 。 30.1 Redis ( Reference_2.0.3.RELEASE ) Redis 集群安装 参考:https://www.cnblogs.com/yuanermen/p/5717885.html Error 4 Ruby required >= 2.2.2 https://blog.csdn.net/lixwjava/article/details/50408070 1.New Features 这一节简要的介绍了各个在新版本特性和要注意的方面。(1.5>1.6>1.7>1.8>2.0新特性) Spring Data Redis 1.8中的新功能 < 5/6/7 略> Jedis更新到2.9 Lettuce更新到4.2(JDK 版本最低 1.8)

redis缓存与数据一致性

核能气质少年 提交于 2020-12-14 22:38:12
[TOC] 缓存 redis除了可以作为db存储用,还有一些场景是做二级缓存(比如mysql+redis或者mysql+memcached),所以这里总结下作为缓存时需要考虑的一些问题及解决方案 缓存穿透 名词解释:即黑客故意去请求缓存中不存在的数据,导致所有的请求都怼到数据库上,从而数据库连接异常。 解决方案: (一)利用互斥锁,缓存失效的时候,先去获得锁,得到锁了,再去请求数据库。没得到锁,则休眠一段时间重试 (二)采用异步更新策略,无论key是否取到值,都直接返回。value值中维护一个缓存失效时间,缓存如果过期,异步起一个线程去读数据库,更新缓存。需要做缓存预热(项目启动前,先加载缓存)操作。 (三)提供一个能迅速判断请求是否有效的拦截机制,比如,利用布隆过滤器,内部维护一系列合法有效的key。迅速判断出,请求所携带的Key是否合法有效。如果不合法,则直接返回。 缓存雪崩(缓存失效) 名词解释:即缓存同一时间大面积的失效,这个时候又来了一波请求,结果请求都怼到数据库上,从而导致数据库连接异常。 解决方案: (一)给缓存的失效时间,加上一个随机值,避免集体失效。 (二)使用互斥锁,但是该方案吞吐量明显下降了。 (三)双缓存。我们有两个缓存,缓存A和缓存B。缓存A的失效时间为20分钟,缓存B不设失效时间。自己做缓存预热操作。然后细分以下几个小点 ● I 先从缓存A读数据