很多站长朋友们都不太清楚phpredis实例化,今天小编就来给大家整理phpredis实例化,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 thinkphp5框架扩展redis类方法示例 2、 订单超时,活动过期解决方案:php监听redis键重复触发引发事件 3、 thinkphp如何使用redis 有简单的示例代码吗 4、 php使用redis为什么总是会出现错误? thinkphp5框架扩展redis类方法示例本文实例讲述了thinkphp5框架扩展redis类方法。分享给大家供大家参考,具体如下:
笔者在开发时发现,thinkphp5的自带redis类方法,只有简单的读取缓存、写入缓存的基本方法,远不能满足我们业务的需求。redis本身支持五种数据类型,string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)。redis的东西就不必再介绍了,接下来还是让我一起扩展thinkphp5的redis方法吧!
首先我们先找到缓存驱动类里的,handler()方法,这个方法是返回Redis类的实例化对象的。
这就是实例化对象,包括了options配置项、handler资源句柄、tag标签。实际上这里的handler是new
Redis()的对象实例。只要在外部拿到handler资源句柄,则可以对redis的操作进行扩展了。
在cache类里新增一个getHandler方法。
然后我们就可以在控制器调用了
打印的就是这个redis对象了
这里需要注意的是:
一个是调thinkphp5的redis的方法,就是这样用。
一个是如果你要调用原生的redis方法
基本的用法都讲完了。
接下来就愉快的开始扩展redis方法吧。
先找到这个类
这个类里并没有list的相关操作方法,那我们就来扩展list的相关方法。
这里的话,我就举一个例子了。
在控制器里去调用
这样就写入成功了。
更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend
FrameWork框架入门教程》及《PHP模板技术总结》。
希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。
您可能感兴趣的文章:针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例ThinkPHP行为扩展Behavior应用实例详解ThinkPHP应用模式扩展详解ThinkPHP框架设计及扩展详解ThinkPHP的Widget扩展实例老生常谈ThinkPHP中的行为扩展和插件(推荐)TP5(thinkPHP5)框架mongodb扩展安装及特殊操作示例thinkPHP下的widget扩展用法实例分析thinkPHP3.2.2框架行为扩展及demo示例ThinkPHP5.0框架验证码功能实现方法【基于第三方扩展包】thinkphp5框架实现的自定义扩展类操作示例
订单超时,活动过期解决方案:php监听redis键重复触发引发事件订单超时,活动过期解决方案:php监听redis键重复触发引发事件
Redis的2.8.0版本之后可用,键空间消息(Redis Keyspace Notifications),配合2.0.0版本之后的SUBSCRIBE 可以完成这个定时任务的操作了,定时的单位是秒。
1.我们先订阅频道称为 redisChat
2.现在,我们重新开启个redis客户端,然后在同一个频道redisChat发布消息,订阅者可以接收到消息。
接收到的消息如下:
3.Key过期事件的Redis配置
需要这里配置notify-keyspace-events的参数为“EX” .X代表了过期事件。notify-keyspace-events “Ex”保存配置后,重启Redis的服务,使配置生效。
PHP Redis实现订阅键空间通知
redis实例化类:
redis.class.php
1个
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18岁
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
//遇到类别重复的报错,所有叫Redis2
classRedis2
{
private$redis;
publicfunction__construct($host= '127.0.0.1', $port= 6379)
{
$this->redis = newRedis();
$this->redis->connect($host, $port);
}
publicfunctionsetex($key, $time, $val)
{
return$this->redis->setex($key, $time, $val);
}
publicfunctionset($key, $val)
{
return$this->redis->set($key, $val);
}
publicfunctionget($key)
{
return$this->redis->get($key);
}
publicfunctionexpire($key= null, $time= 0)
{
return$this->redis->expire($key, $time);
}
publicfunctionpsubscribe($patterns= array(), $callback)
{
$this->redis->psubscribe($patterns, $callback);
}
publicfunctionsetOption()
{
$this->redis->setOption(\Redis::OPT_READ_TIMEOUT, -1);
}
}
过期事件的订阅:
psubscribe.php
1个
2
3
4
5
6
7
8
9
10
11
12
13
14
15
require_once'./Redis.class.php';
$redis= new\Redis2();
// 解决Redis客户端订阅时候超时情况
$redis->setOption();
$redis->psubscribe(array('__keyevent@0__:expired'), 'keyCallback');
// 回调函数,这里写处理逻辑
functionkeyCallback($redis, $pattern, $chan, $msg)
{
echo"Pattern: $pattern\n";
echo"Channel: $chan\n";
echo"Payl
oad: $msg\n\n";
//keyCallback为订阅事件后的回调函数,这里写业务处理逻辑,
//比如前面提到的商品不支付自动撤单,这里就可以根据订单id,来实现自动撤单
}
设置过期事件:
index.php
1个
2
3
4
require_once'./Redis.class.php';
$redis= new\Redis2();
$order_id= 123;
$redis->setex('order_id',10,$order_id);
先用命令行模式执行 psubscribe.php
在浏览器访问 index.php
效果如下:
thinkphp如何使用redis 有简单的示例代码吗$redis = new \think\cache\driver\Redis();//实例化Think的Redis驱动
$redis->has('键名');//判断redis值是否存在
$redis->get('键名');//获取redis的某个值;
$redis->set('键名','键值');//设置redis值
$redis->inc('键名',进长[默认为1]);//自增缓存。只对数字整型有效
$redis->dec('键名',进长[默认为1]);//自减缓存。只对数字整型有效
$redis->rm('键名');//删除缓存
$redis->clear();//清空缓存
php使用redis为什么总是会出现错误?你的php是VC6编译的 你的php_redis.dll是VC9编译的导致不兼容。 找个VC6的php_redis.dll或重装个VC9的php都可以。
关于phpredis实例化的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。
查看更多关于phpredis实例化 phpredis数据类型的详细内容...