微信亿级在线点赞系统,用Redis如何实现?
副问题[/!--empirenews.page--]
点同意果各人都不会生疏,像微信这样的交际产物中都有,但别看成果小,想要做好必要思量的对象还挺多的,如海量数据的漫衍式存储、漫衍式缓存、多 IDC 的数据同等性、会见路由到机房的算法等等。 图片来 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 种数据布局范例作简朴的先容: (编辑:河北网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |