前言
redis作为一种高效的缓存框架,使用是非常广泛的,在数据存储上,在运行时其将数据存储在内存中,以实现数据的高效读写,并且根据定制的持久化规则不同,其会不定期的将数据持久化到硬盘中。
另外相较于其他的NoSql数据库,redis提供了非常丰富的数据结构,如 dict , sds , linkedlist , ziplist , set , quicklist , geometry 。在这些存储结构的基础上,redis为用户提供了非常丰富的操作选择,如通过 zskiplist 来达到对某种类型的数据的排序目的,而排序在数据库中是一个非常耗时的操作。
1.redis单例的安装和使用
redis相对于其他的缓存框架安装非常的方便,只需要从 https://redis.io/download 下载后解压,进入redis目录之后执行如下命令即安装完成:
make install
这里需要注意的是 make 是 gcc 中的一个命令,安装之前请确保机器安装了 gcc 。redis中所有的命令都在redis安装目录中的 src 子目录下,其中比较重要的是 redis-server,redis-sentinel,redis-cli 。
编译完成之后在 src 目录下执行 ./redis-server 启动redis(启动后可关闭该窗口),然后新开一个窗口,在命令行中执行 ./redis-cli 即可连接启动的redis服务。在其中执行如下命令即可看到编译安装成功了:
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
这里需要说明的是,按照上述方式启动redis,其使用的ip为本机ip 127.0.0.1 ,端口为 6379 ,并且其余的配置采用的都是默认配置,相关配置可在redis安装目录下的 redis.conf 文件中查看。如果需要按照指定的配置文件来启动,可在 redis-server 后接上配置文件名,如:
./src/redis-server redis.conf
另外,上述使用 redis-cli 连接redis客户端时如果不带任何参数,那么其连接的默认ip和端口为 127.0.0.1:6379 。如果需要连接指定ip和端口的客户端,可以使用如下方式:
./src/redis-cli -h 127.0.0.1 -p 6379
这里-h参数表示连接的ip, -p 则表示连接的端口。配置好redis之后,我们就可以在redis中执行相关命令来操作数据。
2.redis主从模式的配置
redis单例提供了一种数据缓存方式和丰富的数据操作 api ,但是将数据完全存储在单个redis中主要存在两个问题:数据备份和数据体量较大造成的性能降低。这里redis的 主从模式 为这两个问题提供了一个较好的解决方案。
主从模式指的是使用一个redis实例作为主机,其余的实例作为备份机。主机和从机的数据完全一致,主机支持数据的写入和读取等各项操作,而从机则只支持与主机数据的同步和读取,也就是说,客户端可以将数据写入到主机,由主机自动将数据的写入操作同步到从机。
主从模式很好的解决了数据备份问题,并且由于主从服务数据几乎是一致的,因而可以将写入数据的命令发送给主机执行,而读取数据的命令发送给不同的从机执行,从而达到读写分离的目的。如下所示主机 redis-A 分别有 redis-B 、 redis-C 、 redis-D 、 redis-E 四个从机:
前面第1点中我们已经介绍了redis单例的配置方式,而上面我们也介绍了主从模式其实也是多个redis实例组成的,因而redis主从模式的配置可以理解为多个不同的redis实例通过一定的配置告知其相互之间的主从关系。
而前面已经介绍,每个redis实例都会占用一个本机的端口号,主从模式的配置主要的配置点有两个:当前实例端口号和当前实例是主机还是从机,是从机的话其主机的ip和端口是什么。一般的redis目录下的 redis.conf 保存的是默认配置,尽量不要对其进行修改,这里我们复制三份 redis.conf 文件,分别命名为 6379.conf , 6380.conf 和 6381.conf ,如下是端口为 6379 的主机的主要配置:
bind 127.0.0.1
port 6379
logfile "6379.log"
dbfilename "dump-6379.rdb"
如下是端口为6380和6381的从机的配置:
bind 127.0.0.1
port 6380
logfile "6380.log"
dbfilename "dump-6380.rdb"
slaveof 127.0.0.1 6379
bind 127.0.0.1
port 6381
logfile "6381.log"
dbfilename "dump-6381.rdb"
slaveof 127.0.0.1 6379
可以看到,端口为6380和6381的实例被配置为端口为6379的实例的从机。配置完成后使用 redis-server 分别执行如下命令启动三个实例:
./src/redis-server 6379.conf
./src/redis-server 6380.conf
./s