PHP-Redis入门笔记
Redis
- 非关系型数据库
- 基于内存存在,所以相对于MySQL等运行速度更快
- 与MySQL相比,无需定义数据字典
- 是远程的,分Server端和Client端,通过Redis自定义的协议传输与交互,通常我们所说的Redis都是Server端
- 应用场景
- 缓存
- 队列(pop,push)
- 数据存储(通过硬盘持久化机制)
安装
- 安装环境
-
Linux CentOS 6.8
-
需要预装软件(gcc、tcl)(yum install即可)
-
步骤
- 下载Redis源码 wget http://download.redis.io/releases/(具体需要哪个版本自行选择)
- 解压并cd到目录中
- make && make install (将会放到usr/local/bin下)
-
cp 安装目录/redis.conf 到 你要放置的目录(备份一下原配置文件,可以在该目录下修改配置文件,启动redis时可以使用该配置文件,或者你直接使用安装目录下的配置文件也可以)
-
redis.conf 中的设置
daemonize = no
改为daemonize = yes
(no:前台启动 yes:后台启动)
port = 7200
(修改端口为7200) -
启动redis(以/目录/redis.conf这个配置文件启动)
sudo /usr/local/bin/redis-server /目录/redis.conf
-
查看redis是否已启动
ps aux | grep redis-server
-
客户端登录,本机登录默认以6379端口登录,因为有修改了端口,所以需要在登录时指定登录端口
redis-cli -h 127.0.0.1 -p 7200
info
# 查看redis的信息
-
Redis数据类型
数据类型 | 存储的值 | 读写能力 |
---|---|---|
String | 可以是字符串、整数或浮点,统称为元素 | 对字符串操作、对整数类型加减 |
List | 一个序列集合切每个节点都包含了一个元素 | 序列两端推入或弹出元素,修剪,查看或移除元素 |
Set | 各不相同的元素 | 从集合中插入或者删除元素 |
Hash | 有key-value的散列祖,其中key是字符串,value是元素 | 按照key进行增加删除 |
Sort Set | 带分数的score-value有序集合,其中score为浮点,value为元素 | 集合插入,按照分数范围查找 |
-
String 格式:key->value(sting、int、float)
set string1 test1
# 设置一条数据,key为string1,value为test1get string1
# 获取string1的值set string2 4
get string2
# 得到4incr string2
# 自增1操作get string2
# 得到5decrhy string2 2
# 自减2操作get string2
# 得到3
-
List(有序列表)
- 格式:key->value(12)(左)->value(13)->value(13)->value(14)(右)
- 队列:左边推入,右边弹出
lpush list1 12
# 从左边推入一个元素 l(left):左边 push:推入lpush list1 13
rpop list1
# 从右边弹出一个元素,得到12(先入先出)lpush list12
|lpush list2 13
|lpush list 13
# 推入2个相同的元素llent list2
查看list元素的个数(得到3)
-
Set(无序的方式存储多个不同的元素,每个元素的值都不一样)
sadd set1 12
# 添加一个set元素sadd set1 13
sadd set1 13
# 添加2个相同的set元素scard set1
# 查看set中有多少个元素(得到2个元素,说明value值不允许重复,必须唯一)sismember set1 13
# 查看13是否存在于这个set中srem set1 13
# 将13这个元素从set中移除
-
Hash(散列类型,将多个键值对存到一个redis键里)
- 格式:key -> key1=>value1 / key2=>value2 / key3=>value3 / key4=>value4
hset hash1 key1 12
hset hash1 key2 13
hset hash1 key3 13
# 设置一个hash元素,只要求key不一样,value值可以一样hget hash1 key1
# 获取hash元素中一个键的值(3个)hlen hash1
# 获取hash元素的个数hmget hash1 key1 key2 key3
# 一次性获取多个元素的值
-
Sort Set
- 格式:key->score(浮点数)=>value(string/int/float)=>rank(int)
- value必须全局唯一,如果设置相同的value值,不会增加一个元素,会修改score的值。
zadd zset1 10.1 val1
# 向sort set中添加一个元素zadd zset1 11.2 val2
zadd zset1 9.2 val3
zcard zset1
# 查看zset1中有几个元素zrange zset1 0 2 withscores
# 获取排名0-2的排名,带分数zrank zset1 val2
# 查看val2 在 zset1 中的排名zadd zset1 12.2 val3
# 将val3的score改为12.2zadd zset1 12.2 val2
zrange zset1 0 2 withscores
# 获取排名0-2的排名,带分数。val2和val3de分数一样,但是val2中的val等于val3中的val,2小于3,所以val2的排名高于val3
PHP操作Redis
[root@localhost ~]# php -m
查看PHP当前安装的扩展,查看是否已安装redis扩展[root@localhost ~]# which phpize
查看phpize命令的位置[root@localhost ~]# which php-config
查看php-config 命令的位置- 下载php-redis扩展,安装并打开扩展 (点击查看更多PHP-Redis操作)
[root@localhost ~]# git clone https://github.com/phpredis/phpredis.git # 从GitHub上把PHP-Redis代码下载下来
[root@localhost ~]# cd phpredis
[root@localhost ~]# phpize
[root@localhost ~]# ./configure --with-php-config=/usr/local/php/bin/php-config
[root@localhost ~]# make && make install
[root@localhost ~]# vim /usr/local/php/etc/php.ini # 开启 phpredis扩展
[root@localhost ~]# php -m # 查看redis扩展是否已打开
[root@localhost ~]# cd /data/wwwroot/redis # 进入www目录下的redis目录
[root@localhost ~]# vim connect.php
- string操作
<?php
$redis = new \Redis();
$redis->connect('127.0.0.1'); // 默认6379端口,如果你修改了端口,则为 $redis->connect('127.0.0.1',7200);
// string 操作
$redis->set('string1','value1');s
$val = $redis->get("string1");
echo $val;
echo PHP_EOL;
$redis->set('string1',4);
$val = $redis->get('string1');
echo $val;
echo PHP_EOL;
$redis->incr('string1',2);
$val = $redis->get('string1');
echo $val;
- list操作
<?php
$redis = new \Redis();
$redis->connect('127.0.0.1');
// list 操作
$redis->lPush("list1", "A"); // 从左边推入A
$redis->lPush("list1", "B"); // 从左边推入B
$redis->lPush("list1", "C"); // 从左边推入C
$val = $redis->rPop("list1"); // 从右边弹出
echo $val; // 遵循先入先出的原则,未弹出前,list的数值 为 C,B,A 使用rPop则弹出 A
- set操作
<?php
$redis = new \Redis();
$redis->connect('127.0.0.1');
// set 操作
$redis->sAdd('set1', "A");
$redis->sAdd('set1', "B");
$redis->sAdd('set1', "C");
$redis->sAdd('set1', "C"); // 由于set中元素必须唯一,所以实际上只插入了3个元素
$val = $redis->sCard("set1");
var_dump($val); // 3
$val = $redis->sMembers("set1");
var_dump($val);
/**
* array(3) {
* [0] => string(1) "A"
* [1] => string(1) "B"
* [2] => string(1) "C"
* }
*/
- hash操作
<?php
$redis = new \Redis();
$redis->connect('127.0.0.1');
// hash 操作
// 设置driver1的name
$redis->hSet('driver1', 'name', 'jack');
// 设置driver1的age
$redis->hSet('driver1', 'age', 25);
// 设置driver1的sex
$redis->hSet('driver1', 'sex', 1);
// hGet - 获取driver1的name值
$val = $redis->hGet('driver1', 'name');
var_dump($val);
// hMGet - 获取driver1的多个key的值
$val = $redis->hMGet('driver1', array('name','age'));
var_dump($val);
- sort set操作
<?php
$redis = new \Redis();
$redis->connect('127.0.0.1');
// sort set操作
// 往key值为zset1添加数据
$redis->zAdd('zset1', 90, 'userA'); // rank:2
$redis->zAdd('zset1', 99, 'userB'); // rank:1
$redis->zAdd('zset1', 70, 'userC'); // rank:4
$redis->zAdd('zset1', 80, 'userD'); // rank:3
// zRange(key, start, end);
$val = $redis->zRange('zset1', 0, -1); // 从低到高
var_dump($val);
$val = $redis->zRevRange('zset1', 0, -1); // 从高到低
var_dump($val);