- redis安装
1.1 redis集群搭建
1.2 redis.conf配置文件说明
1.3 redis持久化 - jedisapi
1 redis安装
redis 主要分单节点、主从、哨兵、集群,本篇文章主要将集群搭建
1.1 集群搭建:
(1)、下载redis安装包
cd /home/gz/software/ //安装目录
wget http://download.redis.io/releases/redis-3.2.8.tar.gz //下载
tar -zxvf /redis-3.2.8.tar.gz -C redis //解压
(2)、编译安装
安装依赖
yum -y install gcc gcc-c++ libstdc+±devel
cd redis-3.2.8
make && make install //编译安装
(3)、创建redis节点
cd /home/gz/software/redis/redis-cluster
mkdir 7000 7001 7002 7003 7004 7005 //创建文件夹
cp /home/gz/software/redis/redis-3.2.1/redis.conf …/redis_cluster/700*/ //拷贝redis.conf到700*目录下
(4)、修改700*下的每个redis.conf配置文件
dir /home/gz/software/redis/redis-cluster/700*
appendonly yes
logfile /home/gz/software/redis/redis-cluster/700*/redis-700*.log
bind (本机ip)
daemonize yes //redis后台运行
pidfile /var/run/redis_700*.pid //pidfile文件对应7000,7002,7003
port 700* //端口
cluster-enabled yes //开启集群 把注释#去掉
cluster-config-file nodes_700*.conf //集群的配置 配置文件首次启动自动生成 7000,7001,7002
cluster-node-timeout 5000 //请求超时 设置5秒够了
appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志
(5)、启动所有的redis
cd /home/gz/software/redis/redis-cluster
/home/gz/software/redis/redis-3.2.8/src/redis-server 700*/redis.conf
6、查看服务
ps -ef | grep redis #查看是否启动成功
netstat -tnlp | grep redis #可以看到redis监听端口
(7)、安装集群
apt-get install ruby ruby-devel rubygems //安装ruby
gem install redis //再用 gem 这个命令来安装 redis接口 gem是ruby的一个工具包.
cd /home/gz/software/redis/redis-3.2.8/src
./redis-trib.rb create --replicas 1 192.168.75.138:7000 192.168.75.138:7001 192.168.75.138:7002 192.168.75.138:7003 192.168.75.138:7004 192.168.75.138:7005
注:如果安装发现
gem install redis
ERROR: Error installing redis:
redis requires Ruby version >= 2.2.2.异常
解决方案:redis requires ruby version 2.2.2的解决方案
(8)、客户端连接
cd /home/gz/software/redis/redis-3.2.8/src
./redis-cli -c -h 192.168.75.138 -p 700*
cluster nodes //查看是否是集群
(9)、关闭客户端
cd /home/gz/software/redis/redis-3.2.8/src
./redis-cli -c -h 192.168.75.138 -p 700* shutdown
1.2 redis.conf配置文件说明
(1). daemonize no
默认情况下,redis不是在后台运行的,如果需要在后台运行,把该项的值更改为yes
//daemonize yes
(2)、当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定
//pidfile /var/run/redis.pid
(3)、指定redis运行的端口,默认是6379
//port 6379
(4)、指定redis只接收来自于该IP地址的请求,如果不进行设置,那么将处理所有请求,在生产环境中最好设置该项
//bind 127.0.0.1
(5)、工作目录,数据库镜像备份的文件放置的路径。这里的路径跟文件名要分开配置是因为redis在进行备份时,先会将当前数据库的状态写入到一个临时文件中,等备份完成时,
再把该该临时文件替换为上面所指定的文件,而这里的临时文件和上面所配置的备份文件都会放在这个指定的路径当中。AOF文件也会存放在这个目录下面注意这里必须制定一个目录而不是文件
//dir ./
############################## 日志 ###############################
(6)、指定日志记录级别
Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
debug 记录很多信息,用于开发和测试
varbose 有用的信息,不像debug会记录那么多
notice 普通的verbose,常用于生产环境
warning 只有非常重要或者严重的信息会记录到日志
//loglevel debug
(7)、配置log文件地址
//logfile /var/log/redis/redis.log
############################## rdb(快照) ###############################
(8)、本地持久化数据库文件名,默认值为dump.rdb
//dbfilename dump.rdb
############################## 主从 ###############################
(9)、主从复制. 设置该数据库为其他数据库的从数据库。设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步
slaveof
(10)、当master服务设置了密码保护时(用requirepass制定的密码)slav服务连接master的密码
masterauth
############################## AOF ###############################
(11)、是否开启aof
//appendonly no
(12)、AOF文件名称 (默认: “appendonly.aof”)
//appendfilename appendonly.aof
(13)、Redis支持三种同步AOF文件的策略
//appendfsync always
//appendfsync everysec
//appendfsync no
############################## cluster(集群) ###############################
(14)、开启集群 把注释#去掉
//cluster-enabled yes
(15)、集群的配置
//cluster-config-file nodes_7000.conf
(16)、请求超时
//cluster-node-timeout 5000
1.3 redis持久化
redis是一个持久化的内存数据库,也就是说redis需要经常将内存中的数据同步
到硬盘上保证持久化。
redis持久化两种方式:
- snapshotting(快照)默认方式,将内存中以快照方式写入到二进制中,默认
为dump.rdb,可以通过配置设置自动做快照持久化的方式。我们可以配置redis在n
秒内如果超过m个key则修改就自动做快照。
snapshotting设置:
save 900 1 #900秒内如果超过1个key被修改则发起快照保存
save 300 10 #300秒内超过10个key被修改,则发起快照保存
注:如果对数据的完整性要求不太高,可以用,比如评论,
- append-only file(缩写aof)的方式(有点类似oracle日志)由于快照方式在
一定时间间隔做一次,所以可能发生redis意外down的情况会数据丢失最后一次快照后的所有修改的数据、
aof比快照方式更好的持久化性,是由于在使用aof时,redis会将每一个用到的写命令都通过write函数追加
到命令中。当redis重新启动时会重新执行文件中保存的写命令在内存中重建这个数据库内容,这个文件在bin目录下:
appendonly.aof:aof不是立即写到硬盘上,可能通过配置文件修改强制写到硬盘中。
aof设置:
appendonly yes //启动aof持久化方式有三种修改方式
appendfsync always //收到写命令就立即写到磁盘,效率最慢,但保证完全的持久化
appendfsync everysec //每秒钟写入磁盘一次,在性能和持久化方面做了最好的折中
appendfsync no //完全依赖操作系统 新能最好,持久化没有保证
2 jedisapi
1、单机模式
通过 Jedis实现
2、分片模式
通过分片池ShardedJedisPool 实现
3、集群模式
通过JedisCluster实现
(1). 单机模式
public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.75.138", 7004);
jedis.set("gz20180226", "gz20180226");
jedis.disconnect();
}
(2). 分片模式
(2.1). 分片模式直连方式
public void jedisShardNormal() {
List<JedisShardInfo> shards = Arrays.asList(
new JedisShardInfo("localhost",6379),
new JedisShardInfo("localhost",6380));
ShardedJedis sharding = new ShardedJedis(shards);
long start = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
String result = sharding.set("sn" + i, "n" + i);
}
long end = System.currentTimeMillis();
System.out.println("Simple@Sharing SET: " + ((end - start)/1000.0) + " seconds");
sharding.disconnect();
}
(2.2). 分片模式连接池方式
public void jedisShardSimplePool() {
List<JedisShardInfo> shards = Arrays.asList(
new JedisShardInfo("localhost",6379),
new JedisShardInfo("localhost",6380));
ShardedJedisPool pool = new ShardedJedisPool(new JedisPoolConfig(), shards);
ShardedJedis one = pool.getResource();
long start = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
String result = one.set("spn" + i, "n" + i);
}
long end = System.currentTimeMillis();
pool.returnResource(one);
System.out.println("Simple@Pool SET: " + ((end - start)/1000.0) + " seconds");
pool.destroy();
}
注:
(1). 事务和管道都是异步的,个人感觉,在管道中再进行事务调用,没有必要,不如直接进行事务模式。
(2). 分布式调用中不支持事务。因为事务是在服务器端实现,而在分布式中,每批次的调用对象都可能访问不同的机器,所以,没法进行事务。