知识星球-伙伴匹配系统07


数据查询慢怎么办?

用缓存,提前把数据取出来保存好(通常保存到读写更快的介质,比如内存),就可以更快的读写。

缓存的实现

  • Redis(分布式缓存)
  • memcached(分布式)
  • Etcd(云原生架构的一个分布式存储,存储配置,扩容能力强,可以线性增加读写性能)
  • ehcache(单机)
  • 本地缓存(Java内存Map )
  • Caffenine(java内存缓存,高性能)
  • Google Guava

image-20230817001913240

最简单实现思路,将不同服务器的缓存放在一个公共区域,直接从公共区域拿

Redis

NoSQL 数据库

key-value 存储系统(区别于MySQL,他存储的是键值对)

Redis数据结构

String 字符串类型:name:"hyx"

List列表: names:["hyx","coderhyx","hyx"]

Set集合:names:["hyx","coderhyx"] (值不能重复)

Hash 哈希:nameAge:{"hyx":1,":coderhyx": 2}

Zset集合:name:{hyx - 9,coderhyx - 12}:适合做排行榜,取某个区间的

Java里的实现方式

  • Spring Data Redis(本项目用这个)通用的

Spring Data 通用的数据访问框架,定义了一组增删改查的接口

[springdata]https://mvnrepository.com/artifact/org.springframework.data/spring-data-redis

  • Jedis

  • Redission

1)引入

<dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
            <version>2.6.3</version>
        </dependency>

2)配置Redis的地址

spring: 
  # redis配置
  redis:
    port: 6379
    host: localhost
    database: 8

自定义RedisTemplate

image-20230817221156418

引入一个库时,先写测试类

正式引入Redis

设计一下缓存的key

不同用户看到的数据不同

没加缓存之前

还需要设置过期时间,redis内存不能无限增加,一定要设置过期时间

image-20230817230837662

加缓存之后

image-20230817231452268

image-20230817225309850

使用quickRedis查看缓存中有数据了

image-20230817225138356

缓存预热

应用场景

比如:一个系统中第一个用户访问很慢 此时还没有缓存 这时候就可以使用缓存预热 再比如双十一 用户数量那么多 如果每个人第一次访问时候都得在服务器上查询一次数据库 再将查询结果存入缓存中 这样太慢了

第一个用户访问很慢。

优点:

  • 解决上面的问题 也在一定的程度上保护数据库可以让用户始终访问很快

缺点

  • 增加开发成本

  • 需要占用额外的空间

  • 预热的时机如果错了 有可能使你的缓存数据太老或者不适合

怎么使用缓存预热?

1.定时

2.手动触发

定时任务的实现

  • 使用spring自带的@Scheduler

  • Quartz(独立于 Spring 存在的定时任务框架)

  • XXL-Job 之类的分布式任务调度平台(界面 + sdk)

实现

用定时任务,每天刷新所有用户的推荐列表

注意点

1.缓存预热的意义

2.缓存的空间不能太大,要预留给其他缓存空间

3.缓存数据的周期(此处一天一次)

image-20230818002420733

测试定时任务,到点之后自动执行定时任务

image-20230818002812954

经过测试确实走了缓存,没有查数据库

image-20230818014524348

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值