本文建立于没有用户登录的简单点赞功能,主要使用了Ajax,Redis
配置
- 首先需要根据官网的指南下载好predis
$ composer require predis/predis
- 然后在database.php中配置好redis
'redis' => [
'client' => 'predis',
'cluster' => false,
'default' => [
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
],
- 1
注意: 如果系统用pecl下载了redis,那么上面配置中的client对应的值应该改成phpredis。笔主在本地环境下不加上client也是不会报错的,当然还是要看个人本地或者生产环境下的配置了。
- 最后要在对应的控制器下使用redis
use Illuminate\Support\Facades\Redis;
Redis的使用方式可自行查询手册
点赞的基本原理以及实现思路
原理:在用户点赞之后会通过Ajax向后台发起请求,后台首先检测用户是否已经点赞(从Redis中取键值,点赞为1,未点赞为0)。返回对应的状态码给js。BTW,如果加入了用户登录之类的,那么在当前用户点赞之后生成一个cookie来直接判断用户是否已经点赞,就不需要后端再查询数据库,提高响应速度。
实现思路:在点赞页的控制器中把当前的点赞情况绑定到视图中,视图中通过js监控点赞按钮,如果点击那么就访问后端逻辑页面来进行逻辑处理。
class IndexController extends Controller
{
public function index()
{
$allClick = Redis::get("click");
return view('index',['click' => $allClick]);
}
public function isLike()
{
$click = Redis::get("click");
if($click) {
Redis::set("click",0);
return ['status' => 0,'msg' => '取消点赞','count' => 0];
} else {
Redis::set("click",1);
return ['status' => 1,'msg' => '点赞成功','count' => 1];
}
}
- 1
<script type="text/javascript">
$(function($) {
var event = $("#like").click(function () {
$.ajax({
url : "api/islike"
}).success(function (data1) {
if(data1.status) {
alert("点赞成功");
$("#count").text('');
$("#count").text(data1.count);
} else {
alert("Yummy" + data1.msg);
$("#count").text('');
$("#count").text(data1.count);
}
});
});
})
</script>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
$.post
可能会出现
[object%object]
这种错误,比较重要。