PHP+Redis开发的书签案例实战详解
发布:smiling 来源: PHP粉丝网 添加日期:2021-12-03 17:11:08 浏览: 评论:0
本文实例讲述了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]));
- }
Tags: PHP+Redis
相关文章
- ·PHP+redis实现的悲观锁机制示例(2018-11-14)
- ·PHP+redis实现添加处理投票的方法(2021-06-26)
- ·PHP+Redis 消息队列 实现高并发下注册人数统计的实例(2021-09-01)
- ·php+redis消息队列实现抢购功能(2021-09-03)
- ·PHP+redis实现微博的推模型案例分析(2021-12-04)
- ·php+redis实现消息队列功能示例(2021-12-19)
- ·PHP+redis实现的限制抢购防止商品超发功能详解(2021-12-19)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)