Redis缓存简述

Redis

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

缓存分类

分布式缓存

Redis(分布式缓存)

memcached(分布式)

Etcd(云原生架构的一个分布式存储 , 存储配置 , 扩容能力)

单机缓存 (存在问题 : 数据不一致)

ehcache

java内存集合 , 如HashMap

caffeine(java内存缓存 , 高性能)

Google Guava

Redis缓存实现

NoSQL 数据库

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

Redis 数据结构

基本

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

List 列表 : name : ["List1","List1","List2"]

Set 集合 : name : ["Set1" , "Set2"]

Hash 哈希 : name : { "name1" : "Hash" , "name2" : "Hash2"}

Zset 集合 : name : {name1 - 9 , name2 - 8} (适合做排行榜)

高级

bloomfilter (布隆过滤器 , 主要从大量的数据中快速过滤值, 比如邮件黑名单拦截)

geo (计算地理位置)

hyperlglog (pv /uv)

pub /sub (发布订阅 , 类似消息队列)

BitMap (10101010010101010101010)

自定义序列化

为了防止写入 Redis 的数据乱码 , 浪费空间等 , 可以自定义序列化器 .

@Configuration
public class RedisConfig {
​
    @Bean
    @SuppressWarnings("all")
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
​
        RedisTemplate objectObjectRedisTemplate = new RedisTemplate<>();
        objectObjectRedisTemplate.setConnectionFactory(redisConnectionFactory);
​
        //设置KEY 序列化使用 String 字符串
        objectObjectRedisTemplate.setKeySerializer(RedisSerializer.string());
        objectObjectRedisTemplate.setHashKeySerializer(RedisSerializer.string());
​
        GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
​
        //设置Value 序列化 格式
        objectObjectRedisTemplate.setValueSerializer(jsonRedisSerializer);
        objectObjectRedisTemplate.setHashValueSerializer(jsonRedisSerializer);
​
        return objectObjectRedisTemplate;
    }
}

Java 操作 Redis

Spring Data Redis (推荐)

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

还可以操作 : mysql , reids , jpa

1)引入依赖


    org.springframework.boot
    spring-boot-starter-data-redis

2)配置 Reids

#redis 有关
redis:
  database: 1
  host: 127.0.0.1
  port: 6379

Jedis

独立于Spring 操作 Redis 的 Java客户端

配合Jedis Pool 使用

Redisson

分布式操作 Redis 的 Java 客户端 , 让你像在使用本地的集合一样操作Redis (分布式 Redis 数据网路)

JetCache

不在阐述

对比:

1.如果用Spring , 并且没有过多的定制化要求 , 可以用 Spring Data Redis , 最简单

2.如果你用的不是Spring , 并且追求简单 , 并且没有过高的性能要求 , 可以用Jedis + Jedis Pool

3.如果你用的不是Spring , 并且追求高性能 , 高定制化 , 可以用Lettue ,支持异步 ,连接池

缓存预热

问题 : 即使用了缓存 , 第一个用户的访问还是很慢 (假如第一个访问的是老板 直接毕业)

缓存预热的优点 :

1.解决上面的问题, 可以让用户始终访问很快

2.也能一定程度上保护数据库

缺点 :

1.增加开发成本

2.预热的时机和时间如果错了 , 有可能缓存的数据不对或者太老

3.需要占用额外空间

怎么缓存预热

1.定时任务

2.手动触发

实现

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

注意点:

1.缓存预热的意义 ((新增少、总用户多)

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

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

定时任务实现

1.Spring Schedule (Spring boot 默认整合了)

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

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

你可能感兴趣的:(Redis从入门到入土,缓存,redis,分布式)