作者:微信小助手
发布时间:2019-04-01T18:14:20
作者:爱宝贝丶
my.oschina.net/zhangxufeng/blog/905611
redis作为一种高效的缓存框架,使用是非常广泛的,在数据存储上,在运行时其将数据存储在内存中,以实现数据的高效读写,并且根据定制的持久化规则不同,其会不定期的将数据持久化到硬盘中。
另外相较于其他的NoSql数据库,redis提供了非常丰富的数据结构,如dict
,sds
,linkedlist
,ziplist
,set
,quicklist
,geometry
。在这些存储结构的基础上,redis为用户提供了非常丰富的操作选择,如通过zskiplist
来达到对某种类型的数据的排序目的,而排序在数据库中是一个非常耗时的操作。
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中执行相关命令来操作数据。
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
./src/redis-server 6381.conf
启动之后分别开启开启三个命令行工具分别执行以下命令连接redis实例:
./src/redis-cli -p 6379
./src/redis-cli -p 6380
./src/redis-cli -p 6381
分别在三个命令行工具中执行一个get命令,获取键名为msg的数据,如下所示:
127.0.0.1:6379> get msg
(nil)
127.0.0.1:6380> get msg
(nil)
127.0.0.1:6381> get msg
(nil)
可以看到,在三个redis实例中都不存在键为msg的数据,现在我们在主机6379上设置一个键为msg的数据,如下所示:
127.0.0.1:6379> set msg "hello"
OK
可以看到设置成功了,此时我们在6380和6381的实例上执行get msg
的命令,如下所示:
127.0.0.1:6380> get msg
"hello"
127.0.0.1:6381> get msg
"hello"
可以看到,虽然我们只是在6379的实例上设置了msg这条数据,但是在6380和6381的实例上也存有了相应的数据,说明我们成功配置了redis的主从模式。另外,如果不在配置文件中指定主从节点的关系,也可以在启动相关redis实例之后使用slaveof
命令来指定当前节点称为某个节点的从节点,如:
127.0.0.1:6380> slaveof 127.0.