首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL数据库JS实现点赞功能

基础概念

点赞功能是一种常见的Web应用交互功能,允许用户对内容(如文章、评论、图片等)表达喜欢或不喜欢的态度。在MySQL数据库中实现点赞功能,通常涉及以下几个基础概念:

  1. 用户表(Users):存储用户信息。
  2. 内容表(Contents):存储被点赞的内容信息。
  3. 点赞表(Likes):存储用户的点赞记录。

相关优势

  • 实时性:用户可以立即看到点赞数的变化。
  • 可扩展性:通过数据库设计,可以轻松处理大量点赞数据。
  • 数据一致性:使用事务确保点赞操作的原子性和一致性。

类型

  • 简单点赞:用户只能点赞一次。
  • 可取消点赞:用户可以点赞也可以取消点赞。
  • 点赞计数:统计每个内容的点赞总数。

应用场景

  • 社交媒体平台:用户可以点赞帖子、评论等。
  • 博客网站:读者可以点赞文章。
  • 电商网站:用户可以点赞商品。

实现步骤

数据库设计

代码语言:txt
复制
CREATE TABLE Users (
    user_id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(255) NOT NULL
);

CREATE TABLE Contents (
    content_id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(255) NOT NULL,
    content TEXT
);

CREATE TABLE Likes (
    like_id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT,
    content_id INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES Users(user_id),
    FOREIGN KEY (content_id) REFERENCES Contents(content_id)
);

前端实现(JavaScript)

代码语言:txt
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>点赞功能</title>
</head>
<body>
    <div id="content">
        <h1>文章标题</h1>
        <p>文章内容...</p>
        <button id="likeButton">点赞</button>
        <span id="likeCount">0</span>
    </div>

    <script>
        document.getElementById('likeButton').addEventListener('click', function() {
            fetch('/like', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify({ contentId: 1 }) // 假设内容ID为1
            })
            .then(response => response.json())
            .then(data => {
                document.getElementById('likeCount').textContent = data.likeCount;
            });
        });
    </script>
</body>
</html>

后端实现(Node.js + Express)

代码语言:txt
复制
const express = require('express');
const bodyParser = require('body-parser');
const mysql = require('mysql');

const app = express();
app.use(bodyParser.json());

const db = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'password',
    database: 'testdb'
});

db.connect(err => {
    if (err) throw err;
    console.log('Database connected!');
});

app.post('/like', (req, res) => {
    const { contentId } = req.body;
    const userId = 1; // 假设当前用户ID为1

    db.query('SELECT * FROM Likes WHERE user_id = ? AND content_id = ?', [userId, contentId], (err, results) => {
        if (err) throw err;

        if (results.length > 0) {
            // 用户已经点过赞,取消点赞
            db.query('DELETE FROM Likes WHERE user_id = ? AND content_id = ?', [userId, contentId], (err, result) => {
                if (err) throw err;
                updateLikeCount(contentId, -1, res);
            });
        } else {
            // 用户未点过赞,添加点赞记录
            db.query('INSERT INTO Likes (user_id, content_id) VALUES (?, ?)', [userId, contentId], (err, result) => {
                if (err) throw err;
                updateLikeCount(contentId, 1, res);
            });
        }
    });
});

function updateLikeCount(contentId, delta, res) {
    db.query('UPDATE Contents SET like_count = like_count + ? WHERE content_id = ?', [delta, contentId], (err, result) => {
        if (err) throw err;
        db.query('SELECT like_count FROM Contents WHERE content_id = ?', [contentId], (err, results) => {
            if (err) throw err;
            res.json({ likeCount: results[0].like_count });
        });
    });
}

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

可能遇到的问题及解决方法

  1. 并发问题:多个用户同时点赞可能导致数据不一致。
    • 解决方法:使用数据库事务和锁机制确保操作的原子性。
  • 性能问题:大量点赞操作可能导致数据库压力过大。
    • 解决方法:使用缓存(如Redis)来存储点赞数,定期同步到数据库。
  • 安全性问题:防止恶意刷赞。
    • 解决方法:增加验证码机制或限制单个用户的点赞频率。

通过以上设计和实现,可以有效地在MySQL数据库中实现点赞功能,并处理常见的相关问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

利用 leanCloud 实现点赞功能

