redis整合Spring集群搭建及业务中的使用
1.redis安装
Redis是c语言开发的。
安装redis需要c语言的编译环境。如果没有gcc需要在线安装。yum install gcc-c++
安装步骤:
第一步:redis的源码包上传到linux系统。
第二步:解压缩redis。
第三步:编译。进入redis源码目录。make
第四步:安装。make install PREFIX=/usr/local/redis
PREFIX参数指定redis的安装目录。一般软件安装到/usr目录下
详细安装步骤,以及后台运行的配置 点此 linux上安装redis
2.Redis-cli 客户端连接redis
找到安装redis的文件夹中的bin目录.执行以下命令
[root@localhost bin]# ./redis-cli
默认连接localhost运行在6379端口的redis服务。
[root@localhost bin]# ./redis-cli -h 192.168.25.153 -p 6379
-h:连接的服务器的地址
-p:服务的端口号
关闭redis:[root@localhost bin]# ./redis-cli shutdown
3.Redis五种数据类型
redis五种数据类型及命令操作 点此reids基本命令
4.Redis的持久化方案
redis持久化方法点此 redis持久化方案
5.Redis集群的搭建
5.1 redis-cluster架构图
redis的每个节点上都保存有其他节点的信息,并且相互通信,客户端连接集群时,随机连接
5.2redis-cluster投票:容错
1. redis每个节点之间每隔一段时间就会相互的ping一下,对方收到ping后会回复pong,如上图,如果黄色的节点ping红色的节点时,红色节点没给回复,黄色节点就会以为红色节点已经挂了,接着其他节点去ping红色节点,如果多数节点没有收到回信,则判断红色节点已挂,投票容错就这样.
2. 因为redis的投票容错机制,所以redis的集群至少应该有三个及以上的节点
3.Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点如下图,所以理论上redis的节点可以有16384个
5.3. Redis集群的搭建
Redis集群中至少应该有三个节点。要保证集群的高可用,需要每个节点有一个备份机。 redis主从复制 如果使用ruby搭建redis集群,从节点不用手动配置,ruby会自动分配
Redis集群至少需要6台服务器(3台是主节点,3台是对应的备份节点)。
搭建伪分布式。可以使用一台虚拟机运行6个redis实例。需要修改redis的端口号7001-7006
5.3.1. 集群搭建环境
1、使用ruby脚本搭建集群。需要ruby的运行环境。
安装ruby
yum install ruby
yum install rubygems
2、安装ruby脚本运行使用的包。
[root@localhost ~]# gem install redis-3.0.0.gem
Successfully installed redis-3.0.0
1 gem installed
Installing ri documentation for redis-3.0.0...
Installing RDoc documentation for redis-3.0.0...
[root@localhost ~]#
在redis解压文件夹的src目录下有一个redis-trib.rb文件之后需要用
[root@localhost ~]# cd redis-3.0.0/src
[root@localhost src]# ll *.rb
-rwxrwxr-x. 1 root root 48141 Apr 1 2015 redis-trib.rb
5.3.1. 搭建步骤
需要6台redis服务器。搭建伪分布式。
需要6个redis实例。
需要运行在不同的端口7001-7006
第一步:创建6个redis实例,将我们之前安装的redis中的bin目录拷贝六份,并改好名称.修改每个实例运行的端口。需要修改redis.conf配置文件。配置文件中还需要把cluster-enabled yes前的注释去掉(表示是支持集群)。
第二步:启动每个redis实例。这里可以创建一个sh脚本,运行脚本来启动六个redis
脚本内容如下
.
第三步:使用ruby脚本搭建集群。将redis解压文件夹的src目录下有一个redis-trib.rb文件复制到我们放redis集群的文件夹中,使用以下命令
--replicas 1 表示每个节点有一个备份机
./redis-trib.rb create --replicas 192.168.25.153: 192.168.25.153: 192.168.25.153: 192.168.25.153: 192.168.25.153: 192.168.25.153:
ruby搭建集群命令
运行命令后
aaarticlea/png;base64,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" alt="" />
6. 集群的使用方法
redis连接集群(单机版的不用加参数 -c)
[root@localhost redis-cluster]# redis01/redis-cli -p -c
-c:代表连接的是redis集群
redis连接redis单机版和集群版,点此 redis连接redis单机版和集群版
7.业务中使用redis进行缓存
redis不适用于大数据,适用于高并发的程序
1.查询内容列表时添加缓存。
1、查询数据库之前先查询缓存。
2、查询到结果,直接响应结果。
3、查询不到,缓存中没有需要查询数据库。
4、把查询结果添加到缓存中。
5、返回结果。
一般都使用hash数据类型,使用hash时,可以将保存的内容进行归类
INDEX_CONTENT分类
cid hash的字段
JsonUtils.objectToJson(tbContents) cid对应的值
jedisClient.hset(INDEX_CONTENT,cid+"", JsonUtils.objectToJson(tbContents));
2.缓存同步
我们在对数据库进行增删改的时候缓存中的数据没有变化,显然这种情况下,下一次查询出来的数据肯定错误,所以需要对缓存进行同步
对内容信息做增删改操作后只需要把对应缓存删除即可。
可以根据我们hash的字段来删除对应的缓存。
redis整合Spring集群搭建及业务中的使用的更多相关文章
- Redis 3.0 集群搭建
Redis 3.0 集群搭建 开启两个虚拟机 分别在两个虚拟机上开启3个Redis实例 3主3从两个虚拟机里的实例互为主备 下面分别在两个虚拟机上安装,网络设置参照codis集群的前两个主机 分别关闭 ...
- Redis 5.0 集群搭建
Redis 5.0 集群搭建 单机版的 Redis 搭建 https://www.jianshu.com/p/b68e68bbd725 /usr/local/目录 mkdir redis-cluste ...
- Redis操作及集群搭建以及高可用配置
NoSQL - Redis 缓存技术 Redis功能介绍 数据类型丰富 支持持久化 多种内存分配及回收策略 支持弱事务 支持高可用 支持分布式分片集群 企业缓存产品介绍 Memcached: 优点:高 ...
- Redis 3.0集群搭建/配置/FAQ
·声明 1,已官网中文教程为基础,边看边学,结合环境现状搭建. 2,哥对Ruby不热爱.不熟悉.不感冒,所述内容如有疑义请谅解. 3,3.0官说集群还在测试中,其实用用也还算马马虎虎,对外集群API真 ...
- Redis进阶实践之十一 Redis的Cluster集群搭建
一.引言 本文档只对Redis的Cluster集群做简单的介绍,并没有对分布式系统的详细概念做深入的探讨.本文只是提供了有关如何设置集群.测试和操作集群的说明,而不涉及Redis集群规范中涵 ...
- 超详细的 Redis Cluster 官方集群搭建指南
今天从 0 开始搭建 Redis Cluster 官方集群,解决搭建过程中遇到的问题,超详细. 安装ruby环境 因为官方提供的创建集群的工具是用ruby写的,需要ruby2.2.2+版本支持,rub ...
- linux Redis 5.0集群搭建
文档结构如下: Redis cluster 是redis的分布式解决方案,在3.0版本正式推出后,有效的解决了redis分布式方面的需求:当遇到单机内存,并发,流量等瓶颈是,可以采用cluster架构 ...
- redis主从和集群搭建
主从搭建 redis的主从搭建非常简单,打开配置文件6379.conf,只需要将主节点的protected-mode设置为no,然后在从节点配置中加入:slaveof <masterip> ...
- Redis主从&哨兵集群搭建
主从集群 在搭建主从集群前,我们先把Redis安装起来: #解压Redis压缩包 [root@master lf]# tar -zxvf redis-6.2.1.tar.gz -- #安装gcc [r ...
随机推荐
- HR_Jumping on the Clouds
1.没有考虑i+2越界的问题 2.没有考虑结尾三个零导致 -5 3.没有考虑len(c)<2 导致 -5 #!/bin/python3 import math import os import ...
- p1184高手之在一起
P1184 题目背景 高手是可以复活的,这点我们大家都知道. 题目描述 高手列出了一个详尽的日程表,这次他要追求的则是一个心灵纯洁的小萝莉.他和她都是要上课的,但是也会有时间空闲,于是高手决定无时无刻 ...
- 闲聊javascript继承和原型
javascript继承已经是被说烂的话题了,我就随便聊一点~ 一.javascript的复制继承 javascript的继承有复制继承和原型继承,基于复制继承用的不太多,而且无法通过instance ...
- 编写高质量代码:改善Java程序的151个建议 --[26~36]
提防包装类型的null值 public static int testMethod(List<Integer> list) { int count = 0; for (Integer i ...
- JQuery选择器,事件,DOM操作,动画
JQuery是一个JavaScript代码库,或者是JavaScript框架: 1.选择器:(和CSS选择器一致) 基本选择器:ID选择器$('#div1');Class选择器('.div1');标签 ...
- 洛谷P1196 银河英雄传说
大意:你有30000个队列,第i个队列中只有i 有T个操作,1,把某个队列头接到另一个队列尾. 2,问两个元素之间的距离. 本题主要有三种解法. ①带权并查集. 具体来说就是,并查集维护当前集合的大小 ...
- 关于Nginx负载均衡的5种策略
nginx的upstream目前支持的5种方式的分配 1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. upstream backserver { ...
- 异步ztree 加复选框 及相应后台处理
异步加载 tree,点一下节点,就发一下请求到后台,然后显示出得到的当前层级节点 <!DOCTYPE html> <html> <head> <meta ch ...
- jmeter的介绍和使用二
三. 1.http的请求默认值 当一个项目有多个模块,他们的host都是一致的,为了不重复的写host或者当某一天host变了,只需要修改一个地方就好.比如下面的两个请求,可以把host分离出来,所以 ...
- 【内核】Linux内核Initrd机制解析,内核更新步骤,grub配置说明
什么是Initrd initrd的英文含义是 boot loader initialized RAM disk,就是由boot loader初始化的内存盘.在 linux内核启动前, boot loa ...