设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 数据 手机
当前位置: 首页 > 站长学院 > MySql教程 > 正文

微信亿级在线点赞系统,用Redis如何实现?

发布时间:2019-12-06 01:43 所属栏目:115 来源:站长网
导读:副标题#e# 点赞功能大家都不会陌生,像微信这样的社交产品中都有,但别看功能小,想要做好需要考虑的东西还挺多的,如海量数据的分布式存储、分布式缓存、多 IDC 的数据一致性、访问路由到机房的算法等等。 图片来 Pexels 本文介绍大型社交平台点赞系统的设

点赞功能大家都不会陌生,像微信这样的社交产品中都有,但别看功能小,想要做好需要考虑的东西还挺多的,如海量数据的分布式存储、分布式缓存、多 IDC 的数据一致性、访问路由到机房的算法等等。

微信亿级在线点赞系统,用Redis如何实现?


图片来 Pexels

本文介绍大型社交平台点赞系统的设计思路,基于 Spring Cloud,用户发起点赞、取消点赞后先存入 Redis 中,再每隔两小时从 Redis 读取点赞数据写入数据库中做持久化存储。

点赞、取消点赞是高频次的操作,若每次都读写数据库,大量的操作会影响数据库性能,所以需要做缓存。

至于多久从 Redis 取一次数据存到数据库中,根据项目的实际情况定吧,我是暂时设了两个小时。

项目需求需要查看都谁点赞了,所以要存储每个点赞的点赞人、被点赞人,不能简单的做计数。

文章分四部分介绍:

Redis 缓存设计及实现

数据库设计

数据库操作

开启定时任务持久化存储到数据库

Redis 缓存设计及实现

Redis 安装及运行

Redis 安装请自行查阅相关教程。

说下Docker 安装运行 Redis:

docker run -d -p 6379:6379 redis:4.0.8 

如果已经安装了 Redis,打开命令行,输入启动 Redis 的命令:

redis-server 

Redis 与 Spring Boot 项目的整合

①在 pom.xml 中引入依赖:

<dependency> 

    <groupId>org.springframework.boot</groupId> 

    <artifactId>spring-boot-starter-data-redis</artifactId> 

</dependency> 

②在启动类上添加注释 @EnableCaching:

@SpringBootApplication 

@EnableDiscoveryClient 

@EnableSwagger2 

@EnableFeignClients(basePackages = "com.solo.coderiver.project.client") 

@EnableCaching 

public class UserApplication { 

 

    public static void main(String[] args) { 

        SpringApplication.run(UserApplication.class, args); 

    } 

③编写 Redis 配置类 RedisConfig:

import com.fasterxml.jackson.annotation.JsonAutoDetect; 

import com.fasterxml.jackson.annotation.PropertyAccessor; 

import com.fasterxml.jackson.databind.ObjectMapper; 

import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; 

import org.springframework.context.annotation.Bean; 

import org.springframework.context.annotation.Configuration; 

import org.springframework.data.redis.connection.RedisConnectionFactory; 

import org.springframework.data.redis.core.RedisTemplate; 

import org.springframework.data.redis.core.StringRedisTemplate; 

import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; 

 

import java.net.UnknownHostException; 

 

 

@Configuration 

public class RedisConfig { 

 

    @Bean 

    @ConditionalOnMissingBean(name = "redisTemplate") 

    public RedisTemplate<String, Object> redisTemplate( 

            RedisConnectionFactory redisConnectionFactory) 

            throws UnknownHostException { 

 

        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class); 

        ObjectMapper om = new ObjectMapper(); 

        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); 

        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); 

        jackson2JsonRedisSerializer.setObjectMapper(om); 

 

        RedisTemplate<String, Object> template = new RedisTemplate<String, Object>(); 

        template.setConnectionFactory(redisConnectionFactory); 

        template.setKeySerializer(jackson2JsonRedisSerializer); 

        template.setValueSerializer(jackson2JsonRedisSerializer); 

        template.setHashKeySerializer(jackson2JsonRedisSerializer); 

        template.setHashValueSerializer(jackson2JsonRedisSerializer); 

        template.afterPropertiesSet(); 

        return template; 

    } 

 

 

    @Bean 

    @ConditionalOnMissingBean(StringRedisTemplate.class) 

    public StringRedisTemplate stringRedisTemplate( 

            RedisConnectionFactory redisConnectionFactory) 

            throws UnknownHostException { 

        StringRedisTemplate template = new StringRedisTemplate(); 

        template.setConnectionFactory(redisConnectionFactory); 

        return template; 

    } 

至此 Redis 在 Spring Boot 项目中的配置已经完成,可以愉快的使用了。

Redis 的数据结构类型

Redis 可以存储键与 5 种不同数据结构类型之间的映射,这5种数据结构类型分别为 String(字符串)、List(列表)、Set(集合)、Hash(散列)和 Zset(有序集合)。

下面来对这 5 种数据结构类型作简单的介绍:

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读