位置: 编程技术 - 正文

php中Redis的应用--消息传递(php redis常用命令)

编辑:rootadmin

推荐整理分享php中Redis的应用--消息传递(php redis常用命令),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:php redis incr,php使用redis缓存技术,php8 redis,php+redis,php redis incr,php7 redis,php redis incr,php redis常用命令,内容如对您有帮助,希望把文章链接给更多的朋友!

阅读目录

1、摘要

2、实现方法

3、一对一消息传递

4、多对多消息传递

1、摘要

消息传递这一应用广泛存在于各个网站中,这个功能也是一个网站必不可少的。常见的消息传递应用有,新浪微博中的@我呀、给你评论然后的提示呀、赞赞赞提示、私信呀、甚至是发微博分享的新鲜事;知乎中的私信呀、live发送过来的消息、知乎团队消息呀等等。

2、实现方法

消息传递即两个或者多个客户端在相互发送和接收消息。

通常有两种方法实现:

第一种为消息推送。Redis内置有这种机制,publish往频道推送消息、subscribe订阅频道。这种方法有一个缺点就是必须保证接收者时刻在线(即是此时程序不能停下来,一直保持监控状态,假若断线后就会出现客户端丢失信息)

第二种为消息拉取。所谓消息拉取,就是客户端自主去获取存储在服务器中的数据。Redis内部没有实现消息拉取这种机制。因此我们需要自己手动编写代码去实现这个功能。

在这里我们,我们进一步将消息传递再细分为一对一的消息传递,多对多的消息传递(群组消息传递)。

【注:两个类的代码相对较多,因此将其折叠起来了】

3、一对一消息传递

例子1:一对一消息发送与获取

模块要求:

1、提示有多少个联系人发来新消息

2、信息包含发送人、时间、信息内容

3、能够获取之前的旧消息

4、并且消息能够保持7天,过期将会被动触发删除

Redis实现思路:

1、新消息与旧消息分别采用两个链表来存储

2、原始消息的结构采用数组的形式存放,并且含有发送人、时间戳、信息内容

3、在推入redis的链表前,需要将数据转换为json类型然后再进行存储

4、在取出新信息时应该使用rpoplpush来实现,将已读的新消息推入旧消息链表中

5、取出旧消息时,应该用旧消息的时间与现在的时间进行对比,若超时,则直接删除后面的全部数据(因为数据是按时间一个一个压进链表中的,所以对于时间是有序排列的)

数据存储结构图:

php中Redis的应用--消息传递(php redis常用命令)

PHP的实现代码:

#SinglePullMessage.class.php

测试:

1、发送消息

#建立test1.php

2、获取新消息

#建立test2.php

访问结果:

3、获取旧消息

#建立test3.php

4、多对多消息传递

例子2:多对多消息发送与获取(即是群组)

模块要求:

1、用户能够自行创建群组,并成为群主

2、群主可以拉人进来作为群组成员、并且可以踢人

3、用户可以直接退出群组

4、可以发送消息,每一位成员都可以拉取消息

5、群组的消息最大容纳量为条

6、成员可以拉取新消息,并提示有多少新消息

7、成员可以分页获取之前已读的旧消息

。。。。。功能就写这几个吧,有需要或者想练习的同学们可以增加其他功能,例如禁言、匿名消息发送、文件发送等等。

Redis实现思路:

1、群组的消息以及群组的成员组成采用有序集合进行存储。群组消息有序集合的member存储用户发送的json数据消息,score存储唯一值,将采用原子操作incr获取string中的自增长值进行存储;群组成员有序集合的member存储user,score存储非零数字(在这里这个score意义不大,我的例子代码中使用数字1为群主的score,其他的存储为2。当然这使用这个数据还可以扩展别的功能,例如群组中成员等级)可参考下面数据存储结构简图。

2、用户所加入的群组也是采用有序集合进行存储。其中,member存储群组ID,score存储用户已经获取该群组的最大消息分值(对应群组消息的score值)

3、用户创建群组的时候,通过原子操作incr从而获取一个唯一ID

4、用户在群中发送消息时,也是通过原子操作incr获取一个唯一自增长有序ID

5、在执行incr时,为防止并发导致竞争关系,因此需要进行加锁操作【redis详细锁的讲解可以参考:Redis构建分布式锁

