简介:

  • 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都是采用此策略序列化保存的。

Spring Data Redis学海拾贝相关推荐

  1. Spring data redis 异常

    2019独角兽企业重金招聘Python工程师标准>>> spring 集成 spring-data-redis 版本: spring低版本 + spring-data-redis 高 ...

  2. 使用Spring Data Redis操作Redis(集群版)

    说明:请注意Spring Data Redis的版本以及Spring的版本!最新版本的Spring Data Redis已经去除Jedis的依赖包,需要自行引入,这个是个坑点.并且会与一些低版本的Sp ...

  3. Redis - Spring Data Redis 操作 Jedis 、Lettuce 、 Redisson

    文章目录 官网 Jedis VS Lettuce Jedis Code POM依赖 配置文件 配置类 单元测试 Lettuce Code Redisson Code POM依赖 配置文件 配置类 单元 ...

  4. Spring Boot使用Spring Data Redis操作Redis(单机/集群)

    说明:Spring Boot简化了Spring Data Redis的引入,只要引入spring-boot-starter-data-redis之后会自动下载相应的Spring Data Redis和 ...

  5. Java Spring Data Redis实战与配置参数详解 application.properties...

    Redis作为开源分布式高并发缓存,使用范围非常广泛,主流互联网公司几乎都在使用. Java Spring Boot 2.0实战开发Redis缓存可以参考下面的步骤,Redis安装可以直接使用Linu ...

  6. Spring Data Redis与Jedis的选择(转)

    说明:内容可能有点旧,需要在业务上做权衡. Redis的客户端有两种实现方式,一是可以直接调用Jedis来实现,二是可以使用Spring Data Redis,通过Spring的封装来调用.应该使用哪 ...

  7. Spring Data Redis—Pub/Sub(附Web项目源码)

    一.发布和订阅机制 当一个客户端通过 PUBLISH 命令向订阅者发送信息的时候,我们称这个客户端为发布者(publisher). 而当一个客户端使用 SUBSCRIBE 或者 PSUBSCRIBE ...

  8. 一文搞定 Spring Data Redis 详解及实战

    转载自  一文搞定 Spring Data Redis 详解及实战 SDR - Spring Data Redis的简称. Spring Data Redis提供了从Spring应用程序轻松配置和访问 ...

  9. Spring Data Redis:Sentinel的高可用性

    1.概述 为了使Redis具有高可用性,我们可以使用Spring Data Redis对Redis Sentinel的支持. 借助Sentinel,我们可以创建自动抵御某些故障的Redis部署. Re ...

最新文章

  1. PyTorch 笔记(14)— nn.module 实现简单感知机和多层感知机
  2. Linux IPv6 UDP套接字编程示例
  3. php视频文件上传到服务器,上传和下载图片和视频到服务器
  4. hadoop配置文件的加载机制
  5. 计算机减法英语,英语加减乘除的表达
  6. 应用实践 | 电商应用——一种基于强化学习的特定规则学习模型
  7. 揭秘“清华园”的“N”种打开方式!
  8. 1059. C语言竞赛(20)-PAT乙级真题
  9. paip.提升用户体验-------在C++ Builder 中为Form窗体添加背景图片
  10. lingo入门教程之一 --- 初识lingo
  11. PostgreSQL常用的客户端工具
  12. Win10系统高分辨率缩放时应用程序字体模糊
  13. 图书信息管理系统(顺序表)
  14. 怎么在字符串中加加号python_python加号连接字符串
  15. 秋招知识点总结-Redis数据库
  16. macOs Ventura 13自动开机关机设置教程(命令行)
  17. 互联网公司刻板印象合集:程序员都秃头,商务个个是人精
  18. 2022.3.20 春分
  19. 用户选择好用的投票小程序最有用的投票小程序微信推送里投票制作教程
  20. 实习日记(5-18)Socket与MQTT

热门文章

  1. 正则匹配两个字符之间的字符串
  2. 人工智能:通俗易懂理解深度学习与神经网络
  3. 关于HTML中a标签的重大安全性漏洞!!!
  4. 【元宇宙欧米说】从GameFi的视角讨论Web2到Web3的利弊
  5. 如何在ORACLE数据库的字段上建立索引?
  6. vba访问服务器中txt文件,vba读取word内容 vba读取txt文件
  7. 文件下载被浏览器默认打开解决方法
  8. 网页版视频怎么加快播放速度
  9. ABP的一些特性 (Attribute)
  10. python-LASSO回归模型