加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

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

发布时间:2019-12-06 22:06:51 所属栏目:编程 来源:站长网
导读:副问题#e# 点同意果各人都不会生疏,像微信这样的交际产物中都有,但别看成果小,想要做好必要思量的对象还挺多的,如海量数据的漫衍式存储、漫衍式缓存、多 IDC 的数据同等性、会见路由到机房的算法等等。 图片来 Pexels 本文先容大型交际平台点赞体系的设
副问题[/!--empirenews.page--]

点同意果各人都不会生疏,像微信这样的交际产物中都有,但别看成果小,想要做好必要思量的对象还挺多的,如海量数据的漫衍式存储、漫衍式缓存、多 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 种数据布局范例作简朴的先容:

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读