Redis介绍
- Redis是远程的, 客户端与服务端可部署在不同的机器上, 通过自定义的协议进行传输和交互
- Redis是基于内存的, 其结构与数据都存在内存中, 所以操作会很高速, 性能远远高于基于硬盘的Mysql, 也很吃内存
- Redis是非关系型数据库( 其本质是存储数据的数据库, 其具有硬盘持久化机制, 可以将内存中的数据写入硬盘, 保证数据的完整性和安全性 ), Mysql为关系型数据库, 存储前需要定义字典, 然后按照定制的字典进行存储, 而Redis不需要定义字典就可存储
- 应用场景
a. 缓存
b.队列
c. 数据存储
Redis 安装(服务端, 客户端)
- 系统Centos7, PHP7.2, 从官网下载稳定版源码包
[root@localhost chao]# ls
redis-5.0.5.tar.gz
[root@localhost chao]# php -v
PHP 7.2.24 (cli) (built: Oct 26 2019 12:28:19) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.24, Copyright (c) 1999-2018, by Zend Technologies
[root@localhost chao]#
- 解压源码包
[root@localhost chao]# tar -xf redis-5.0.5.tar.gz
[root@localhost chao]# ll
total 1936
drwxrwxr-x. 6 root root 4096 May 16 2019 redis-5.0.5
-rw-r--r--. 1 root root 1975750 Dec 19 14:46 redis-5.0.5.tar.gz
- 进入源码目录进行make操作
[root@localhost chao]# cd redis-5.0.5/
[root@localhost redis-5.0.5]# make
- 查看生成的二进制文件
[root@localhost redis-5.0.5]# ll src/redis*
- make install 将生成的文件放在 usr/local/bin文件下
[root@localhost redis-5.0.5]# sudo make install
....
[root@localhost redis-5.0.5]# which redis-server
/usr/local/bin/redis-server
- 修改配置文件
[root@localhost redis-5.0.5]# cp redis.conf /home/chao/config/redis/redis.conf
[root@localhost redis-5.0.5]# vim /home/chao/config/redis/redis.conf
...
// no 改为后台启动 yes
daemonize yes
...
// 多实例以及安全性考虑 修改默认端口
port 7200
...
- 使用源码文件下的 redis.conf 配置文件 启动Redis
[root@localhost redis-5.0.5]# redis-server /home/chao/config/redis/redis.conf
- 查看Redis是否启动
[root@localhost redis-5.0.5]# ps aux|grep redis-server
root 12286 0.2 0.7 153896 7652 ? Ssl 15:24 0:00 redis-server 127.0.0.1:7200
root 12291 0.0 0.0 112712 968 pts/0 S+ 15:24 0:00 grep --color=auto redis-server
Redis客户端使用
- 查看客户端位置
[root@localhost redis-5.0.5]# which redis-cli
/usr/local/bin/redis-cli
- 启动 (默认会6379端口启动)
[root@localhost redis-5.0.5]# redis-cli
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected>
// 拒绝后, Ctrl+C中断
// 指定端口启动
[root@localhost redis-5.0.5]# redis-cli -h 127.0.0.1 -p 7200
127.0.0.1:7200>
- 查看redis-server的当前状态
127.0.0.1:7200> info
Redis数据类型
- string类型
127.0.0.1:7200> set name laowang
OK
127.0.0.1:7200> get name
"laowang"
127.0.0.1:7200> set age 18
OK
127.0.0.1:7200> incr age
(integer) 19
127.0.0.1:7200> decr age
(integer) 18
127.0.0.1:7200>
- list类型 (有序且不要求集合里的元素是唯一的)
// 左边推入
127.0.0.1:7200> lpush list1 12
(integer) 1
127.0.0.1:7200> lpush list1 13
(integer) 2
// 右边弹出 先入先出
127.0.0.1:7200> rpop list1
"12"
// 左边弹出 后入先出
127.0.0.1:7200> lpop list1
"13"
// list 元素可以重复
127.0.0.1:7200> lpush list2 12
(integer) 1
127.0.0.1:7200> lpush list2 13
(integer) 2
127.0.0.1:7200> lpush list2 12
(integer) 3
127.0.0.1:7200> llen list2
(integer) 3
127.0.0.1:7200>
- set类型( 无序且元素唯一 )
// 插入一个元素
127.0.0.1:7200> sadd set1 12
(integer) 1
// 查看该集合有几个元素
127.0.0.1:7200> scard set1
(integer) 1
127.0.0.1:7200> sadd set1 13
(integer) 1
// 重复的元素插入失败
127.0.0.1:7200> sadd set1 13
(integer) 0
127.0.0.1:7200> scard set1
(integer) 2
127.0.0.1:7200>
// 查看元素是否存在该集合中
127.0.0.1:7200> sismember set1 13
(integer) 1
127.0.0.1:7200> sismember set1 15
(integer) 0
// 删除元素
127.0.0.1:7200> srem set1 13
(integer) 1
127.0.0.1:7200> sismember set1 13
(integer) 0
127.0.0.1:7200>
- hash类型( 散列类型 )
// 插入
127.0.0.1:7200> hset hash1 key1 12
(integer) 1
// 根据key值获取
127.0.0.1:7200> hget hash1 key1
"12"
127.0.0.1:7200> hset hash1 key2 13 key3 15
(integer) 2
127.0.0.1:7200> hget hash1 key3
"15"
// 获取多个
127.0.0.1:7200> hmget hash1 key1 key2 key3
1) "12"
2) "13"
3) "15"
// 修改值
127.0.0.1:7200> hset hash1 key2 999
(integer) 0
127.0.0.1:7200> hget hash1 key2
"999"
- sort set类型 (有序分数集)
// 插入
127.0.0.1:7200> zadd zset1 10.1 val1
(integer) 1
127.0.0.1:7200> zadd zset1 11.2 val2
(integer) 1
127.0.0.1:7200> zadd zset1 9.2 val333333333333333
(integer) 1
// 查看元素个数
127.0.0.1:7200> zcard zset1
(integer) 3
// 查看排序 从0到2
127.0.0.1:7200> zrange zset1 0 2 withscores
1) "val333333333333333"
2) "9.1999999999999993"
3) "val1"
4) "10.1"
5) "val2"
6) "11.199999999999999"
// 查看某个元素的排名
127.0.0.1:7200> zrank zset1 val1
(integer) 1
127.0.0.1:7200> zrank zset1 val2
(integer) 2
127.0.0.1:7200> zrange zset1 0 2 withscores
1) "val333333333333333"
2) "9.1999999999999993"
3) "val1"
4) "10.1"
5) "val2"
6) "11.199999999999999"
// 修改val2值的score值
127.0.0.1:7200> zadd zset1 8.2 val2
(integer) 0
// 排序变化
127.0.0.1:7200> zrange zset1 0 2 withscores
1) "val2"
2) "8.1999999999999993"
3) "val333333333333333"
4) "9.1999999999999993"
5) "val1"
6) "10.1"
127.0.0.1:7200>
// 将val1 与 val2 的score相同, 则按照值的字符前后顺序排序
127.0.0.1:7200> zadd zset1 8.2 val1
(integer) 0
127.0.0.1:7200> zrange zset1 0 2 withscores
1) "val1"
2) "8.1999999999999993"
3) "val2"
4) "8.1999999999999993"
5) "val333333333333333"
6) "9.1999999999999993"
127.0.0.1:7200>
安装PHP的Redis扩展
- 服务器环境: Linux/ CentOS7, PHP7.2, 查看PHP的扩展
[root@localhost redis-5.0.5]# php -m
- 安装 phpize / php-config 编译工具并查看其位置
[root@localhost redis-5.0.5]# yum install php-devel
......
[root@localhost redis-5.0.5]# which phpize
/usr/bin/phpize
[root@localhost redis-5.0.5]# which php-config
/usr/bin/php-config
- 下载PHP Redis扩展
[root@localhost chao]# wget https://github.com/edtechd/phpredis/archive/php7.zip
......
[root@localhost chao]# ls
config php7.zip redis-5.0.5
- 安装
// 解压
[root@localhost chao]# unzip php7.zip
[root@localhost chao]# cd phpredis-php7/
[root@localhost phpredis-php7]# phpize
Configuring for:
PHP Api Version: 20170718
Zend Module Api No: 20170718
Zend Extension Api No: 320170718
[root@localhost phpredis-php7]#
// 配置环境 php-config位置 在上面2中找到
[root@localhost phpredis-php7]# ./configure --with-php-config=/usr/bin/php-config
// 编译安装
[root@localhost phpredis-php7]# make && make install
- 配置php.ini
// 查找 php.ini 的位置
[root@localhost phpredis-php7]# php --ini
......
// 编辑 php.ini
[root@localhost phpredis-php7]# vim /etc/php.ini
//增加
extension=redis.so
- 确认是否安装成功
[root@localhost phpredis-php7]# php -m
PHP操作Redis
文档地址: https://github.com/phpredis/phpredis
// redis 连接
$redis = new \Redis();
$redis->connect('127.0.0.1', 7200);
// string 操作
$redis->delete('str1'); // 确保操作的key为空
$redis->set('str1','laowang');
$str = $redis->get('str1');
$redis->delete('age');
$redis->set('age',20);
$redis->incr('age');
$redis->decr('age', 2);
$age = $redis->get('age');
// list 操作 队列 先进先出, 实现异步行为(下单)
$redis->delete('list1');
$redis->lPush('list1', "a");
$redis->lPush('list1', "b");
$redis->lPush('list1', "c");
$list = $redis->rPop('list1');
// set类型 操作
$redis->delete('set1');
$redis->sAddArray('set1', array("A", "B", "C", "C"));
$set = $redis->sCard('set1');
$set = $redis->sMembers('sets'); // 以数组形式返回所有的元素
// hash类型操作 适合存储复杂数据
$redis->delete('hash1');
$redis->hSet('hash1', 'name', 'laowang');
$redis->hSet('hash1', 'age', 25);
$redis->hSet('hash1', 'gender', 1);
$hash = $redis->hGet('hash1', 'name');
$hash = $redis->hMGet('hash1', ['name', 'age']); // 以数组形式返回
// sort set类型 操作 (排行榜)
$redis->delete('zset1');
$redis->zAdd('zset1', 100, 'a', 90, 'b', 99, 'd', 60, 'z');
// 0 z, 1 b, 2 d, 3 a
$zset = $redis->zRange('zset1', 0, -1); // 以数组形式 从低到高获取所有元素
// 0 a, 1 d, 2 b, 3 z
$zset = $redis->zRevRange('zset1', 0, -1); // 以数组形式 从高到低获取所有元素
来源:CSDN
作者:OldKind超
链接:https://blog.csdn.net/qq_36261130/article/details/103614426