Redis简介
Redis是一个key-value存储系统。和Memcached类似,它支持丰富的数据类型,最为常用的数据类型主要有五种,分别是:string(字符串)、 hash(哈希)、list(链表)、set(集合)和zset(有序集合)。Redis通常将数据存储于内存中,或被配置为使用虚拟内存。与memcached不同的是,redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,以此来达到数据持久化的目的,并且在此基础上实现了master-slave(主从)同步。当前 Redis的应用已经非常广泛,国内像新浪、淘宝,国外像 Flickr、Github等均在使用Redis的缓存服务。
环境要求
Windows 64位操作系统
php-7.2.2-Win32-VC15-x64
Redis-x64-4.0.2.2
php_redis-4.0.2-7.2-ts-vc15-x64
php_igbinary-2.0.7-7.2-ts-vc15-x64(php_redis扩展依赖)
资源下载地址
php7.2、Redis、php-redis、php-igbinary
注意事项:windows环境下,https://github.com/MicrosoftArchive/redis/releases资源列表里面能找到的最新版本为3.2,但是却没有资源库能够提供对应版本的php-redis扩展,真TM扯淡。
安装Redis
将下载下来的redis压缩包Redis-x64-4.0.2.2.zip解压至某个目录,如图:
根据自己所采用的启动方式,修改对应的配置文件。另外,出于安全方面的考虑,通常需要为redis设置连接密码,找到配置文件中含有requirepass foobared字样的行,在其下面新增一行,如图:
设置Redis连接密码后,客户端在连接Redis时需要通过AUTH <password>命令提供密码。
数据持久化
Redis提供了两种持久化的方式,将内存中的数据,存储在磁盘上。分别是rdb和aof(默认关闭),默认使用的是rdb方式,我们可以根据自己的需求,决定采用哪一种方式。
RDB方式
Redis通过创建快照的方式获取某一时刻Redis中所有数据的副本,然后将其存放在指定的磁盘文件中。用户可以针对该快照进行各种操作,比如:将快照文件复制到其他服务器从而完成Redis的主从复制,或者将快照留在原地,服务器重启的时候重用数据。
rdb配置
# 配置rdb文件名
dbfilename dump.rdb
# 配置rdb文件目录
dir ./
# 策略配置
# 在规定的时间内,Redis发生写操作的个数满足条件,会触发持久化命令。
# 当用户设置了多个save的选项配置,只要其中任一条满足,Redis都会触发一次持久化操作,比如:900秒之内至少一次写操作,或者300秒之内至少发生10次写操作,或者60秒之内至少发生10000次写操作都会触发快照命令。
save 900 1
save 300 10
save 60 10000
AOF方式
Redis的AOF持久化策略是将发送到Redis服务器端的每一条命令都记录下来,并且保存到硬盘的AOF文件中,类似于打开日志文件,来一条命令就记录一条。
aof配置
# 是否开启AOF模式,默认为no,yes表示开启
appendonly no
# 配置aof文件名
appendfilename "appendonly.aof"
# 配置aof文件目录
dir ./
# AOF同步频率,默认为 everysec
# always 表示每次有数据发生修改时都会写入AOF文件,这种方式会严重降低redis的性能。
# everysec 表示表示每秒钟同步一次,该策略为AOF的缺省策略。
# no 表示让操作系统来决定应该何时进行同步,Linux系统往往可能30秒才会执行一次
appendfsync everysec
# yes表示新写操作不进行同步,只是暂存在缓冲区里,避免造成磁盘IO操作冲突,等重写完成后再写入,默认为no
no-appendfsync-on-rewrite no
# Redis恢复时,是否忽略最后一条可能存在问题的指令(因为最后一条指令可能存在问题,比如写一半时突然断电了),默认为yes
aof-load-truncated yes
注意:如果RDB与AOF同时开启,Redis 默认会先加载AOF的配置文件。
主从复制
在Redis中实现主从复制比较简单,只需要修改slave服务器配置文件中的slave相关参数即可。
# 设置master主服务器IP和端口
slaveof 127.0.0.1 10002
# slave是否只读,从服务器负责读操作,主服务器负责写操作,从而实现读写分离
slave-read-only yes
主从同步原理
1. Slave服务启动,主动连接Master,并发送SYNC命令,请求初始化同步
2. Master收到SYNC后,执行BGSAVE命令生成RDB文件,并缓存该时间段内的写命令
3. Master完成RDB文件后,将其发送给所有Slave服务器,
4. Slave服务器接收到RDB文件后,删除内存中旧的缓存数据,并装载RDB文件
5. Master在发送完RDB后,即刻向所有Slave服务器发送缓存中的写命令
6. 至此初始化完成,后续进行增量同步
启动Redis
此处有两种启动方式,通过命令行和通过系统服务的方式。
1. 命令行方式启动:
切换到redis的根目录,比如根目录为 D:\myplatform\Redis,然后执行命令 redis-server redis.windows.conf 即可启动redis服务,如图:
注意:此窗口请勿关闭,否则redis服务就会停止了。
2. 系统服务方式启动:
cmd窗口下,切换到redis根目录,执行如下命令:
redis-server --service-install redis.windows-service.conf --loglevel verbose --service-name "Redis Service 4.0" --port 10001
安装成功后,即可通过windows服务界面的方式启动redis了。
客户端测试
新开一个cmd窗口,切换到redis根目录,执行命令 redis-cli,如果能看到redis的服务器地址和端口,就说明客户端已成功连接。根据redis启动方式的不同,选择相应的命令。
命令行方式:redis-cli
系统服务方式:redis-cli -h 127.0.0.1 -p 10001
安装php-redis扩展
将php_redis-4.0.2-7.2-ts-vc15-x64.zip压缩包中的php_redis.dll文件,以及php_igbinary-2.0.7-7.2-ts-vc15-x64.zip压缩包中的php_igbinary.dll文件,拷贝到php安装目录的ext目录下,如图:
然后,修改php.ini配置文件,在里面加入如下扩展:
extension=php_igbinary.dll
extension=php_redis.dll
注意:php_igbinary扩展要放在php_redis扩展的前面。
最后,重启apache服务。
Redis相关完整软件包
下载地址:Redis相关软件包
网友评论