logo头像

科技始终来源于人性!

Redis基础入门

一、什么是Redis

Redis是远程的,基于内存的,非关系型数据库


二、Redis 应用场景

1、缓存
缓存数据

2、队列
list 实现队列

3、数据存储


三、Redis 安装

1、服务器环境: Linux / Centos

2、Redis

3、预装 gcc tcl
yum install gcc-c++

【安装步骤】
1、下载 Redis
wget http://download.redis.io/releases/redis-5.0.5.tar.gz

2、解压 Redis
tar -xf redis-5.0.5.tar.gz
解压后,进入源码目录,执行 make 命令。
安装完后页面:

3、将 src 目录下二进制文件安装到 /usr/local/bin 下。
执行命令 sudo make install

4、配置项
一般 redis 参考的默认配置文件为解压目录下的 redis.conf ,先把该文件复制到其他目录下,并对其进行配置项修改。

1
2
3
4
5

daemonize no //改为yes ,配置redis server 后台进程启动

port 6379 //默认端口 7200

5、启动 Redis server

1
2
3
/usr/local/bin/redis-server /opt/redis/config/redis.conf //以配置项启动redis-server
ps aux|grep redis-server //查看进程是否开启成功
kill -9 XX //杀死进程

Redis 客户端

1
2
3
4
5
6
#redis-cli --help 
redis-cli -h 127.0.0.1 -p 7200

[root@izwz94ryybsa2lcqvewvzqz redis-5.0.5]# redis-cli -h 127.0.0.1 -p 7200
127.0.0.1:7200> info


四、Redis 数据类型以及各数据类型的使用场景

数据类型 存储的值 读写能力
String 字符串、整数或浮点,统称为元素 对字符串操作
对整数类型加减
List 序列集合且每个节点包含一个元素 序列两端推入、或弹出元素
修建、查找或移除元素
Set 各不相同的元素 从集合中插入或删除元素
Hash 有key-value 的散列组
key 是字符串,value 是元素
按照key 进行增加删除
Sort Set 带分数的score-value有序集合
score 为浮点,value 是元素
集合插入,按照分数范围查找

【String】
key | value(string/int/float)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
127.0.0.1:7200> set string1 eric
OK
127.0.0.1:7200> get string1
"eric"
127.0.0.1:7200> set string2 4
OK
127.0.0.1:7200> get string2
"4"
127.0.0.1:7200> incr string2
(integer) 5
127.0.0.1:7200> get string2
"5"
127.0.0.1:7200> decr string2
(integer) 4
127.0.0.1:7200> decrby string2 2
(integer) 2

【List】
列表,元素不唯一

1
2
3
4
5
6
7
8
lpush list1 12 // 12
lpush list1 13 // 13 12

lindex list1 0 // 13

rpop list1 //12
#先进先出

【Set】
集合,元素唯一

1
2
3
sadd set1 redis
sadd set1 memcached
smembers set1

【Hash】
哈希

1
hset key field value # 将哈希表 key 中的字段 field 的值设为 value 。

【Sort Set】
有序集合

1
ZADD key score1 member1 [score2 member2]  # 向有序集合添加一个或多个成员,或者更新已存在成员的分数

五、操作 Redis

【服务器安装要求】

1、Linux 服务器 (这里使用 Centos )

2、PHP 5.3 (phpize / php-config ) 以上,具体和下载的 redis 要求版本一致

3、PHP redis 拓展

下载php-redis 拓展

1
wget https://github.com/phpredis/phpredis/archive/develop.zip

make 出现错误

