Redis 简介
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave模式的数据备份。
Redis 优势
性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
Redis与其他key-value存储有什么不同?
Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,应为数据量不能大于硬件内存。在内存数据库方面的另一个优点是, 相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。 同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
Redis的安装(单机)
注意:本文章是使用Centos7进行安装Redis。安装使用的Redis版本当前最新版本 redis-4.0.11.tar.gz。如果需要在Window和Mac上面安装的,暂时不提供。本章是在虚拟中安装Redis,如果真实安装在
服务器,本文章只当参考,如果有未能达到要求的地方,可以发送有邮件到:wsb8878@gmail.com或者wsb8878@163.com。
首先我们来安装前的准备,使用VMware Workstation Pro 安装Centos7 (CentOS-7-x86_64-Minimal-1804.iso)
进入http://mirrors.hust.edu.cn/centos/7/isos/x86_64/ 选择轻量的级的版本下载。(为了方便快速学习,请先安装Centos7)
下图是作者安装的单机centos7
安装Redis我们先来看看能不能进行上网,
$ ping www.baidu.com PING www.a.shifen.com (115.239.210.27) 56(84) bytes of data. 64 bytes from 115.239.210.27 (115.239.210.27): icmp_seq=1 ttl=128 time=9.89 ms 64 bytes from 115.239.210.27 (115.239.210.27): icmp_seq=2 ttl=128 time=10.2 ms
如果出现上述情况,说明已连接网络,我们可以进行下面的操作。
/** 对系统进行更新,此处需要点时间 */ $ yum update
更新系统之后,我们需要下载最新版本的Redis,可以进入官网 http://www.redis.net.cn/download/去下载最新的版本 redis-4.0.11.tar.gz,
或者是通过下列命令wget命令进行下载。如果出现
$ wget http://download.redis.io/releases/redis-4.0.11.tar.gz -bash: /usr/bin/wget: No such file or directory /** 如果出现下列错误 , 我们需要安装wget命令 */ $ yum -y install wget /** 为了更方便操作我们这里将 vim命令一并安装 */ $ yum -y install wget
$ wget http://download.redis.io/releases/redis-4.0.11.tar.gz
出现下列表已安装
下载完Redis之后,我们对Redis进行安装使用,通过命令进行进行解压,然后移动软件安装目录中/usr/lib/
$ tar -zxvf redis-4.0.11.tar.gz $ ls $ mv redis-4.0.11 /usr/lib/ $ cd /usr/lib/redis-4.0.11/ /** 进入RedisHome 可以进入进行安装,编译之后可以进入src目录启动redis$或者直接使用命令*/
$ make && make install
/** 如果出现问题需要使用gcc,则需要安装gcc ( yum -y install gcc ) 执行 make -j MALLOC=libc && make test */
$ ./redis-server
出现上述情况,证明上述Redis服务器已启动,我们可以进行Redis验证。
如果我们使用CTRL+C退出,Redis将会退出当前进程。
此时我们将Redis的配置文件修改成的后台允许运行。
$ cd /usr/lib/redis-4.0.11/ $ ls $ vim redis.conf
找到文件内容中的daemon参数修改成 yes
修改完之后通过 :wq 保存文件。
保存文件之后,我们进入Redis目录下进行redis后台启动.注意启动时需要指定配置文件
$ cd /usr/lib/redis-4.0.11/ $ redis-server redis.conf
$ ps -ef |grep redis
说明redis 已经后台启动,我们可以进行访问。
$ redis-cli redis $ SET foo "hello" OK redis $ GET foo "hello"
此刻,我们已安装了单机的Redis
验证单机
我们通过工具来访问Redis
此时出现Window连接不上Redis原因有两个,一是没有闭关防火墙,第二需要修改redis的配置: protected-mode设置成no ,再注意 #bing 127.0.0.1 。
/** 关闭防火墙,查看访问防火墙的状态,开机关闭防火墙 */ $ systemctl stop firewalld $ systemctl status firewalld $ systemctl disable firewalld $ vim /usr/lib/redis-4.0.11/redis.conf /** 找到下文件 */ bind 127.0.0.1 > #127.0.0.1 protected-mode yes > protected-mode no
/** 使用 :wq 保存文件 */
修改完之后,使用命令将Redis服务停止,之后再启动。
$ ps -ef|grep redis
$ kill -9 7348
/** 强制停止该进程(7348), 注意每个人的机器进程号都不一样 */
$ cd /usr/lib/redis-4.0.11/ $ redis-server redis.conf
$ ps -ef |grep redis
再次使用客户端进行访问
验证数据,此时在服务器添加数据,在客户端查询数据。
此时,单机版的已经完成了。
小小总结:
注意,安装Redis如果想外部访问一定关闭防火墙,如果您不想关闭防火墙,那就到防火墙中配置对应的访问IP。
redis的安装(集群)
安装集群之前,先要说明注意事项,因redis的要求,必须最少6个节点才能进行集群,根据你的要求,是看配置多少台机器,你可以选择6台或者选择一台。
本文章使用的是两台服务器 192.168.87.146,192.168.87.134,
192.168.87.146中添加三个节点,7001,7002,7003三个端口的节点。
192.168.87.134中添加三个节点,7001,7002,7003三个端口的节点。
/** 两台机器下载Redis包 */ $ wget http://download.redis.io/releases/redis-4.0.11.tar.gz
$ tar -zxvf redis-4.0.11.tar.gz
$ mv redis-4.0.11 /usr/lib/
$ cd /usr/lib/redis-4.0.11
解压完Redis之后我们进行安装 ,注意的是,我们需要对Redis的内容测试通过,才能进行集群安装,不然后会使用会出各种坑。
将系统的内容进行更新,安装依赖插件,此时安装需要时间,我们更新完之后。如果我们需要清空原有的Redis的编译的代码重新进行编译。
$ yum install -y gcc g++ gcc-c++ make tcl $ yum -y update $ make clean $ make distclean $ make -j MALLOC=libc && make test $ cd ./src $ make install
(make test 需要全部通过才能进行启动使用,Redis。)
显示 all tests passed without errors; 说明测试通过。
出现上列图,说明已经安装成功。
Ruby集群
安装Redis之后,我们需要使用Ruby来建议Redis的集群,所以我们这边需要安装Ruby,但需要Ruby需要2.2.2以上的版本,在这里不多作介绍
安装 rpm进行下载Ruby
$ gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 $ \curl -sSL https://get.rvm.io | bash -s stable $ source ~/.bashrc $ source ~/.bash_profile
$ yum -y install ruby ruby-devel rubygems rpm-build
/** 安装2.2.2以上的Ruby */
$ curl -L get.rvm.io | bash -s stable
$ source /usr/local/rvm/scripts/rvm
$ rvm list known
$ rvm install 2.3.3
$ rvm use 2.3.3
$ gem install redis
/** 一定要记得关闭防火墙连接 */
$ systemctl stop firewalld
$ systemctl disable firewalld
已经Ruby安装成2.3.3 版本。
安装Redis集群目录
创建Redis使用的目录
$ rm -rf /data/redis/ $ mkdir -p /data/redis /data/redis/7001 /data/redis/7002 /data/redis/7003 /data/log/ /etc/redis
# 集群通信端口为在各服务器的端口加10000 关键集群配置
cd /usr/lib/redis-4.0.11/ vim redis.conf cluster-enabled yes cluster-config-file nodes-7000.conf cluster-node-timeout 5000 /* nodes-7000.conf为集群创建后自动生成,根据下列代码快速进修改*/
在/etc/redis/目录下创建多个文件
cd /etc/redis
bind 192.168.87.134
port 7000
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000
appendonly yes
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis_7000.pid
loglevel notice
logfile "/data/log/redis_7000.log"
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 /data/redis/7000
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
slave-lazy-flush no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble no
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
EOF
#######################
创建对应的多个文件
192.168.87.134
cp redis.conf ./redis-7001.conf cp redis.conf ./redis-7002.conf cp redis.conf ./redis-7003.conf
/** 修改当前对应的参数 */
/** 如果是另外一台机器则IP需要更改 */
bind 192.168.87.134
port 7001
cluster-config-file nodes-7001.conf
pidfile /var/run/redis_7001.pid
logfile "/data/log/redis_7001.log"
dir /data/redis/7001
修改文件之后启动文件
$ yum -y install net-tools $ redis-server redis-7001.conf $ redis-server redis-7002.conf $ redis-server redis-7003.conf $ netstat -tnlp | grep redis
同理在另外一台服务器也创建操作。
$ /usr/lib/redis-4.0.11/src/redis-trib.rb create --replicas 1 192.168.87.134:7001 192.168.87.134:7002 192.168.87.134:7003 192.168.87.146:7001 192.168.87.146:7002 192.168.87.146:7003
中间输入 yes
显示当前界面说明安装成功。
说明已经安装成功。
测试
$ redis-cli -c -h 192.168.87.134 -p 7001 redis $ SET foo "hello"
控制台显示下列结果
此刻,做为一个新手,奇迹是见证了,如果您是大牛,您就笑笑吧。
Java连接代码,请参考: https://github.com/wsb878/Redis.git
抱歉
本文章紧提供学习,如果真实安装在服务器,本文章只当参考,如果有未能达到要求的地方,可以发送有邮件到:wsb8878@gmail.com或者wsb8878@163.com。作者花名:戈森