本文实例讲述了php+redis开发的书签案例。分享给大家供大家参考,具体如下:
redis是一个key-value存储系统。和memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、t(集合)、zt(sorted t 有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
场景
在项目开发过程中,相信大家都遇到过这样的场景——一个书籍表,一个书籍标签表,然后一本书可以有多个标签,这个场景就和csdn发布文章时的文章标签差不多。
问题:如果我要查询多个标签共同的书籍,那么必须将表关联查询,这样影响效率。我们可以使用redis来帮忙。
案例思路
在添加黑客技术论坛书籍的时候,需要添加书籍和标签,将书籍保存到mysql中,将标签保存到redis的t集合中,将每个标签看成一个t集合,然后每个标签保存的是书籍的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="/d/file/titlepic/" xml:lang="en"><head> <meta http-equiv="content-type" content="text/html;chart=utf-8"> <title>document</title></head><body> <form action="add.php" method="post"> <p>请输入书名:<input type="text" name="title" /></p> <p>请输入标签:<in山西省高考录取分数线2020put type="text" name="tags" /></p> <p><input type="submit" value="提交" /></p> </form></body></ht打拳击ml>
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);}//使用pd全自动洗衣机什么牌子好o将计划生育条例实施细则书籍信息添加到数据库中$dsn = 'mysql:host=localhost;dbname=test';$pdo = new pdo($dsn,'root','1234');$pdo->query('t names utf8');$sql = 'inrt into book values(?,?)';$st = $pdo->prepare($sql);$line = $st->execute([$bid,$_post['title']]);if($line != 0){ echo '添加书籍成功';}
arch.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]));}el if($len == 2){ var_dump($redis->sinter($tags[0],$tags[1]));}el if($len == 3){ var_dump($redis->sinter($tags[0],$tags[1],$tags[2]));}
本文发布于:2023-04-07 15:19:27,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/8672c1dbe7eda26feb859b54b7e7584b.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:PHP+Redis开发的书签案例实战详解.doc
本文 PDF 下载地址:PHP+Redis开发的书签案例实战详解.pdf
留言与评论(共有 0 条评论) |