1
2
3
4
5
6
7
8
9
[root@izwz94ryybsa2lcqvewvzqz phpredis-develop]# make
/bin/sh /opt/phpredis-develop/libtool --mode=compile cc -I. -I/opt/phpredis-develop -DPHP_ATOM_INC -I/opt/phpredis-develop/include -I/opt/phpredis-develop/main -I/opt/phpredis-develop -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -I/usr/include/php/ext -DHAVE_CONFIG_H -g -O2 -c /opt/phpredis-develop/redis.c -o redis.lo
libtool: compile: cc -I. -I/opt/phpredis-develop -DPHP_ATOM_INC -I/opt/phpredis-develop/include -I/opt/phpredis-develop/main -I/opt/phpredis-develop -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -I/usr/include/php/ext -DHAVE_CONFIG_H -g -O2 -c /opt/phpredis-develop/redis.c -fPIC -DPIC -o .libs/redis.o
In file included from /opt/phpredis-develop/redis.c:27:0:
/opt/phpredis-develop/common.h:12:28: fatal error: zend_smart_str.h: No such file or directory
#include <zend_smart_str.h>
^
compilation terminated.
make: *** [redis.lo] Error 1

make 出现错误,是因为下载的 redis 版本要求的PHP版本 和服务器的版本不一致导致的。最新版的redis,最低要求 PHP7.0 或以上。
原先服务器用的是php5.6,于是升级到php 7.1。首先卸载5.6 yum remove php-common
然后再安装PHP7.1

1
2
3
yum install -y php71w-fpm php71w-opcache php71w-cli php71w-gd php71w-imap 
php71w-mysqlnd php71w-mbstring php71w-mcrypt php71w-pdo php71w-pecl-apcu php71w-pecl-mongodb
php71w-pecl-redis php71w-pgsql php71w-xml php71w-xmlrpc php71w-devel mod_php71w

make && make install 成功

下一步,更改 php.ini 文件,加载 redis.so 模块
extention=redis.so

使用命令php -m 查看加载的模块,即可看到已经加载 redis


【PHP 如何连接 redis 】
phpredis 文档
https://github.com/phpredis/phpredis

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$redis = new \Redis();
$redis->connect('127.0.0.1',7200);

//string 操作,保存json
$redis->delete("string1");

$redis->set("string1","val1");

$val = $redis->get("string1");

var_dump($val);

$redis->set("string1",4);

$redis->incr("string1",2);

$val = $redis->get("string1");

var_dump($val);
1
2
3
4
5
6
7
8
9
10
11
12
13
14

//list 实现队列,先进先出,异步行为
$redis->delete("list1");

$redis->lPush("list1","A");

$redis->lPush("list1","B");

$redis->lPush("list1","C");

$val = $redis->rPop("list1");

var_dump($val);//输出A

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//set 唯一集合
$redis->delete("set1");

$redis->sAdd("set1","A");

$redis->sAdd("set1","B");

$redis->sAdd("set1","C");

$redis->sAdd("set1","C");

$val = $redis->sCard("set1");
var_dump($val);

var_dump($redis->sMembers("set1"));
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//hash 一般用于存储复杂属性

$redis->delete("driver1");

$redis->hSet("driver1","name","shayvmo");

$redis->hSet("driver1","age",25);

$redis->hSet("driver1","gender",1);

var_dump($redis->hGet("driver1","name");

var_dump($redis->hMGet("driver1","name","age");

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// sort set 排行榜
// zAdd zRange 分数低到高 zRevRange 高到低

$redis->delete("zset1");

$redis->zAdd("zset1",100,'shayvmo');
$redis->zAdd("zset1",88,'shayvmo88');
$redis->zAdd("zset1",97,'shayvmo97');
$redis->zAdd("zset1",93,'shayvmo93');

var_dump($redis->zRange("zset1",0,-1));//分数低到高全部返回

var_dump($redis->zRevRange("zset1",0,-1));//分数高到低全部返回

var_dump($redis->zRevRange("zset1",0,-1,true));//分数高到低全部返回,并返回分数

【注意事项】
运行PHP 文件时,出错

1
2
PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/redis.so' 
- /usr/lib64/php/modules/redis.so: undefined symbol: php_json_decode_ex in Unknown on line 0

解决方法: 去掉php.ini 中的 extension=redis.so
来源链接:链接

【最后更新时间】
2019年9月14日16:39:26