redis在php中的使用(PHP+Redis开发的书签案例实战详解)
redis在php中的使用
PHP+Redis开发的书签案例实战详解本文实例讲述了php+redis开发的书签案例。分享给大家供大家参考,具体如下:
redis是一个key-value存储系统。和memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set 有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
场景
在项目开发过程中,相信大家都遇到过这样的场景——一个书籍表,一个书籍标签表,然后一本书可以有多个标签,这个场景就和csdn发布文章时的文章标签差不多。
问题:如果我要查询多个标签共同的书籍,那么必须将表关联查询,这样影响效率。我们可以使用redis来帮忙。
案例思路
在添加书籍的时候,需要添加书籍和标签,将书籍保存到mysql中,将标签保存到redis的set集合中,将每个标签看成一个set集合,然后每个标签保存的是书籍的id信息。如果需要查询多个标签共同的书籍,只需要将多个集合进行交集操作。
结果图
项目结构图
index.html文件
在这个页面是用来添加书籍的。
|
<!doctype html public "-//w3c//dtd xhtml 1.0 strict//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd" > <html xmlns= "http://www.w3.org/1999/xhtml" xml:lang= "en" > <head> <meta http-equiv= "content-type" content= "text/html;charset=utf-8" > <title>document</title> </head> <body> <form action= "add.php" method= "post" > <p>请输入书名:<input type= "text" name= "title" /></p> <p>请输入标签:<input type= "text" name= "tags" /></p> <p><input type= "submit" value= "提交" /></p> </form> </body> </html> |
add.php文件
这个文件主要处理添加书籍。
首先生成生成自增长的id,用来给书籍的id使用,然后将标签信息添加到redis中,最后使用pdo将书籍信息添加到数据库中。
|
<?php $redis = new redis(); $redis ->connect( 'localhost' ,6379); //生成自增长的id $bid = $redis ->incr( 'bid' ); //将标签信息添加到redis中 $tags = explode ( ',' ,trim( $_post [ 'tags' ], ',' )); foreach ( $tags as $t ){ $redis ->sadd( $t , $bid ); } //使用pdo将书籍信息添加到数据库中 $dsn = 'mysql:host=localhost;dbname=test' ; $pdo = new pdo( $dsn , 'root' , '1234' ); $pdo ->query( 'set names utf8' ); $sql = 'insert into book values(?,?)' ; $st = $pdo ->prepare( $sql ); $line = $st ->execute([ $bid , $_post [ 'title' ]]); if ( $line != 0){ echo '添加书籍成功' ; } |
search.php文件
这个文件主要处理搜索界面,也就是上面效果图的界面。首先创建一个redis对象并进行连接,然后获取地址栏的标签,然后将标签转换为数组,计算出用户输入标签的数量,因为每个标签都对应redis中的集合,所以给这几个集合取交集就可以了。
|
<?php $redis = new redis(); $redis ->connect( 'localhost' ,6379); $tags = explode ( ',' ,trim( $_get [ 'tags' ], ',' )); $len = count ( $tags ); if ( $len == 1){ var_dump( $redis ->smembers( $tags [0])); } else if ( $len == 2){ var_dump( $redis ->sinter( $tags [0], $tags [1])); } else if ( $len == 3){ var_dump( $redis ->sinter( $tags [0], $tags [1], $tags [2])); } |
希望本文所述对大家PHP程序设计有所帮助。
原文链接:https://blog.csdn.net/baochao95/article/details/60322759
- docker里面安装redis(Docker上实现Redis集群搭建)
- pythonredis使用场景(python 通过SSHTunnelForwarder隧道连接redis的方法)
- php redis配置(php+redis实现消息队列功能示例)
- redis在php怎么使用(Windows服务器中PHP如何安装redis扩展)
- docker怎么设置redis(docker安装redis并以配置文件方式启动详解)
- docker 部署参数配置(Docker搭建Redis5.0并挂载数据)
- phpredis存储对象(PHP使用redis位图bitMap 实现签到功能)
- python操作redis(Python获取Redis所有Key以及内容的方法)
- php redis应用场景(PHP商品秒杀问题解决方案实例详解mysql与redis)
- redis新增数据分页(Scrapy-Redis结合POST请求获取数据的方法示例)
- 用docker搭建redis集群(docker实现redis集群搭建的方法步骤)
- php实现redis核心代码(PHP结合Redis+MySQL实现冷热数据交换应用案例详解)
- python ssh登录服务器(python利用跳板机ssh远程连接redis的方法)
- docker redis安装配置(使用docker搭建redis主从的方法步骤)
- laravel的api验证失败重定向(Laravel的Auth验证Token验证使用自定义Redis的例子)
- yield函数详解(Yii框架的redis命令使用方法简单示例)
- 《乡村爱情13》开播,新版刘能以假乱真,编剧思维进入瓶颈(新版刘能以假乱真)
- 当年的 白洋淀战神 练肌肉 嘎子哥也成为行走的荷尔蒙(当年的白洋淀战神)
- 肌肉小子陈康, 亚洲巨兽 黄哲勋,哪个才是你的菜(肌肉小子陈康亚洲巨兽)
- 新闻周刊 青岛网红 赵厂长 编段子一箩筐输出快乐,陪父亲十二载勇斗病魔(新闻周刊青岛网红)
- 44岁夏雨演谋女郎爸,大其24岁却看不出,互动不怕袁泉吃醋(44岁夏雨演谋女郎爸)
- 全椒人,你还记得吗 那年,那人,那网,那些我们的青春记忆(全椒人你还记得吗)
热门推荐
- dedecms添加广告栏(织梦DedeCMS v5.7 完美实现导航条下拉菜单的方法)
- iis服务器如何设置多个网站(云服务器怎么设置404页面IIS7)
- ASP.NET cache缓存的用法
- dedecms中的有些功能如何修改(dedecms 每个栏目下的文章总数的调用)
- vmware虚拟机与本机共享(vmware16虚拟机如何设置共享本机的文件夹)
- 树莓派vnc设置失败(树莓派安装宝塔面板后VNC无法登陆的问题说明)
- dedecms参数不显示(DEDECMS后台登陆空白排查错误原因)
- python语言中的递归(详解python中递归函数)
- dedecms安全设置(织梦系统DedeCMS设定栏目及文档权限登录后跳转到登陆前的页面的实现方法)
- mysql和mycat半主从复制项目(Linux如何使用 MyCat 实现 MySQL 主从读写分离)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9