PHP+Redis开发的书签案例实战详解

 更新时间:2019年07月09日 11:47:58   作者:webbc   我要评论

这篇文章主要介绍了PHP+Redis开发的书签案例,结合实例形式详细分析了php结合redis开发书签功能的具体步骤及相关操作技巧,需要的朋友可以参考下

本文实例讲述了PHP+Redis开发的书签案例。分享给大家供大家参考,具体如下:

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set 有序集合)和hash(哈希类型)。这些数据类?#25237;?#25903;持push/pop、add/remove及取交集并集和差集?#26696;?#20016;富的操作,而且这些操作都是原子性的。在此基础?#24076;瑀edis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入?#25490;?#25110;者把修改操作写入追加的记录文件,并?#20197;?#27492;基础上实现了master-slave(主从)同步。

场景

在项目开发过程中,相信大家都遇到过这样的场景——一个书籍表,一个书籍标签表,?#32531;?#19968;本书可以有多个标签,这个场景就和CSDN发布文章时的文章标签差不多。

问题:如果我要查询多个标签共同的书籍,那么必须将表关联查询,这样影响效率。我们可以使用redis来帮忙。

案例思路

在添加书籍的时候,需要添加书籍和标签,将书籍保存到MySQL中,将标签保存到redis的set集合中,将每个标签看成一个set集合,?#32531;?#27599;个标签保存的是书籍的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使用,?#32531;?#23558;标签信息添加到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文件

这个文件主要处理搜索界面,也就?#24039;?#38754;效果图的界面。首先创建一个redis对象并进行连接,?#32531;?#33719;取地址栏的标签,?#32531;?#23558;标签转换为数组,计算出用户输入标签的数量,因为每个标签?#32423;?#24212;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相关内容?#34892;?#36259;的读者可查看本站专题:《php+redis数据库程序设计技巧总结》、《php面向对象程序设计入门教程》、《PHP基本语法入门教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述?#28304;?#23478;PHP程序设计有所帮助。

相关文章

  • PHP获取文件相?#26376;?#24452;的方法

    PHP获取文件相?#26376;?#24452;的方法

    这篇文章主要介绍了PHP获取文件相?#26376;?#24452;的方法,通过自定义函数实现获取文件相?#26376;?#24452;的功能,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • php str_pad 函数使用详解

    php str_pad 函数使用详解

    今天一朋友问我str_pad()的使用方法.他说网上很多都是直接把手册上的拿过来.于是我来写详细点. str_pad()函数的作用是:用一个字符串填充另一个指定字符串到指定长?#21462;?/div> 2009-01-01
  • PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题

    PHP数组的交集array_intersect(),array_intersect_assoc(),array

    求两个数组的交集问题可以使用array_intersect(),array_inersect_assoc,array_intersect_key来实现,其中array_intersect()函数是求两个数的交集
    2011-05-05
  • php下判断数组中是否存在相同的值array_unique

    php下判断数组中是否存在相同的值array_unique

    今天在改一个N久以前写的程序 突然碰到一个问题 假设有一个数组$a中存在几个value 我如何判断这些value当中是否存在相同的?#30340;兀? 翻了好多资?#24076;参?#20102;兵哥哥,给我一些思路,想自己写来着~~~ 还是不肯放弃百度,最后搞了一次,居然找到这么一个函数 array_unique爽大了。
    2008-03-03
  • php str_replace的替换漏洞

    php str_replace的替换漏洞

    php 的函数str_replace替换漏洞
    2008-03-03
  • php基于SQLite实现的分页功能示例

    php基于SQLite实现的分页功能示例

    这篇文章主要介绍了php基于SQLite实现的分页功能,结合具体实例形式分析了php操作SQLite数据库实现分页功能的相关技巧与注意事项,需要的朋友可以参考下
    2017-06-06
  • 用PHP的ob_start();控制您的浏览器cache!

    用PHP的ob_start();控制您的浏览器cache!

    用PHP的ob_start();控制您的浏览器cache!...
    2007-02-02
  • 最新评论

    常用在线小工具

    时时彩包赢公式0369
    12124期足彩14场胜负 360彩票网 山西11选5走势图遗漏 云南快乐十分二十期开 快乐飞艇是国家彩票吗 通比牛牛的规律 什么高频彩好赢也好玩 扑克王下载 组选奖号538 008期3d试机号 平特一肖应该怎么买 吉林快三预测开奖号 山东十一选五遗漏最大 六合彩玄机 728彩票软件怎么样