点赞功能 社交平台的必备良药,谁谁谁什么时候给你点了个赞,点赞什么的貌似已经深入人心了。...之前在 @火喵酱 的博客页面有看到说想用 leancloud 实现 do you like me 的点赞功能,之前没接触 leancloud 的 SDK 不知道咋搞,后来就不了了之,然后因为最近做了 valine...的最新评论排行,所以借这个风顺便来做个点赞功能~ 点赞按钮 实践操作 和 valine 最新评论一样,首先需要引入 sdk 并初始化完成化后接入具体实现的代码即可(这个就不说了,上篇笔记里有写的) 实现思路...因为我要做的是页面点赞功能,所以可能会比 do you like me 那个稍稍多个步骤。...这里再聊下思路,一般做点赞功能都是在本地点击计数之后再把数据上传到云端服务器,访问页面的时候直接根据页面拉取对应的数据填充即可。

14110
  • 点赞功能,用 MySQL?还是 Redis!

    数据一致性 点赞功能是目前app开发基本的功能 今天我们就来聊聊 点赞、评论、收藏等这些场景的db数据库设计问题, 1....2.1 mysql方案 mysql方案, 随着nosql的流行,大数据的持续热点,但是mysql仍然不可替代,对于大多数的中小项目,低于千万级的数据量,采用mysql分表+cache,是完全可以胜任的,...2.2 redis方案 当数据量达到上亿的量,上cache是必经的阶段,由于点赞这种动作很随意,很多人看到大拇指就想点,所以数据量增长很快,数据规模上来后,对mysql读写都有很大的压力,这时就要考虑memcache...:tid:888 //实现数量自增 (integer) 899 场景b:点赞去重,避免重复点赞 要实现这个需求,必须有文章点赞的uid列表,以uid为key场景c:一般在用户中心,可以看到用户自己的点赞列表...这个需求可以使用场景b的数据来实现。

    2K20

    点赞模块设计:Redis缓存 + 定时写入数据库实现高性能点赞功能

    读取点赞数据写入数据库中做持久化存储。...点赞功能在很多系统中都有,但别看功能小,想要做好需要考虑的东西还挺多的。 点赞、取消点赞是高频次的操作,若每次都读写数据库,大量的操作会影响数据库性能,所以需要做缓存。...文章分四部分介绍: Redis 缓存设计及实现 数据库设计 数据库操作 开启定时任务持久化存储到数据库 一、Redis 缓存设计及实现 1.1 Redis 安装及运行 Redis 安装请自行查阅相关教程...数据库表中至少要包含三个字段:被点赞用户id,点赞用户id,点赞状态。...以上就是点赞功能的设计与实现,不足之处还请各位大佬多多指教。

    1.9K60

    点赞功能,用 MySQL 还是 Redis ?

    作者:一起web编程 www.toutiao.com/i6825148720728769028 点赞功能是目前app开发基本的功能 今天我们就来聊聊 点赞、评论、收藏等这些场景的db数据库设计问题, 1...2.1 mysql方案 mysql方案, 随着nosql的流行,大数据的持续热点,但是mysql仍然不可替代,对于大多数的中小项目,低于千万级的数据量,采用mysql分表+cache,是完全可以胜任的,...2.2 redis方案 当数据量达到上亿的量,上cache是必经的阶段,由于点赞这种动作很随意,很多人看到大拇指就想点,所以数据量增长很快,数据规模上来后,对mysql读写都有很大的压力,这时就要考虑memcache...star:tid:888 //实现数量自增 (integer) 899 场景b:点赞去重,避免重复点赞 要实现这个需求,必须有文章点赞的uid列表,以uid为key场景c:一般在用户中心,可以看到用户自己的点赞列表...这个需求可以使用场景b的数据来实现。

    1.1K30

    点赞模块设计 - Redis缓存 + 定时写入数据库实现高性能点赞功能

    点赞功能在很多系统中都有,但别看功能小,想要做好需要考虑的东西还挺多的。 点赞、取消点赞是高频次的操作,若每次都读写数据库,大量的操作会影响数据库性能,所以需要做缓存。...至于多久从 Redis 取一次数据存到数据库中,根据项目的实际情况定吧,我是暂时设了两个小时。 项目需求需要查看都谁点赞了,所以要存储每个点赞的点赞人、被点赞人,不能简单的做计数。...文章分四部分介绍: Redis 缓存设计及实现 数据库设计 数据库操作 开启定时任务持久化存储到数据库 一、Redis 缓存设计及实现 1.1 Redis 安装及运行 Redis 安装请自行查阅相关教程...数据库表中至少要包含三个字段:被点赞用户id,点赞用户id,点赞状态。...以上就是点赞功能的设计与实现,不足之处还请各位大佬多多指教。 如有更好的实现方案欢迎在评论区交流… 项目地址:https://github.com/cachecats/coderiver

    2.2K50

    点赞模块设计:Redis缓存 + 定时写入数据库实现高性能点赞功能

    Redis 读取点赞数据写入数据库中做持久化存储。...点赞功能在很多系统中都有,但别看功能小,想要做好需要考虑的东西还挺多的。 点赞、取消点赞是高频次的操作,若每次都读写数据库,大量的操作会影响数据库性能,所以需要做缓存。...文章分四部分介绍: Redis 缓存设计及实现 数据库设计 数据库操作 开启定时任务持久化存储到数据库 一、Redis 缓存设计及实现 1.1 Redis 安装及运行 Redis 安装请自行查阅相关教程...数据库表中至少要包含三个字段:被点赞用户id,点赞用户id,点赞状态。...以上就是点赞功能的设计与实现,不足之处还请各位大佬多多指教。 后期继续分享会当下最流行的xxl-job,Elastic-Job

    6.5K40

    点赞功能设计与实现

    点赞业务本身并不复杂,无非是对数据的update,但是点赞本身是无意识行为,并且同一个用户可对博文进行点赞/取消点赞,如果直接操作数据库,无疑会增加数据库io操作。...方案: 缓存+异步推送 缓存+定时任务 优点: 降低对数据库的操作 提高点赞的效率 缺点: redis挂掉,或者mq延迟使数据库数据与redis数据不一致(正在发生) 解决方案:定时同步redis与数据库数据...数据库设计 CREATE TABLE `user_thumb` ( `like_detail_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '点赞信息...,1:点赞,2:取消点赞 public enum ThumbEnum { THUMB(1,"点赞"), CANCELTHUMB(2,"取消点赞"), private String...,如果做定时任务去查redis是否有数据,持久化到mysql。

    9.1K51

    点赞功能,你用 MySQL 还是 Redis ?

    作者:一起web编程 链接:www.toutiao.com/i6825148720728769028 点赞功能是目前app开发基本的功能 今天我们就来聊聊 点赞、评论、收藏等这些场景的db数据库设计问题...方案 2.1 mysql方案 mysql方案, 随着nosql的流行,大数据的持续热点,但是mysql仍然不可替代,对于大多数的中小项目,低于千万级的数据量,采用mysql分表+cache,是完全可以胜任的...2.2 redis方案 当数据量达到上亿的量,上cache是必经的阶段,由于点赞这种动作很随意,很多人看到大拇指就想点,所以数据量增长很快,数据规模上来后,对mysql读写都有很大的压力,这时就要考虑memcache...star:tid:888 //实现数量自增 (integer) 899 场景b:点赞去重,避免重复点赞 要实现这个需求,必须有文章点赞的uid列表,以uid为key场景c:一般在用户中心,可以看到用户自己的点赞列表...这个需求可以使用场景b的数据来实现。

    67040

    Redis实现点赞取消点赞

    本文基于 SpringCloud, 用户发起点赞、取消点赞后先存入 Redis 中,再每隔两小时从 Redis 读取点赞数据写入数据库中做持久化存储。...点赞功能在很多系统中都有,但别看功能小,想要做好需要考虑的东西还挺多的。 点赞、取消点赞是高频次的操作,若每次都读写数据库,大量的操作会影响数据库性能,所以需要做缓存。...至于多久从 Redis 取一次数据存到数据库中,根据项目的实际情况定吧,我是暂时设了两个小时。 项目需求需要查看都谁点赞了,所以要存储每个点赞的点赞人、被点赞人,不能简单的做计数。...文章分四部分介绍: Redis 缓存设计及实现 数据库设计 数据库操作 开启定时任务持久化存储到数据库 一、Redis 缓存设计及实现 1.1 Redis 安装及运行 Redis 安装请自行查阅相关教程...数据库表中至少要包含三个字段:被点赞用户id,点赞用户id,点赞状态。

    3.1K31

    Redis位图实现点赞签到相关功能

    前言 对于我们平时的一些社区应用,如微博,知乎,掘金等应用点赞,评论这类功能是不可或缺的,例如点赞功能我们其实是可以通过 mysql 去做实现的,但是每次点赞都去实时改库可以想象一下当遇到一个热点文章例如...字节的内容也就是2^32b; ❝2^(9(512)+10(1024)+10(1024)+3(8b=1B))=2^32b ❞ 应用场景: 用户签到 用户在线状态 统计活跃用户 各种状态值 自定义布隆过滤器 点赞功能...点赞功能 我这里的处理方式是异步改库,点完赞之后异步修改数据库,不要求实时处理结果其实可以用定时任务去批量改库(需要存一定时间内的 postId 和 userId 索引关系); @Override public...threadPool.submit(new Runnable() { @Override public void run() { //同时可以异步将点赞信息写到数据库中...一个简单的位图实现点赞等功能就实现了,大家一个举一反三哈,玩法还是很多的,大家也可以根据自己的需求去做优化,希望可以对大家有帮助,有不对的地方希望大家可以提出来的,共同成长。 ❞

    1K10

    如何设计微博点赞功能数据库?

    一、如何设计微博点赞功能数据库? 明星的一条微博的点赞数可能有几十万,甚至百万以上。那么这个「点赞功能」(会记录谁点了赞),新浪微博的数据库是如何设计的呢?...还是说逻辑处理在 Redis 中,之后会定时同步/持久化到 MySQL 等磁盘数据库? 概括一下:就是想弄明白「点赞」这种数据量庞大的功能,数据库是如何设计、保存的呢?...首先每条微博你所看到的点赞总数肯定本地和后端分开,也就是你点赞后,本地加1,先保证你自己马上看到变化。...然后通过点赞事件的方式传递给队列中,肯定不会直接写关系数据库,一条流量明星微博,千万粉丝点赞,评论里再点赞的请求事件挺吓人的。...influxdb也不错,自己实现原生数据库,只不过你要为集群模式付费,其实它们都是通过lsm-tree的nosql,对最近存储的数据,查找性能很强,但是对于历史数据的查找速度就差点。

    1.4K30

    使用代码方式实现WordPress文章点赞功能

    实现思路 通过 ajax 实时显示点赞数量,自定义字段保存赞数量,Cookies 禁止重新点赞。...click", ".favorite", function() { $(this).postLike(); }); 修改文章页面single.php,在你需要的位置添加一个点赞按钮...> 通过上面的三段代码就已经实现文章点赞功能,但是样式效果惨不忍睹,作者还提供了下面的样式,添加到主题style.css中(下方样式xiaoz未经测试) .post-like...但如果您网站启用了CDN,或使用了WP-Super-Cache这类静态缓存插件后,页面会被提前缓存起来,这样判断也就失效了,便可以无限点赞,于是xiaoz进行了改进,通过js再判断一次COOKIES是否存在...; } else{ $(this).postLike(); } }); 总结 最后实现的功能类似小z博客文章下方的点赞效果,这里主要提供思路和代码实现

    1.1K10

    Redis是如何实现点赞、取消点赞的?

    点赞功能在很多系统中都有,但别看功能小,想要做好需要考虑的东西还挺多的。 点赞、取消点赞是高频次的操作,若每次都读写数据库,大量的操作会影响数据库性能,所以需要做缓存。...至于多久从 Redis 取一次数据存到数据库中,根据项目的实际情况定吧,我是暂时设了两个小时。 项目需求需要查看都谁点赞了,所以要存储每个点赞的点赞人、被点赞人,不能简单的做计数。...文章分四部分介绍: Redis 缓存设计及实现 数据库设计 数据库操作 开启定时任务持久化存储到数据库 一、Redis 缓存设计及实现 1.1 Redis 安装及运行 Redis 安装请自行查阅相关教程...数据库表中至少要包含三个字段:被点赞用户id,点赞用户id,点赞状态。...以上就是点赞功能的设计与实现,不足之处还请各位大佬多多指教。 如有更好的实现方案欢迎在评论区交流…

    2.6K20
    领券