当前位置: 澳门新濠3559 > 编程 > 正文

该图是连接本地redis并且向其中set类似于map集合《

时间:2019-10-07 13:09来源:编程
Redis是一个开源的行使ANSIC语言编写、补助互联网、可依靠内部存款和储蓄器亦可长久化的日志型、Key-Value数据库并提供多样语言的API。从二〇一〇年一月29日起,Redis的开支工作由VMwa

Redis是一个开源的行使ANSI C语言编写、补助互联网、可依靠内部存款和储蓄器亦可长久化的日志型、Key-Value数据库并提供多样语言的API。从二〇一〇年一月29日起,Redis的开支工作由VMware主持。从二零一二年一月底步,Redis的支付由Pivotal赞助。

Redis简介

Redis是用C语言开垦的二个开源的高质量键值对(key-value)数据库。它经过提供多样键值数据类型来适应差异场景下的仓储须要,近些日子结束Redis支持的键值数据类型如

下:

字符串类型(String)

哈希类型(hash)

列表类型(list)

聚焦类型(set)

逐步集中类型(zset)(sorted set)。

作用:

1、能够减轻数据库服务器压力。

2、升高品质

图片 1 

Redis简介

Redis是用C语言开垦的一个开源的高质量键值对(key-value)数据库。它经过提供种种键值数据类型来适应不一样景色下的蕴藏要求,这两天截止Redis帮助的键值数据类型如

下:

字符串类型(String)

哈希类型(hash)

列表类型(list)

会晤类型(set)

不改变聚集类型(zset)(sorted set)。

作用:

1、能够减轻数据库服务器压力。

2、升高质量

图片 2 

Java中Redis轻便入门,JavaRedis轻易入门

Redis是二个开源的,先进的 key-value 存款和储蓄可用于营造高质量,可增添的 Web 应用程序的应用方案。

Redis官方网网址是:

图片 3

Redis 有多少个首要使其分别别的众多竞争对手的表征:

  • Redis是完全在内存中保留数据的数据库,使用磁盘只是为着持久性指标; 
  • Redis相比较非常多键值数据存款和储蓄系统有相对丰盛的数据类型; 
  • Redis能够将数据复制到任性数量的从服务器中; 

