首页 > 技术文章 > redis(以php代码为例)

zhengchuzhou 2018-11-01 21:16 原文

 

备注:redis及phpredis扩展安装请查看:PHP典型功能与Laravel5框架开发学习笔记

redis具有原子性,所以在高并发情况下确保数据的一致性

一、连接

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

一、key-value

1、选择数据库

$redis->select(2);

2、设置:set

$redis->set('name', 'jimu');

3、获取:get

$redis->get('name');

4、删除:del

$redis->del('name');

5、判断键是否存在:exists

$redis->exists('name');

6、如果键值不存在则设置,存在则不做任何操作:setnx(SET if Not eXists)

$redis->setnx('age', 22);

7、自增、自减:incr、decr、incrBy、decrBy

$key = 'libdata:pv';
$redis->incrBy($key, 3);
$key = 'libdata:pv';
$redis->decrBy($key, 1);

8、键名一般按照模块从大到小来设计,以冒号分隔,如user:info:1,这样的好处是层级关系清晰,客户端显示如下

二、hash,以下方法和key-value的方法一一对应

1、hSet

$redis->hSet('user:a', 'age', 20);

2、hGet

$redis->hGet('user:a', 'age');

3、hDel

$redis->hDel('user:a', 'age');

4、hExists

$redis->hExists('user:a', 'age');

5、hSetNx

$redis->hSetNx('user:a', 'age', 23);

三、list

1、lPush、rPush

//    先队列头添加数据
$redis->lPush('list', 0);
//    先队列尾添加数据
$redis->rPush('list', 2);

2、lPop、rPop

//    先队列头取出数据
$redis->lPop('list');
//    先队列尾取出数据
$redis->rPop('list');

3、lSet:给指定的索引赋值

$redis->lSet('list', 0, 10);

4、lLen:获取数组的长度

$len = $redis->lLen('list');

5、lRange:获取索引从1到索引3的值

$res = $redis->lRange('list', 1, 3);
var_dump($res);

6、lTrim:删除选中范围外的数据,返回bool值

$redis->lTrim('list', 1, 3);

执行前数据:

执行后:

四、set:特点:无序、键值不重复

1、sAdd:

$redis->sAdd('fruit', 'apple');
$redis->sAdd('fruit', 'banana');
$redis->sAdd('fruit', 'watermelon');
$redis->sAdd('fruit', 'watermelon');

 

2、sMembers:返回集合的所有成员

$res = $redis->sMembers('fruit');

3、sCard:返回成员个数

$num = $redis->sCard('fruit');

4、sPop:随机取出一个成员

$fruit = $redis->sPop('fruit');

5、sDiff:求差集,及第一个集合中有而其他集合中没有的成员

$fruit1 = $redis->sAdd('fruit:1', 'apple');
$fruit1 = $redis->sAdd('fruit:1', 'banana');

$redis->sAdd('fruit:2', 'banana');
$redis->sAdd('fruit:2', 'watermelon');

$diff = $redis->sDiff('fruit:1', 'fruit:2');
var_dump($diff);

五、发布订阅

1、监听者代码:sub.php

<?php
//    监听者
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
echo "reading c1 c2...\n";
$redis->setOption(Redis::OPT_READ_TIMEOUT, -1);  //  设置不超时
$redis->subscribe(['c1', 'c2'], function(Redis $instance, $channel, $message) {
    echo "recieve message from {$channel}: {$message}\n";
});

2、发布者代码:pub.php

<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

$num = $redis->publish('c1', 'hi, c1');
//    返回监听者的个数
echo "client:{$num}\n";

$num = $redis->publish('c2', 'hi, c2');
//    返回监听者的个数
echo "client:{$num}\n";

 3、执行及显示:

3.1、先开启监听者:

3.2、发布消息:

3.3、监听者收到消息:

 

推荐阅读