Spring Data Redis学海拾贝

简介:

  • Redis

redis是一款开源的Key-Value数据库,运行在内存中,由ANSI C编写。企业开发通常采用Redis来实现缓存。同类的产品还有memcache 、memcached 、MongoDB等。

  • Jedis

Jedis是Redis官方推出的一款面向Java的客户端,提供了很多接口供Java语言调用。可以在Redis官网下载,当然还有一些开源爱好者提供的客户端,如Jredis、SRP等等,推荐使用Jedis。

  • Spring Data Redis

Spring-data-redis是spring大家族的一部分,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了redis各种操作、异常处理及序列化,支持发布订阅,并对spring 3.1 cache进行了实现。

spring-data-redis针对jedis提供了如下功能

1.连接池自动管理,提供了一个高度封装的“RedisTemplate”类
2.针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口
ValueOperations:简单K-V操作
SetOperations:set类型数据操作
ZSetOperations:zset类型数据操作
HashOperations:针对map类型的数据操作
ListOperations:针对list类型的数据操作

Redis数据结构

1.redis是使用键值对去保存数据的,类似于java中的map集合。(redis中是没有表概念)
2.这个map集合是有key和value,key全部都是字符串,value有五种数据类型。
在这里插入图片描述

Redis特性

  • 速度快
    ①纯内存操作
    ②C语言实现
    ③单线程,避免了多线程之间资源竞争
    ④数据结构简单,对数据操作简
    ⑤多路I/O复用模型
  • 基于键值对的数据结构服务器
  • 功能丰富
    ①键过期功能(实现缓存)
    ②发布订阅功能(消息系统):发送者(pub)发送消息到频道(channel),订阅该频道的订阅者(sub)接收消息。实现场景有群聊、微博、消息推送等。
    ③Lua脚本(创造新的redis命令)
    ④简单的事务功能(一定程度上保证事务特性)
    ⑤提供Pipline(减少网络开销)
  • 简单稳定
  • 客户端语言多(Java、C++、PHP、Python等)
  • 持久化: redis可以把内存中的数据以文件形式保存。Redis持久化有RDB(快照)和AOF(日志)两种策略。
  • 主从复制:redis集群服务器角色中分为Masterservice(主服务器)、Slave service(从服务器),主从复制保证主从服务器数据的一致性。可以配置读写权限实现服务器读写分离
  • 高可用和分布式

Redis使用场景

Redis可以做什么?

  • 缓存(键值过期时间设置,灵活控制最大内存和内存溢出后的淘汰策略)
  • 排行榜系统(列表和有序集合)
  • 数据高并发读写
  • 海量数据读写
  • 消息队列系统(发布订阅功能和阻塞队列的功能)

Redis不可以做什么?

  • 不适合存储冷数据
  • 不适合复杂的事务功能】

Redis在实现缓存过程的图解
在这里插入图片描述

spring Data redis 源码设计逻辑可以分为以下几个方面

  • Redis连接管理:封装了Jedis,Jredis,Rjc等不同redis 客户端连接
  • Redis操作封装:value,list,set,sortset,hash划分为不同操作
  • Redis序列化:能够以插件的形式配置想要的序列化实现
  • Redis操作模板化: redis操作过程分为:获取连接,业务操作,释放连接;模板方法使得业务代码只需要关心业务操作
  • Redis事务模块:在同一个回话中,采用同一个redis连接完成

spring data redis设计类图:

在这里插入图片描述

概念:

(1) RedisConnection :

提供了Redis通信的核心构建块,因为它处理与Redis后端通信。它还自动将底层连接库异常转换为Spring一致的DAO异常层次结构,这样您就可以在不更改任何代码的情况下切换连接器,因为操作语义保持不变。

(2) RedisConnectionFactory

是构建RedisConnection的工厂类

RedisConnection和RedisConnectionFactory

(3) RedisStandaloneConfiguration

Redis标准配置,用来构建RedisConnectionFactory须要的必要参数,比如host;port;password

(3) RedisSentinelConfiguration

Redis哨兵模式的相关配置

(4) RedisClusterConfiguration

Redis集群模式的相关配置

(5) RedisCacheManager

顾名思义是Redis缓存管理器,是Spring基于Redis实现缓存的核心类

(6) RedisCacheConfiguration

是RedisCacheManager的具体个性化配置项

Key过期时间默认不会过期,可通过entryTtl(Duration ttl)设置过期时间
缓存null值可通过disableCachingNullValues()禁用此功能
Key前缀默认有前缀,可通过disableKeyPrefix()禁用前缀
默认的前缀值默认是@Cacheable注解的cacheNames属性的值,可通过prefixKeysWith(String prefix)覆盖
Key的序列化器默认是StringRedisSerialize,可通过serializeKeysWith(SerializationPair keySerializationPair)指定,建议保持默认值
Value的序列化器默认是JdkSerializationRedisSerializer,可通过serializeValuesWith(SerializationPair<?> valueSerializationPair)指定,建议使用GenericFastJsonRedisSerializer

(7) RedisCacheManagerBuilder

是RedisCacheManager的构建器,内部维护了RedisConnectionFactory

(8) RedisTemplate

同样底层是维护了RedisConnectionFactory,在Spring Data
Redis中和RedisCacheManager属于不同的Redis应用模块,RedisCacheManager负责Redis数据缓存的核心实现,RedisTemplate是Spring为方便操作Redis各种命令而封装出来的工具类,其功能类似于jedis

RedisTemplate中定义了对5种数据结构操作

redisTemplate.opsForValue();//操作字符串
redisTemplate.opsForHash();//操作hash
redisTemplate.opsForList();//操作list redisTemplate.opsForSet();//操作set
redisTemplate.opsForZSet();//操作有序set

StringRedisTemplate与RedisTemplate

两者的关系是StringRedisTemplate继承RedisTemplate。

两者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据。

SDR默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略。

StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。

RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值