redis是叁个key-value存款和储蓄系统。它扶助存款和储蓄的value类型相对越多,包蕴string、list(链表、set、zset(sorted set --有序集结)和hash。这一个数据类型都帮助push/pop、add/remove及取交集并集和差集及更丰裕的操作,并且那些操作都是原子性的。在此基础上,redis扶助种种分歧情势的排序。redis会周期性的把立异的数量写入磁盘大概把修改操作写入追加的记录文件,何况在此基础上落到实处了master-slave同步。

1、应用场景:

缓存(数据查询、短连接、新闻内容、商品内容等等)。(最多使用)

分布式集群架构中的session分离。

聊天室的在线好朋友列表。

任务队列。(秒杀、抢购、12306之类)

动用排名的榜单。

网址访谈计算。

多少过期管理(能够确切到纳秒)

Redis持久化方案

rdb:快速照相方式,将最近的景况保存起来,隔开分离时间修改

aof:命令行方式,将指令存入到aof文件之中,一秒保存数据。对数码安全性相比较高,西欧马质量相当差。

私下认可开启rdb格局。

1、应用场景:

缓存(数据查询、短连接、新闻内容、商品内容等等)。(最多利用)

布满式集群架构中的session分离。

聊天室的在线好朋友列表。

任务队列。(秒杀、抢购、12306之类)

动用排行的榜单。

网址访问总计。

多少过期管理(可以确切到微秒)

Redis长久化方案

rdb:快速照相方式,将眼下的气象保存起来,隔断时间修改

该图是连接本地redis并且向其中set类似于map集合《,列表类型(list)。aof:命令行方式,将指令存入到aof文件之中,一秒保存数据。对数码安全性比较高,西欧马质量相当不佳。

暗许开启rdb情势。

Redis优点

  • 老大急迅 : Redis是老大快的,每秒能够实践差十分少110000安装操作,81000个/每秒的读取操作。

  • 支撑增多的数据类型 : Redis援救最大大多开荒职员已经精通如列表,会集,可排序会集,哈希等数据类型。

    这使得在行使中很轻便化解的各类难点,因为大家知晓什么样难点管理利用哪一种数据类型更加好化解。

  • 操作都以原子的 : 全体 Redis 的操作都以原子,进而保险当八个客商同偶尔候做客 Redis 服务器获得的是立异后的值(最新值)。

  • MultiUtility工具:Redis是四个多职能实用工具,能够在无数如:缓存,音信传递队列中采纳(Redis原生支持公布/订阅),在应用程序中,如:Web应用程序会话,网址页面点击数等其余短暂的数量;

要在windows中安装redis:

  • 在官方网站中下载redis压缩包
  • 施行cmd命令找到redis的寄存目录,运维服务器端,如图:

图片 4

接下来再客商端也得以直接通过cmd命令连接,如图:

图片 5

该图是接连本地redis况且向个中set类似于map集合《“myKey”,“test”》。然后经过get方法赢得。

地方做了redis的牵线以及安装运转服务器以及连接之后,接下去首要教师一下在Java中如何行使,那也是现行反革命更为流行的一项技巧:

  • 第一在java中动用Redis,须求引进Redis驱动,正是jedis-2.1.0.jar,而以此jar包又依据于commons-pool-1.6.jar以及tomcat-redis-session-manager-1.2-tomcat-7.jar,所以我们最少需求以此八个jar包。
  • 第二步就是上边说的开发银行本地redis服务器。
  • 下一场在Java中经过驱动连接当地redis,如下: Jedis jedis = new Jedis("localhost");
  • 再就是为了测量试验连接成功足以向上图命令中那样插入keyvlaue值,如: jedis.set("myKey", "成功");然后决定台出口获取值:System.out.println("Redis key value :" jedis.get("myKey"));

到那简单redis在Java中就能够运用了,如需询问更加的多效果与利益,可查看中文api

ps:redis存在的低价就在于没有必要频仍的拜候数据库,当部分数量不会产生变化时可以一贯抬高到redis中,举个例子聊天一些历史记录等,类似于缓存,那样大大的进步了质量,作者建议在采用redis最棒组合着数据库一齐利用。下面复制一段代码是作者写的一段结合redis和数据库登录的小测验功用中的一段代码:

int user_id = 2;//用户id
String user_name;//用户名
if(jedis.hexists("user" user_id, "user_name")){//推断jedis中是不是留存"user" user_id哈希表而且value值为user_name
user_name =jedis.hget("user" user_id, "user_name");//假诺存在直接获得然后登录
System.out.println("接待来到Redis登录: " user_name);
}else{//假若不设有,则须求查询数据库判定顾客名密码是或不是准确,假诺存在则登入,何况将其新闻保存至redis
String sql = "select user_name from user_t where id = " user_id "";
try {
ResultSet rs = conn.createStatement().executeQuery(sql);
if(rs.next()){
jedis.hset("user" user_id, "user_name", rs.getString("user_name"));//保存至redis中
System.out.println("迎接来到MySql登录: " rs.getString("user_name"));
}else{
System.out.println("欢迎 注册");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

到那边三个好不轻便完整的redis轻巧入门就介绍完了。迎接相互学习。

Redis是叁个开源的,先进的 key-value 存储可用来创设高质量,可扩张的 Web 应用程序的缓慢解决方案。 Redi...

Redis 是二个高质量的key-value数据库。它提供了Java,C/C ,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客商端,使用很有利。

2、Redis数据库

图片 6 

图片 7 

数量:16

暗中认可使用数据库:db0

安装Redis链接密码

图片 8 

允许地方局域网连接

图片 9 

2、Redis数据库

图片 10 

图片 11 

数量:16

暗中同意使用数据库:db0

设置Redis链接密码

图片 12 

同意地点局域网连接

图片 13 

更详尽的牵线参见 百度百科:Redis

Redis搭建

1、安装c语言编写翻译器gcc

 

[root@localhost Desktop]# yum install gcc-c  

 

2、下载(上传)redis的源代码

2.1、解压

 

[root@localhost Desktop]# tar -zxvf redis-3.0.0.tar.gz

 

3、编译

 

[root@localhost Desktop]# cd redis-3.0.0

 

[root@localhost redis-3.0.0]# make

4、安装

进去编写翻译目录

 

[root@localhost Desktop]# cd src

 

编写翻译安装

 

[root@localhost src]# make install PREFIX=/usr/local/redis

 

PREFIX指虞诩装路线

Redis搭建

1、安装c语言编写翻译器gcc

 

[root@localhost Desktop]# yum install gcc-c  

 

2、下载(上传)redis的源代码

2.1、解压

 

[root@localhost Desktop]# tar -zxvf redis-3.0.0.tar.gz

 

3、编译

 

[root@localhost Desktop]# cd redis-3.0.0

 

[root@localhost redis-3.0.0]# make

4、安装

进去编译目录

 

[root@localhost Desktop]# cd src

 

编写翻译安装

 

[root@localhost src]# make install PREFIX=/usr/local/redis

 

PREFIX指虞诩装路线

redis近些日子在网络集团用的不得了比相当多,首要是当作内部存款和储蓄器数据库使用,常用的利用意况包蕴以下几有的:

3.4.3、Redis启动

3.4.3、Redis启动

  • 1、key-value数据库,比方短信验证码存款和储蓄,邮件验证链接存款和储蓄
  • 2、电商的购物车
  • 3、秒杀,首要依照Redis的原子操作
  • 4、session分享,首要用以web服务器集群间的session分享
  • 5、模拟队列,消息管理异步
  • 6、app端顾客意况存储
  • 7、。。。

1、前段运转格局

 

[root@localhost src]# cd /usr/local/redis/bin
[root@localhost bin]# ./redis-server

暗许运维端口号为6379端口

1、前段运营格局

 

[root@localhost src]# cd /usr/local/redis/bin
[root@localhost bin]# ./redis-server

默许运维端口号为6379端口

Redis的设置特别轻易,不光帮衬linux,还扶助window是,但是windows不建议生产条件下利用

后端运转格局

A、从redis的源码目录中复制redis.conf到redis的设置目录。

 

[root@localhost redis-3.0.0]# cp redis.conf /usr/local/redis/bin/

 

B、修改redis.conf配置文件

 

[root@localhost redis-3.0.0]# cd /usr/local/redis/bin/
[root@localhost redis-3.0.0]# vim redis.conf

 

图片 14 

C、启动

 

[root@localhost bin]# ./redis-server redis.conf

 

后端运转情势

A、从redis的源码目录中复制redis.conf到redis的安装目录。

 

[root@localhost redis-3.0.0]# cp redis.conf /usr/local/redis/bin/

 

B、修改redis.conf配置文件

 

[root@localhost redis-3.0.0]# cd /usr/local/redis/bin/
[root@localhost redis-3.0.0]# vim redis.conf

 

图片 15 

C、启动

 

[root@localhost bin]# ./redis-server redis.conf

 

  • windows安装
  • linux安装

3.4.4、查询Redis进程

 

[root@localhost bin]# ps aux|grep redis

 

3.4.4、查询Redis进程

 

[root@localhost bin]# ps aux|grep redis

 

windows安装的时候依据操作系统选择叁12人仍旧62人的

3.4.5、关闭Redis进程

 

[root@localhost bin]# ./redis-cli -p 6379 shutdown

3.4.6、Redis基本命令

 

[root@localhost bin]# ./redis-cli
127.0.0.1:6379> set a 10
OK
127.0.0.1:6379> get a
"10"
127.0.0.1:6379> incr a
(integer)11
127.0.0.1:6379> decr a
(integer)10
127.0.0.1:6379> del a
(integer)1
127.0.0.1:6379> keys 
(empty list or set)

 

图片 16 

3.4.5、关闭Redis进程

 

[root@localhost bin]# ./redis-cli -p 6379 shutdown

3.4.6、Redis基本命令

 

[root@localhost bin]# ./redis-cli
127.0.0.1:6379> set a 10
OK
127.0.0.1:6379> get a
"10"
127.0.0.1:6379> incr a
(integer)11
127.0.0.1:6379> decr a
(integer)10
127.0.0.1:6379> del a
(integer)1
127.0.0.1:6379> keys 
(empty list or set)

 

图片 17 

Redis的图形化工具依旧很多的,首要为新手提供一个福利。通常生育保障中是不会用图形化学工业具的。常见的图纸化学工业具备

Redis缓存集群

Redis缓存集群

  • 1、Redis Desktop Manager
  • 2、Redis Sdudio那七款稍微好有的,在数据量大时也一再假死,况兼不得不展现轻巧的数据类型,比方string,不帮助复杂数据类型。

集群原理

集群原理

添加redis依赖pom.xml

redis-cluster架构图

图片 18 

架构细节:

(1)全数的redis节点互相互联(PING-PONG机制),内部使用二进制合同优化传输速度和带宽.

(2)节点的fail是通过集群中中国足球球联赛越四分之二的节点检查测量检验失效时才生效.

(3)顾客端与redis节点直连,无需中间proxy层.客商端无需一而再集群具备节点,连接集群中任何多个可用节点就可以

(4)redis-cluster把装有的概略节点映射到[0-16383]slot上,cluster 负担维护node<->slot<->value

Redis 集群中贮存了 16384 个哈希槽,当须求在 Redis 集群中放置二个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结实,然后把结果对 16384 求余数,那样各类 key 都会相应一个号码在 0-16383 之间的哈希槽,redis 会依据节点数量概略均等的将哈希槽映射到分歧的节点

redis-cluster架构图

图片 19 

架构细节:

(1)全数的redis节点相互互联(PING-PONG机制),内部使用二进制公约优化传输速度和带宽.

(2)节点的fail是经过集群中中国足球球联赛过四分之二的节点检查测量试验失效时才生效.

(3)顾客端与redis节点直连,没有需求中间proxy层.顾客端不必要一连集群具备节点,连接集群中任何三个可用节点就可以

(4)redis-cluster把持有的情理节点映射到[0-16383]slot上,cluster 担当维护node<->slot<->value

Redis 集群中贮存了 16384 个哈希槽,当必要在 Redis 集群中放置二个 key-value 时,redis 先对 key 使用 crc16 算法算出三个结出,然后把结果对 16384 求余数,那样各种 key 都会相应多个数码在 0-16383 之间的哈希槽,redis 会依照节点数量大致均等的将哈希槽映射到差别的节点

 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency>

redis-cluster投票:容错

 图片 20

(1)领着投票进程是集群中颇有master插足,假使超过二分之一master节点与master节点通讯超过(cluster-node-timeout),以为近日master节点挂掉.

(2):曾几何时整个集群不可用(cluster_state:fail)? 

    a:如若集群任性master挂掉,且当前master未有slave.集群走入fail状态,也足以知晓成集群的slot映射[0-16383]不完了时步向fail状态. ps : redis-3.0.0.rc1插足cluster-require-full-coverage参数,暗中认可关闭,张开集群宽容部分退步.

    b:假如集群超越超过半数master挂掉,无论是还是不是有slave集群步向fail状态.

  ps:当集群不可用时,全数对集群的操作做都不可用,收到((error) CLUSTE福特ExplorerDOWN The cluster is down)错误

redis-cluster投票:容错

 图片 21

(1)领着投票进度是集群中有所master加入,要是大部分master节点与master节点通讯超过(cluster-node-timeout),以为当前master节点挂掉.

(2):何时任何集群不可用(cluster_state:fail)? 

    a:倘使集群自便master挂掉,且当前master未有slave.集群步向fail状态,也足以领略成集群的slot映射[0-16383]不做到时步向fail状态. ps : redis-3.0.0.rc1参加cluster-require-full-coverage参数,暗中认可关闭,打开集群包容部分失败.

    b:假如集群当先大部分master挂掉,无论是还是不是有slave集群步向fail状态.

  ps:当集群不可用时,全数对集群的操作做都不可用,收到((error) CLUSTETiggoDOWN The cluster is down)错误

java连接redis是通过jedis顾客端连接的。

集群情况搭建

Ruby是一种面向对象的编制程序语言,20世纪90年份马来人付出。

搭建集群须要选择到法定提供的ruby脚本。

急需安装ruby的景况。小编使用的是6台虚构机搭建的Redis集群

集群景况搭建

Ruby是一种面向对象的编制程序语言,20世纪90年份韩国人支付。

搭建集群需求采纳到法定提供的ruby脚本。

内需安装ruby的蒙受。作者使用的是6台设想机搭建的Redis集群

redis.properties配置文件

1、安装ruby

 

[root@localhost Desktop] yum install ruby
[root@localhost Desktop] yum install rubygems

2、redis集群管理工科具

 

[root@localhost Desktop]# cd redis-3.0.0/src/
[root@localhost src]# ll *.rb
-rwxrwxr-x. 1 root root 48141 Apr  1  2015 redis-trib.rb

 

3、安装ruby和redis的接口程序

将redis-3.0.0.gem上传的到linux服务器

安装ruby

 

[root@localhost Desktop]# gem install redis-3.0.0.gem

 

1、安装ruby

 

[root@localhost Desktop] yum install ruby
[root@localhost Desktop] yum install rubygems

2、redis集群管理工科具

 

[root@localhost Desktop]# cd redis-3.0.0/src/
[root@localhost src]# ll *.rb
-rwxrwxr-x. 1 root root 48141 Apr  1  2015 redis-trib.rb

 

3、安装ruby和redis的接口程序

将redis-3.0.0.gem上传的到linux服务器

安装ruby

 

[root@localhost Desktop]# gem install redis-3.0.0.gem

 

redis.host=127.0.0.1redis.port=6379redis.database=redis.pass=redis.maxIdle=300redis.testOnBorrow=true

集群搭建

集群搭建

  • host指redis服务器ip
  • port指端口,默认6379
  • database指redis数据存款和储蓄的单元,从0-15,默许0
  • pass指连接redis服务器的密码,暗中认可是不需求密码的,假如设置密码后那地方就要求安装一下。
  • maxIdle指最大空闲数,数据库连接的最大空闲时间。当先空闲时间,数据库连接将被标志为不可用,然后被放飞
  • testOnBorrow在borrow一个jedis实例时,是或不是提前开展validate操作;要是为true,则赢得的jedis实例均是可用的

1.、在/usr/local下创建redis-cluster文件夹

 

[root@localhost ]# cd /usr/local
[root@localhost local]# mkdir redis-cluster
[root@localhost redis]# cd redis/

 

1.、在/usr/local下创建redis-cluster文件夹

 

[root@localhost ]# cd /usr/local
[root@localhost local]# mkdir redis-cluster
[root@localhost redis]# cd redis/

 

那中间只要设置host和port就足以访谈了。

2、将redis目录下的bin目录拷贝到/redis-cluster/redis文件下

 

[root@localhost redis]# cp -r bin ../redis-cluster/redis
[root@localhost redis]# cd ../redis-cluster/
[root@localhost redis-cluster]# ll
total 4
drwxr-xr-x. 2 root root 4096 Dec 21 20:04 redis
[root@localhost redis-cluster]# cd redis/
[root@localhost redis-cluster]# rm -f dump.rdb

 

2、将redis目录下的bin目录拷贝到/redis-cluster/redis文件下

 

[root@localhost redis]# cp -r bin ../redis-cluster/redis
[root@localhost redis]# cd ../redis-cluster/
[root@localhost redis-cluster]# ll
total 4
drwxr-xr-x. 2 root root 4096 Dec 21 20:04 redis
[root@localhost redis-cluster]# cd redis/
[root@localhost redis-cluster]# rm -f dump.rdb

 

JedisPoolUtil 连接池

3、修改redis-conf文件

 cluster-enabled yes那行撤除注释,开启redis_cluster

图片 22 

跻身redis源代码拷贝redis-trib.rb到/usr/local/redis-cluster/目录下

 

[root@localhost src]cp redis-trib.rb /usr/local/redis-cluster/

 

布局其余redis服务器略

 

[root@localhost src] ./redis-server redis.conf

 

4、成立集群

 

[root@localhost redis-cluster]# ./redis-trib.rb  create  --replicas  1  192.168.0.184:6379 192.168.0.109:6379  192.168.0.110:6379 192.168.0.114:6379  192.168.0.113:6379  192.168.0.102:6379
>>> Creating cluster
Connecting to node 192.168.0.184:6379: OK
Connecting to node 192.168.0.109:6379: OK
Connecting to node 192.168.0.110:6379: OK
Connecting to node 192.168.0.114:6379: OK
Connecting to node 192.168.0.113:6379: OK
Connecting to node 192.168.0.102:6379: OK
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.0.102:6379
192.168.0.109:6379
192.168.0.184:6379
Adding replica 192.168.0.113:6379 to 192.168.0.102:6379
Adding replica 192.168.0.114:6379 to 192.168.0.109:6379
Adding replica 192.168.0.110:6379 to 192.168.0.184:6379
M: 347129817247251ab9b89b6b985ce4193f68269f 192.168.0.184:6379
   slots:10923-16383 (5461 slots) master
M: 202807bf910b0fe350f7a990d84671120e4e7b9f 192.168.0.109:6379
   slots:5461-10922 (5462 slots) master
S: fd0bc6dca63e917298e697a1e0ccd90be3bedf5a 192.168.0.110:6379
   replicates 347129817247251ab9b89b6b985ce4193f68269f
S: 9b9affc04e7052c3be2c75fafb4561fea5abb3bc 192.168.0.114:6379
   replicates 202807bf910b0fe350f7a990d84671120e4e7b9f
S: 4beac51798f3790d0f59d967df713459a4bfc8bf 192.168.0.113:6379
   replicates 27b8a3175ce59f4d62e4894b5abe57c64ef3e860
M: 27b8a3175ce59f4d62e4894b5abe57c64ef3e860 192.168.0.102:6379
   slots:0-5460 (5461 slots) master
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join.....
>>> Performing Cluster Check (using node 192.168.0.184:6379)
M: 347129817247251ab9b89b6b985ce4193f68269f 192.168.0.184:6379
   slots:10923-16383 (5461 slots) master
M: 202807bf910b0fe350f7a990d84671120e4e7b9f 192.168.0.109:6379
   slots:5461-10922 (5462 slots) master
M: fd0bc6dca63e917298e697a1e0ccd90be3bedf5a 192.168.0.110:6379
   slots: (0 slots) master
   replicates 347129817247251ab9b89b6b985ce4193f68269f
M: 9b9affc04e7052c3be2c75fafb4561fea5abb3bc 192.168.0.114:6379
   slots: (0 slots) master
   replicates 202807bf910b0fe350f7a990d84671120e4e7b9f
M: 4beac51798f3790d0f59d967df713459a4bfc8bf 192.168.0.113:6379
   slots: (0 slots) master
   replicates 27b8a3175ce59f4d62e4894b5abe57c64ef3e860
M: 27b8a3175ce59f4d62e4894b5abe57c64ef3e860 192.168.0.102:6379
   slots:0-5460 (5461 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

 

 

 

3、修改redis-conf文件

 cluster-enabled yes那行裁撤注释,开启redis_cluster

图片 23 

进去redis源代码拷贝redis-trib.rb到/usr/local/redis-cluster/目录下

 

[root@localhost src]cp redis-trib.rb /usr/local/redis-cluster/

 

配置别的redis服务器略

 

[root@localhost src] ./redis-server redis.conf

 

4、创造集群

 

[root@localhost redis-cluster]# ./redis-trib.rb  create  --replicas  1  192.168.0.184:6379 192.168.0.109:6379  192.168.0.110:6379 192.168.0.114:6379  192.168.0.113:6379  192.168.0.102:6379
>>> Creating cluster
Connecting to node 192.168.0.184:6379: OK
Connecting to node 192.168.0.109:6379: OK
Connecting to node 192.168.0.110:6379: OK
Connecting to node 192.168.0.114:6379: OK
Connecting to node 192.168.0.113:6379: OK
Connecting to node 192.168.0.102:6379: OK
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.0.102:6379
192.168.0.109:6379
192.168.0.184:6379
Adding replica 192.168.0.113:6379 to 192.168.0.102:6379
Adding replica 192.168.0.114:6379 to 192.168.0.109:6379
Adding replica 192.168.0.110:6379 to 192.168.0.184:6379
M: 347129817247251ab9b89b6b985ce4193f68269f 192.168.0.184:6379
   slots:10923-16383 (5461 slots) master
M: 202807bf910b0fe350f7a990d84671120e4e7b9f 192.168.0.109:6379
   slots:5461-10922 (5462 slots) master
S: fd0bc6dca63e917298e697a1e0ccd90be3bedf5a 192.168.0.110:6379
   replicates 347129817247251ab9b89b6b985ce4193f68269f
S: 9b9affc04e7052c3be2c75fafb4561fea5abb3bc 192.168.0.114:6379
   replicates 202807bf910b0fe350f7a990d84671120e4e7b9f
S: 4beac51798f3790d0f59d967df713459a4bfc8bf 192.168.0.113:6379
   replicates 27b8a3175ce59f4d62e4894b5abe57c64ef3e860
M: 27b8a3175ce59f4d62e4894b5abe57c64ef3e860 192.168.0.102:6379
   slots:0-5460 (5461 slots) master
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join.....
>>> Performing Cluster Check (using node 192.168.0.184:6379)
M: 347129817247251ab9b89b6b985ce4193f68269f 192.168.0.184:6379
   slots:10923-16383 (5461 slots) master
M: 202807bf910b0fe350f7a990d84671120e4e7b9f 192.168.0.109:6379
   slots:5461-10922 (5462 slots) master
M: fd0bc6dca63e917298e697a1e0ccd90be3bedf5a 192.168.0.110:6379
   slots: (0 slots) master
   replicates 347129817247251ab9b89b6b985ce4193f68269f
M: 9b9affc04e7052c3be2c75fafb4561fea5abb3bc 192.168.0.114:6379
   slots: (0 slots) master
   replicates 202807bf910b0fe350f7a990d84671120e4e7b9f
M: 4beac51798f3790d0f59d967df713459a4bfc8bf 192.168.0.113:6379
   slots: (0 slots) master
   replicates 27b8a3175ce59f4d62e4894b5abe57c64ef3e860
M: 27b8a3175ce59f4d62e4894b5abe57c64ef3e860 192.168.0.102:6379
   slots:0-5460 (5461 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

 

 

 

public class JedisPoolUtil { private static String ADDR = "localhost"; //Redis的端口号 private static int PORT = 6379; //访问密码 private static String AUTH = "admin"; //可用连接实例的最大数目,默认值为8; //如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted。 private static int MAX_ACTIVE = 1024; //控制一个pool最多有多少个状态为idle的jedis实例,默认值也是8。 private static int MAX_IDLE = 200; //等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException; private static int MAX_WAIT = 10000; private static int TIMEOUT = 10000; //在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的; private static boolean TEST_ON_BORROW = true; private static JedisPool jedisPool = null; public static Properties properties = null; private static String confPath = "/redis.properties";//定义配置文件路径 /** * 初始化Redis连接池 */ static { try { InputStream is = RedisUtil.class.getResourceAsStream; properties = new Properties(); properties.load; MAX_IDLE = Integer.parseInt(properties.get("redis.maxIdle").toString; TEST_ON_BORROW = Boolean.parseBoolean(properties.get("redis.testOnBorrow").toString; ADDR = properties.get("redis.host").toString(); PORT = Integer.parseInt(properties.getProperty("redis.port")); JedisPoolConfig config = new JedisPoolConfig(); config.setMaxIdle; config.setTestOnBorrow(TEST_ON_BORROW); jedisPool = new JedisPool(config, ADDR, PORT, TIMEOUT); } catch (Exception e) { e.printStackTrace(); } } /** * 获取Jedis实例 * * @return */ public synchronized static Jedis getJedis() { try { if (jedisPool != null) { Jedis resource = jedisPool.getResource(); return resource; } else { return null; } } catch (Exception e) { e.printStackTrace(); return null; } } /** * 释放jedis资源 * * @param jedis */ public static void returnResource(final Jedis jedis) { if (jedis != null) { jedis.close(); } }}

4、测量试验Redis缓存集群

./redis-cli -h 集群节点ip地址 -p 端口号 -c(代表连接集群)

 

[root@localhost redis]# ./redis-cli -h 192.168.0.109 -p 6379 -c
192.168.0.109:6379> ping
PONG
192.168.0.109:6379>

 

4、测验Redis缓存集群

./redis-cli -h 集群节点ip地址 -p 端口号 -c(代表连接集群)

 

[root@localhost redis]# ./redis-cli -h 192.168.0.109 -p 6379 -c
192.168.0.109:6379> ping
PONG
192.168.0.109:6379>

 

这边写了一个redis连接池,通过读取配置文件,接纳单例格局,来建设构造连接池。

Redis图形化操作

Redis图形化操作

SerializeUtil体系化学工业具

1、Redis Desktop Manager

图片 24 

只得一而再单机版,不可能三番五次集群。

1、Redis Desktop Manager

图片 25 

不得不延续单机版,不可能再三再四集群。

public class SerializeUtil { public static byte[] serialize(Object object) { ObjectOutputStream oos = null; ByteArrayOutputStream baos = null; try { // 序列化 baos = new ByteArrayOutputStream(); oos = new ObjectOutputStream; oos.writeObject; byte[] bytes = baos.toByteArray(); return bytes; } catch (Exception e) { throw new RuntimeException(e.getMessage; } } public static Object deserialize(byte[] bytes) { ByteArrayInputStream bais = null; try { // 反序列化 bais = new ByteArrayInputStream; ObjectInputStream ois = new ObjectInputStream; return ois.readObject(); } catch (Exception e) { throw new RuntimeException(e.getMessage; } }}

2、Jedis客户端

2、Jedis客户端

在存储redis时,key和value都急需张开体系化操作,然后抽出时,在反系列化,那样就能够保障redis的囤积和语言非亲非故。

2.1、单机版

1、须要将jedis的jar包加多到工程中,如果是maven必要加多jar包的坐标

 

<!-- Redis客户端 --><dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>

 

2、单机版测量检验

 

public static void main(String[] args) {
//创建jedis对象
Jedis jedis = new Jedis("192.168.1.101",6379);
//设置redis连接密码
jedis.auth("woo0nise");
//调用jedis对象的方法,方法域名和redis的命令一致
jedis.set("b", "Redis Test");
String b = jedis.get("b");
System.out.println(b);
//关闭jedis
jedis.close();
}

 

图片 26 

3、Jedis连接池

 

@Test
public void testJedisPool(){
//设置连接池的配置信息
JedisPoolConfig config = new JedisPoolConfig();
    //最大空闲连接数, 应用自己评估,不要超过AliCloudDB for Redis每个实例最大的连接数
    config.setMaxIdle(200);
    //最大连接数, 应用自己评估,不要超过AliCloudDB for Redis每个实例最大的连接数
    config.setMaxTotal(300);
    config.setTestOnBorrow(false);
    config.setTestOnReturn(false);
    String host = "192.168.1.101";
    String password = "woo0nise";
    //创建连接池
    JedisPool pool = new JedisPool(config, host, 6379, 3000, password);
//从连接池获取连接对象
    Jedis jedis =  pool.getResource();
System.out.println("a:" jedis.get("a"));
System.out.println("b:" jedis.get("b"));
jedis.close();
pool.close();
}

 

2.1、单机版

1、须要将jedis的jar包增加到工程中,要是是maven须要加多jar包的坐标

 

<!-- Redis客户端 --><dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>

 

2、单机版测验

 

public static void main(String[] args) {
//创建jedis对象
Jedis jedis = new Jedis("192.168.1.101",6379);
//设置redis连接密码
jedis.auth("woo0nise");
//调用jedis对象的方法,方法域名和redis的命令一致
jedis.set("b", "Redis Test");
String b = jedis.get("b");
System.out.println(b);
//关闭jedis
jedis.close();
}

 

图片 27 

3、Jedis连接池

 

@Test
public void testJedisPool(){
//设置连接池的配置信息
JedisPoolConfig config = new JedisPoolConfig();
    //最大空闲连接数, 应用自己评估,不要超过AliCloudDB for Redis每个实例最大的连接数
    config.setMaxIdle(200);
    //最大连接数, 应用自己评估,不要超过AliCloudDB for Redis每个实例最大的连接数
    config.setMaxTotal(300);
    config.setTestOnBorrow(false);
    config.setTestOnReturn(false);
    String host = "192.168.1.101";
    String password = "woo0nise";
    //创建连接池
    JedisPool pool = new JedisPool(config, host, 6379, 3000, password);
//从连接池获取连接对象
    Jedis jedis =  pool.getResource();
System.out.println("a:" jedis.get("a"));
System.out.println("b:" jedis.get("b"));
jedis.close();
pool.close();
}

 

RedisUtil 操作工具类

2.2、集群

1、须求安装权限(笔者设置的为本地局域网全部得以访谈该Redis集群)

 

@Test
public void jedisCluster(){
//集群节点集合
Set<HostAndPort> nodes = new HashSet<HostAndPort>();
nodes.add(new HostAndPort("192.168.1.101",6379));
nodes.add(new HostAndPort("192.168.1.105",6379));
nodes.add(new HostAndPort("192.168.1.102",6379));
nodes.add(new HostAndPort("192.168.1.106",6379));
nodes.add(new HostAndPort("192.168.1.107",6379));
nodes.add(new HostAndPort("192.168.1.104",6379));
//创建集群
JedisCluster cluster = new JedisCluster(nodes);
cluster.set("test", "ok");
String data = cluster.get("test");
System.out.println(data);
cluster.close();
}

 

集群自带连接池

2.2、集群

1、要求设置权限(小编设置的为本土局域网全部方可访谈该Redis集群)

 

@Test
public void jedisCluster(){
//集群节点集合
Set<HostAndPort> nodes = new HashSet<HostAndPort>();
nodes.add(new HostAndPort("192.168.1.101",6379));
nodes.add(new HostAndPort("192.168.1.105",6379));
nodes.add(new HostAndPort("192.168.1.102",6379));
nodes.add(new HostAndPort("192.168.1.106",6379));
nodes.add(new HostAndPort("192.168.1.107",6379));
nodes.add(new HostAndPort("192.168.1.104",6379));
//创建集群
JedisCluster cluster = new JedisCluster(nodes);
cluster.set("test", "ok");
String data = cluster.get("test");
System.out.println(data);
cluster.close();
}

 

集群自带连接池

public class RedisUtil { /** * 设置值 * * @param key * @param value */ public static void set(String key, Object value) { JedisPoolUtil.getJedis().set(SerializeUtil.serialize, SerializeUtil.serialize; } /** * 设置值,并设置保存时间 * * @param key * @param value * @param secs 秒数 */ public static void set(String key, Object value, int secs) { JedisPoolUtil.getJedis().setex(SerializeUtil.serialize, secs, SerializeUtil.serialize; } /** * 根据key取值 * * @param key * @return */ public static Object get(String key) { return SerializeUtil.deserialize(JedisPoolUtil.getJedis().get(SerializeUtil.serialize; } /** * 删除 * * @param key */ public static void del(String key) { JedisPoolUtil.getJedis().del(SerializeUtil.serialize; } public static void main(String[] args) { RedisUtil.set("com:critc:name", "jack"); System.out.println(RedisUtil.get("com:critc:name").toString; RedisUtil.del("com:critc:name"); }}

3.7、Spring整合Jedis

3.7、Spring整合Jedis

那边设置了多个redis工具类,能够直接通过key和value赋值,取值,设置过期时间等等。

3.7.1、Spring整合Jedis(单机版)

applicationContext-jedis.xml

图片 28图片 29

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4 xsi:schemaLocation="http://www.springframework.org/schema/beans
 5  http://www.springframework.org/schema/beans/spring-beans.xsd">
 6  
 7 <!-- 连接池配置,可有可无 -->
 8 <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
 9 <!-- 最大连接数 -->
10 <property name="maxTotal" value="30" />
11 <!-- 最大空闲连接数 -->
12 <property name="maxIdle" value="10" />
13 <!-- 每次释放连接的最大数目 -->
14 <property name="numTestsPerEvictionRun" value="1024" />
15 <!-- 释放连接的扫描间隔(毫秒) -->
16 <property name="timeBetweenEvictionRunsMillis" value="30000" />
17 <!-- 连接最小空闲时间 -->
18 <property name="minEvictableIdleTimeMillis" value="1800000" />
19 <!-- 连接空闲多久后释放, 当空闲时间>该值 且 空闲连接>最大空闲连接数 时直接释放 -->
20 <property name="softMinEvictableIdleTimeMillis" value="10000" />
21 <!-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 -->
22 <property name="maxWaitMillis" value="1500" />
23 <!-- 在获取连接的时候检查有效性, 默认false -->
24 <property name="testOnBorrow" value="true" />
25 <!-- 在空闲时检查有效性, 默认false -->
26 <property name="testWhileIdle" value="true" />
27 <!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true -->
28 <property name="blockWhenExhausted" value="false" />
29 </bean>
30 <!-- 配置单机版jedis(连接池) -->
31 <bean id="jedisPool" class="redis.clients.jedis.JedisPool" >
32 <constructor-arg name="host" value="192.168.1.101" ></constructor-arg>
33 <constructor-arg name="port" value="6379" ></constructor-arg>
34 <constructor-arg name="poolConfig" ref="jedisPoolConfig" ></constructor-arg>
35 </bean>
36  
37 </beans>

applicationContext-jedis.xml

测量检验连接

 

@Test
public void JedisTest(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:/spring/applicationContext-*.xml");
JedisPool jedisPool = (JedisPool)applicationContext.getBean("jedisPool");
Jedis jedis = jedisPool.getResource();
jedis.set("a", "100");
String a = jedis.get("a");
System.out.println(a);
jedis.close();
jedisPool.close();
}

 

3.7.1、Spring整合Jedis(单机版)

applicationContext-jedis.xml

图片 30图片 31

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4 xsi:schemaLocation="http://www.springframework.org/schema/beans
 5  http://www.springframework.org/schema/beans/spring-beans.xsd">
 6  
 7 <!-- 连接池配置,可有可无 -->
 8 <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
 9 <!-- 最大连接数 -->
10 <property name="maxTotal" value="30" />
11 <!-- 最大空闲连接数 -->
12 <property name="maxIdle" value="10" />
13 <!-- 每次释放连接的最大数目 -->
14 <property name="numTestsPerEvictionRun" value="1024" />
15 <!-- 释放连接的扫描间隔(毫秒) -->
16 <property name="timeBetweenEvictionRunsMillis" value="30000" />
17 <!-- 连接最小空闲时间 -->
18 <property name="minEvictableIdleTimeMillis" value="1800000" />
19 <!-- 连接空闲多久后释放, 当空闲时间>该值 且 空闲连接>最大空闲连接数 时直接释放 -->
20 <property name="softMinEvictableIdleTimeMillis" value="10000" />
21 <!-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 -->
22 <property name="maxWaitMillis" value="1500" />
23 <!-- 在获取连接的时候检查有效性, 默认false -->
24 <property name="testOnBorrow" value="true" />
25 <!-- 在空闲时检查有效性, 默认false -->
26 <property name="testWhileIdle" value="true" />
27 <!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true -->
28 <property name="blockWhenExhausted" value="false" />
29 </bean>
30 <!-- 配置单机版jedis(连接池) -->
31 <bean id="jedisPool" class="redis.clients.jedis.JedisPool" >
32 <constructor-arg name="host" value="192.168.1.101" ></constructor-arg>
33 <constructor-arg name="port" value="6379" ></constructor-arg>
34 <constructor-arg name="poolConfig" ref="jedisPoolConfig" ></constructor-arg>
35 </bean>
36  
37 </beans>

applicationContext-jedis.xml

测量检验连接

 

@Test
public void JedisTest(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:/spring/applicationContext-*.xml");
JedisPool jedisPool = (JedisPool)applicationContext.getBean("jedisPool");
Jedis jedis = jedisPool.getResource();
jedis.set("a", "100");
String a = jedis.get("a");
System.out.println(a);
jedis.close();
jedisPool.close();
}

 

此处说一下redis的key命名法规,为了更加好的存储,key的命名格局是com:critc:app:name:,即因此:进行分隔,多个小单元构成一整个key

3.7.2、Spring整合Jedis(集群版本)

图片 32图片 33

 1 <!-- 配置集群版jedis -->
 2 <bean id="jedisCluster"  class="redis.clients.jedis.JedisCluster" >
 3 <constructor-arg name="nodes" >
 4 <set>
 5  <bean class="redis.clients.jedis.HostAndPort" >
 6   <constructor-arg name="host" value="192.168.1.101" ></constructor-arg>
 7   <constructor-arg name="port" value="6379" ></constructor-arg>
 8  </bean>
 9  <bean class="redis.clients.jedis.HostAndPort" >
10   <constructor-arg name="host" value="192.168.1.111" ></constructor-arg>
11   <constructor-arg name="port" value="6379" ></constructor-arg>
12  </bean>
13 <bean class="redis.clients.jedis.HostAndPort" >
14   <constructor-arg name="host" value="192.168.1.112" ></constructor-arg>
15   <constructor-arg name="port" value="6379" ></constructor-arg>
16  </bean>
17  <bean class="redis.clients.jedis.HostAndPort" >
18   <constructor-arg name="host" value="192.168.1.113" ></constructor-arg>
19   <constructor-arg name="port" value="6379" ></constructor-arg>
20  </bean>
21  <bean class="redis.clients.jedis.HostAndPort" >
22   <constructor-arg name="host" value="192.168.1.114" ></constructor-arg>
23   <constructor-arg name="port" value="6379" ></constructor-arg>
24  </bean>
25  <bean class="redis.clients.jedis.HostAndPort" >
26   <constructor-arg name="host" value="192.168.1.115" ></constructor-arg>
27   <constructor-arg name="port" value="6379" ></constructor-arg>
28  </bean>
29 </set>
30 </constructor-arg>
31 </bean>

applicationContext-jedis.xml

测量检验连接

 

@Test
public void jedisCluster(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:/spring/applicationContext-*.xml");
JedisCluster jedisCluster = (JedisCluster)applicationContext.getBean("jedisCluster");
jedisCluster.set("a", "100");
String a = jedisCluster.get("a");
System.out.println(a);
jedisCluster.close();
}

 

图片 34

 

原创小说,侵犯版权必究!
Email:woo0nise@gamail.com
交流QQ群:193306983

 

3.7.2、Spring整合Jedis(集群版本)

图片 35图片 36

 1 <!-- 配置集群版jedis -->
 2 <bean id="jedisCluster"  class="redis.clients.jedis.JedisCluster" >
 3 <constructor-arg name="nodes" >
 4 <set>
 5  <bean class="redis.clients.jedis.HostAndPort" >
 6   <constructor-arg name="host" value="192.168.1.101" ></constructor-arg>
 7   <constructor-arg name="port" value="6379" ></constructor-arg>
 8  </bean>
 9  <bean class="redis.clients.jedis.HostAndPort" >
10   <constructor-arg name="host" value="192.168.1.111" ></constructor-arg>
11   <constructor-arg name="port" value="6379" ></constructor-arg>
12  </bean>
13 <bean class="redis.clients.jedis.HostAndPort" >
14   <constructor-arg name="host" value="192.168.1.112" ></constructor-arg>
15   <constructor-arg name="port" value="6379" ></constructor-arg>
16  </bean>
17  <bean class="redis.clients.jedis.HostAndPort" >
18   <constructor-arg name="host" value="192.168.1.113" ></constructor-arg>
19   <constructor-arg name="port" value="6379" ></constructor-arg>
20  </bean>
21  <bean class="redis.clients.jedis.HostAndPort" >
22   <constructor-arg name="host" value="192.168.1.114" ></constructor-arg>
23   <constructor-arg name="port" value="6379" ></constructor-arg>
24  </bean>
25  <bean class="redis.clients.jedis.HostAndPort" >
26   <constructor-arg name="host" value="192.168.1.115" ></constructor-arg>
27   <constructor-arg name="port" value="6379" ></constructor-arg>
28  </bean>
29 </set>
30 </constructor-arg>
31 </bean>

applicationContext-jedis.xml

测验连接

 

@Test
public void jedisCluster(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:/spring/applicationContext-*.xml");
JedisCluster jedisCluster = (JedisCluster)applicationContext.getBean("jedisCluster");
jedisCluster.set("a", "100");
String a = jedisCluster.get("a");
System.out.println(a);
jedisCluster.close();
}

 

图片 37

 

原创小说,侵害版权必究!
Email:woo0nise@gamail.com
交流QQ群:193306983

 

[本工程详细源码]()

编辑:编程 本文来源:该图是连接本地redis并且向其中set类似于map集合《

关键词: 澳门新濠3559