redis常见使用场景下PHP实现

redis常见使用场景下PHP实现

基于redis字符串string类型的简单缓存实现

<?php
//简单字符串缓存

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

//缓存数据
$redis->set('cache_key',json_encode(['data'=>'这是缓存数据']));

//获取缓存数据
$data = $redis->get('cache_key');
print_r(json_decode($data,true));

基于redis列表list类型的简单队列实现

<?php

//利用列表list实现简单队列
$redis = new \Redis();
$redis->connect('localhost',6379);

//进队列
$redis->rpush('queue_name',json_encode(['user_id'=>5]));
$redis->rpush('queue_name',json_encode(['user_id'=>6]));
$redis->rpush('queue_name',json_encode(['user_id'=>7]));

echo "数据进队列完成\n";

//可查看队列
$res = $redis->lrange('queue_name',0,1000);
print_r($res);

//出队列
$redis->lpop('queue_name');

//查看队列
$res = $redis->lrange('queue_name',0,1000);
print_r($res);

基于redis事务的乐观锁实现

<?php

//实现乐观锁机制

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

//监视count的值
$redis->watch('count');

//开启事务
$redis->multi();

//操作count
$redis->set('count',time());

//--------------------------------
//模拟并发下其他进程对count的操作
//redis-cli 执行 $redis->set('count','is simulate');
sleep(10);
//--------------------------------

//提交事务
$res = $redis->exec();

if($res){
    echo 'sucesss';
    return;
}else{
    echo 'fail';
}

基于redis的发布订阅实现

发布publish.php

<?php
//发布

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

$redis->publish('msg','来自xxx频道的消息推送');
echo '消息推送成功';

$redis->close();

 

订阅subscribe.php

<?php
//订阅

//ini_set('default_socket_timeout',-1);

$redis = new \Redis();
$redis->pconnect('localhost',6379);

//订阅
echo "订阅频道等待消息推送\n";

$redis->subscribe(['msg'],'callfun'); //msg 是频道名

//回调
function callfun($redis,$channel,$msg){
    print_r(['redis'=>$redis,'channel'=>$channel,'msg'=>$msg]);
}

 

 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/113831.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python 之免费ip代理池[通俗易懂]

    python 之免费ip代理池[通俗易懂]基于proxy_pool,部署了一个开放的免费ip代理池,提供出来供大家使用。数据有效性每2分钟更新一次。地址:http://proxy.linuxdba.ltd/all/开源项目地址:https://github.com/jhao104/proxy_pool

    2022年5月29日
    61
  • 35道SpringBoot面试题及答案,面试常被问到「建议收藏」

    35道SpringBoot面试题及答案,面试常被问到「建议收藏」作者:Arain|来源于:程序员面试SpringBoot是微服务中最好的Java框架.我们建议你能够成为一名SpringBoot的专家。本文精选了三十五个常见的SpringBoot知识点,祝你一臂之力!问题一SpringBoot、SpringMVC和Spring有什么区别?1、SpringSpring最重要的特征是依赖注入。所有SpringM…

    2022年6月7日
    34
  • USB协议详解

    USB协议详解本博客整理自网络,仅供学习参考,如有侵权,联系删除。邮箱:rom100@163.com一个transfer(传输)由一个或多个transaction(事务)构成,一个transaction(事务)由一个或多个packet(包)构成,一个packet(包)由一个或多个sync(域)构成。1.传输数据通信USB的数据通讯首先是基于传输(transfer)的,传输的类型有:中断传输、批量传输…

    2022年6月29日
    44
  • 从零开始学习UCOSII操作系统3–UCOSII启动过程「建议收藏」

    从零开始学习UCOSII操作系统3–UCOSII启动过程「建议收藏」从零开始学习UCOSII操作系统3–UCOSII启动过程1、初始化UCOSII(1)在调用UCOSII在任何的其他的服务之前,UCOSII要求首先调用初始化函数OSInit();这个函数的目的就是在整个系统启动之前,初始化所有的变量和数据结构。(2)其中,在OSInit()函数中建立空闲任务OS_TaskIdle();这个任务总是处于就绪态的,空闲任务的优先级是设置为最低

    2022年6月4日
    28
  • @RestController 和 @Controller 的区别[通俗易懂]

    @RestController 和 @Controller 的区别[通俗易懂]@RestController注解,相当于@Controller+@ResponseBody两个注解的结合,返回json数据不需要在方法前面加@ResponseBody注解了,但使用@RestController这个注解,就不能返回jsp,html页面,视图解析器无法解析jsp,html页面理解下面的注解哦。@ResponseBody表示该方法的返回结果直接写入HTTPrespons…

    2022年6月15日
    57
  • 编译QCAD_qt 编译

    编译QCAD_qt 编译开源二维CAD程序QCAD的编译说明。

    2022年8月4日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号