Redis应用2-Redis实现开发者头条页面点赞功能

该博客讨论了为何在开发者头条页面点赞功能中选择Redis而非MySQL,并详细介绍了Redis的不同数据结构及其适用场景。通过使用Redis的Set数据结构,实现了用户点赞和点反对的逻辑,减少了对MySQL数据库的压力。文章提供了实现思路,包括点赞与反对键值的生成,以及点赞服务和接口的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发者头条是一个资源丰富的程序猿学习网站。当网站发布新的内容的时候,内容优秀的总是会被点赞。今天就利用Redis实现这个小小的功能。

这里写图片描述


为什么使用Redis而不是MySQL实现?

Redis 和 MySQL应用场景不同。

  • 从效率来说:
    Redis的数据存放在内存,所以速度快但是会受到内存空间限制。
    MySQL存放在硬盘,在速度上肯定没有Redis快,但是存放的数据量要多的多。

  • 从功能来说:
    Redis是一个K-V数据库,同时还支持List/Hash/Set/Sorted Set等几个简单数据结构,所以只能以这些数据结构为基础实现功能。

Redis性能好,快,并发高,但不能处理逻辑,而且不支持事务,看具体的场合,主要做数据缓存,减少MySQL数据库的压力。最擅长的是结构化数据的cache,计数器场景,轻量级的消息队列,Top排行榜等互联网应用场景。在点赞过后要立即刷新显示在页面,所以推荐使用Redis。至于并发问题,在此暂不考虑(其实是技术比较渣。。。)


Redis几种数据结构的适用场景

  • List: 双向列表,适用于最新列表,关注列表;
  • Set: 适用于无顺序的集合,点赞点踩,抽奖,已读,共同好友;
  • SortedSet : 具有排序加成功能,适用于排行榜,优先队列的实现;
  • Hash:对象属性,不定长属性数;
  • KV : 单一数值,适用于验证码,缓存等实现。

代码实现

接下来看看如何去实现。

首先必须要安装好Redis并且启动Redis服务,了解Redis的5种数据结构类型的介绍和基本命令的操作,了解Redis的Java客户端Jedis的操作。这些内容在此不一一详述,详情参见博文:http://blog.csdn.net/noaman_wgs/article/details/59501400

了解了以上内容以后,接下来进入实战演练。
(注:本文只提供后台实现点赞的一种实现的思路与接口的实现,不提供前台页面的显示与操作)。

实现思路
使用Redis的Set数据结构存储数据。
当前用户点赞的话,就将当前用户id存入到对应点赞集合当中,同时判断点反对集合中是否有此id值,有的话就移除;
当前用户点反对的话,与上面操作相反。
页面显示的时候就根据当前用户id在点赞集合和反对集合中查找,若id值在点赞集合中有对应值,就显示1,表示当前用户点赞;若在反对集合中有值,反对处就显示1.

1. MAVEN中加入jar包;

        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.8.0</version>
        </dependency>

2. Jedis底层操作
实现一个具有Dao功能的类,类中可以在Jedis连接池中获取一个Jedis连接,同时实现与Redis数据库的get, set , remove等操作。本文的实现用到的都是Redis中的Set数据结构。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Service;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * Created by Administrator on 2017/5/1.
 */
@Service
public class JedisAdapter implements InitializingBean {
   

    private static final Logger logger = LoggerFactory.getLogger(JedisAdapter.class);

    private Jedis jedis = null;
    private JedisPool jedisPool = null;

    @Override
    public void afterPropertiesSet() throws Exception {
        //初始化
        jedisPool = new JedisPool("localhost", 6379);
    }

    //获取一个Jedi
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值