1,简介
Redis是Remote Dictionary Server(远程数据服务)的缩写
由意大利人 antirez(Salvatore Sanfilippo) 开发的一款 内存高速缓存数据库
该软件使用C语言编写,它的数据模型为 key-value
它支持丰富的数据结构,比如 String(字符串) list(双向链表) hash(哈希) set(集合) sorted set(有序集合)。可持久化(数据会定时存储到硬盘),保证了数据安全。
2,与memcache区别
Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持master-slave(主—从)模式应用。
Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
Redis单个value的最大限制是1GB, memcached只能保存1MB的数据
3,安装redis
官方网址:https://redis.io/
源码地址:https://github.com/antirez/redis
安装过程以mac为例,linux安装过程一样
下载好linux版的安装包和php扩展文件,使用tar命令解压安装包
![]()
redis-3.1.4RC1.tgz是php扩展,另一个是redis安装包
使用make命令安装并指定安装目录

mac下安装可能会遇到下面这个错误提示

这是因为普通用户没有权限在bin下创建目录,可使用su命令切换到root模式下再执行安装命令,或者使用chmod命令改变目录权限后再执行
![]()
(root模式可以用exit命令退出)
这时redis已经安装好了,但是为了使redis能够后台运行,需要配置一下配置文件
进入解压后的redis-4.0.1目录,将redis.conf复制一份到安装目录

使用vim编辑器打开配置文件,要定位到某一行可以在vim后加+号和行号

进来后修改daemnize no 为daemonize yes,意思是开启守护进程

然后用命令:wq保存退出

然后启动redis,在redis安装目录下可以用相对路径,否则可以用绝对路径
我这里先进入安装目录,然后用相对路径

上面启动的时redis服务端,现在启动redis客户端,bin目录下redis-cli即为客户端软件,直接运行即可

简单演示一下存取数据

查看redis服务器状态可以使用命令info

4,操作使用
redis支持的数据类型主要有key/string/list/set/zset/hash几种,下面来一一探究
4.1 key键的操作主要有以下几种

这里举几个例子

redis默认有16个数据库,用0-15表示,数量可以在配置文件中修改
默认在0库操作,切换数据库可以用select命令,移动数据可以用move命令,如:
4.2 string
string是redis最基本的类型
redis的string可以包含任何数据。包括jpg图片或者序列化的对象。
单个value值最大上限是1G字节。
如果只用string类型,redis就可以被看作加上持久化特性的memcache
string的操作命令主要有以下几种
4.3 list
list类型其实就是一个双向链表。通过push,pop操作从链表的头部或者尾部添加删除元素。
这使得list既可以用作栈,也可以用作队列。
List常用方法有,lpush,rpop.llen,lrange,rpush,lpop等

4.3 set
redis的set是string类型的无序集合。不允许有重复元素,常用方法有

4.4 Zset
和set一样sorted set也是string类型元素的集合,
不同的是每个元素都会关联一个权(score),通过权值可以有序的获取集合中的元素
常用方法有

4.5 Hash
hash数据类型存储的数据与mysql数据库中存储的一条记录极为相似。
常用方法有

5,redis数据存储方式
不同于memcache,redis重启后之前存储的数据仍然可以查到
5.1 snappshoting,默认开启的存储方式(RBD)
快照技术会自动进行定时的数据写入到磁盘中,保存的文件为dump.rdb

可以通过配置文件修改自动备份的频率

这种备份方式有一个缺点,就是如果服务器宕机,那么从上次备份之后到服务器宕机这段时间的数据是没有被备份的
5.2 AOF模式 append only file
redis提供了备份频率更快的方式,aof 文件追加写的形式。默认不开启。
手动开启后,原来的数据就丢失了
首先修改redis.conf启用aof

然后重启redis服务

会看到之前存的数据没有了,但是会生成一个appendonly.aof文件,之后redis会把写记录存在这里

6,linux下php使用redis
安装扩展
先使用tar zxvf命令解压扩展文件安装包,过程和解压redis安装包一样
解压后进入文件夹
修正一下 上图最后一个命令写错了,路径不对因该是
./configure --with-php-config=/usr/local/php/bin/php-config
然后执行make && make install命令
之后会在/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/下看到新生成的redis.so扩展

找到php.ini配置文件,添加一条redis扩展

![]()

启动apache,如果之前已经启动了,可以重启,使用restart
可以在php文件中使用phpinfo()函数查看Redis扩展是否开启成功

写个脚本测试一下

访问结果

php使用redis消息队列实现抢购
添加商品

抢购脚本

先执行商品添加脚本,再执行抢购脚本


每次数字加一
优化:1,防止同一ip用户抢购多次 2,防止商品被重复添加
可以在set中记录用户的ip,每次抢购之前验证用户的ip是否已经在set集合中,有的话不允许再次抢购
添加商品之前先判断商品列表中的商品个数是否少于预期的个数,是的话才执行添加,否则每执行一次脚本,商品就会被添加一遍


浙公网安备 33010602011771号