php安全配置记录和常见错误梳理(总结) 通常部署完php环境后会进行一些安全设置,除了熟悉各种php漏洞外,还可以通过配置php.ini来加固PHP的运行环境,PHP官方也曾经多次修改php.ini的默认设置

谈谈从phpinfo中能获取哪些值得注意的信息 phpinfo函数phpinfo函数PHP中提供了PHPInfo()函数,该函数返回PHP的所有信息,包括了PHP的编译选项及扩充配置、PHP版本、服务器信息及环境变量、PHP环境变量

Redis构建分布式锁 1、前言为什么要构建锁呢?因为构建合适的锁可以在高并发下能够保持数据的一致性,即客户端在执行连贯的命令时上锁的数据不会被别的客户端的更

标签: php redis常用命令

本文链接地址:https://www.jiuchutong.com/biancheng/293389.html 转载请保留说明!

上一篇:php实现留言板功能(代码详解)(php实现留言板功能)

下一篇:php安全配置记录和常见错误梳理(总结)(php最安全的登录功能)

  • 土地增值税要计增值税吗
  • 以固定资产投资的会计处理
  • 偶然所得代扣代缴义务人
  • 公司注销章要销毁吗
  • 成品油经销企业开具的成品油电子专用发票
  • 对税务机关的加强措施
  • 土地租金计入哪个会计科目
  • 代开的专用发票如何开具红字发票
  • 小规模纳税人开专票税率是1%还是3%
  • 合并报表时存货怎么处理
  • 微信支付工资怎么做账
  • 公司租房子出去物业费可以代付吗
  • 印花税计入税金及附加吗
  • 企业为员工购买的补充医疗保险
  • 专票开错了可以作废吗
  • 对外工程承包企业
  • 信用担保对中小企业的作用
  • 企业收到贷款贴息会计分录
  • mac系统如何开启任何来源
  • 水利基金返还分录怎么写
  • 小规模纳税人销售自己使用过的固定资产税率
  • 如何查看电脑是什么牌子
  • win11多开
  • Win10怎么显示文件类型
  • PHP:rawurlencode()的用法_url函数
  • 购买财务软件会有操作流程吗
  • 沃特金斯格伦州立公园
  • vuecli非根目录打包
  • 合并资产负债表模板
  • 调频连续波雷达
  • 监事和财务负责人可以一个人么
  • postman操作流程
  • 报税扣款锁定怎么处理
  • 企业一次性收取租金如何缴纳增值税
  • vmware虚拟机安装在移动硬盘
  • linux用mv文件移动指定文件
  • 低值易耗品费用计入什么科目
  • 现金流量表哪些数据和资产负债表一致
  • python一元二次方程求根
  • 关联方利息支出税前扣除规定
  • 代扣代缴增值税附加税减免政策
  • 支付对价的公允价值的处理
  • 企业所得税营业收入怎么填
  • 固定资产盘盈属于其他业务收入吗
  • 更正申报会扣分吗
  • 公司申请破产后债务谁来还
  • 固定资产盘盈为什么计入管理费用
  • 广告制作费怎么入账
  • 营改增有关事项的规定
  • 个体户是什么概念
  • 个人独资企业法人可以发工资吗
  • 公司组织员工吃饭或举行活动的行为被称为什么
  • 财务费用结转时会计分录
  • 个体工商户员工如何报生育险
  • 收到技术服务费的账务处理
  • 福利费与工会经费使用区别
  • 个人公积金计入什么科目
  • 体检费用开发票给公司怎么开
  • 结转已售材料成本6000元
  • 预交企业所得税计算
  • 企业残保金如何计算
  • 私营企业算固定收入吗
  • sqlserver存储过程返回多个结果集
  • centos7 nis
  • centos 终端
  • nddeagnt.exe - nddeagnt是什么进程 有什么用
  • cocos2dx怎么打开
  • excel如何制作登录界面代码
  • app的架构设计
  • python的日志
  • 用jquery制作轮播图效果
  • python编码函数
  • 适合当前端的手机
  • 怎么检测python
  • javascript编程技术
  • Unity NGUI Tween的用法
  • jquery树形菜单
  • 房地产开发企业会计制度
  • 上海国家税务局官网发票查验平台
  • 票种删除需要怎么弄
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设