Redisson不仅完美地支持运行在Spring框架下,还提供了和Spring框架的各项特性类似的,以Spring XML的命名空间的方式配置<code>RedissonClient</code>实例和它所支持的所有对象和服务。
首先需要做的是向你的Spring XML文件增加一个Redisson的引用描述:
你可能注意到上面例子里使用了一个属性表达式来指定连接的地址。这种使用方式是直接通过Spring自身提供的功能来实现的,你只需要在你的XML文件中增加一个<code><context:property-placeholder/></code>元素标签即可。如果你希望在项目中使用Spring提供的自动依赖注入功能,请不要忘了同时增加<code><context:annotation-config/></code>的元素标签。
通常情况下在一个应用程序里创建一个Redisson实例就已经能够满足正常的使用了,但是在个别的情况下,一个应用程序可能会遇到需要同时连接多个不同的Redis环境,这就需要多个Redisson实例同时并存。你可以通过定义多个<code><redisson:client/></code>元素标签来实现这个要求:
Redisson实例之间是通过它们的<code>id</code>属性值来区分的,这个值也同时被用来在自动依赖注入时作为<code>qualifier</code>的备选值使用。在<code>name</code>属性中出现的多个由英文逗号分开的值是作为这个<code>bean</code>的化名的方式来解析的,它们在自动依赖注入时也会被用来作为<code>qualifier</code>的备选值使用。
也可以通过定义一个<code>qualifier</code>元素标签来明确的指定它的<code>qualifier</code>备选值,但是这个元素标签不能同时和<code>name</code>属性共存。
除了定义Redisson实例以外,其它Redisson提供的对象和服务也可以通过类似的方式来定义。它们既可以作为<code><Redisson:client/></code>的子元素在它的内部申明,和可以在XML文件的其他地方申明。在外部申明的时候需要指定一个Redisson bean的引用。
代表Redisson对象的XML元素采用了Spring建议的命名法则。它们和Redisson一样都使用了同样的命名空间:
同样的道理,Redisson提供的服务也可以用同样的方法来获取:
很明显在这些服务被申明在一个<code><redisson:client/></code>元素标签的内部时,它的<code>redisson-ref</code>属性可以略去不用写。
下面是所有支持的对象和服务的使用范例:
Spring的<code>qualifier</code>元素标签可以作为子节点被放置在所有上面提到的类型里。
Redisson提供了将Redis无缝整合到Spring框架的能力。Redisson依照Spring Cache标准提供了基于Redis的Spring缓存实现。 每个缓存(Cache)实例都提供了了两个重要的可配置参数:<code>过期时间(ttl)</code>和<code>最长空闲时间(maxIdleTime)</code>,如果这两个参数都未指定或值为<code>0</code>,那么实例管理的数据将永久保存。
配置范例:
Spring Cache也可以通过JSON或YAML配置文件来配置:
Redisson提供了几种不同的Spring Cache Manager,按功能可以分为以下两大类:
本地缓存(Local Cache) 类 -- 本地缓存(Local Cache)也叫就近缓存(Near Cache)。这类Spring Cache的使用主要用于在特定的场景下,映射缓存(MapCache)上的高度频繁的读取操作,使网络通信都被视为瓶颈的情况。Redisson与Redis通信的同时,还将部分数据保存在本地内存里。这样的设计的好处是它能将读取速度提高最多 45倍 。
以下列表是Redisson提供的所有Spring Cache Manager的名称及其特性:
类名
本地缓存功能
Local Cache
数据分片功能
Sharding
RedissonSpringCacheManager
No
RedissonSpringLocalCachedCacheManager
Yes
RedissonClusteredSpringCacheManager
RedissonSpringClusteredLocalCachedCacheManager
在初始化<code>org.redisson.spring.cache.RedissonSpringLocalCachedCacheManager</code>对象和<code>org.redisson.spring.cache.RedissonSpringClusteredLocalCachedCacheManager</code>对象的时候可以通过<code>LocalCachedMapOptions</code>对象来配置选项。
Redisson为每个Spring缓存实例都提供了两个很重要的参数:<code>ttl</code>和<code>maxIdleTime</code>,当两个参数设为<code>0</code>或为指定值时,缓存数据将永久保留。
完整的使用范例如下:
也可以通过JSON或YAML配置文件来设置相关缓存参数:
JSON:
YAML:
以上内容是名叫<code>testMap</code>的Spring缓存实例的配置方式。
需要注意的是:<code>localCacheOptions</code>配置实例仅适用于<code>org.redisson.spring.cache.RedissonSpringLocalCachedCacheManager</code>类和<code>org.redisson.spring.cache.RedissonSpringClusteredLocalCachedCacheManager</code>类。
Redisson提供了几种不同的Hibernate Cache Factory,按功能主要分为两大类:
本地缓存 类 -- 本地缓存(Local Cache)也叫就近缓存(Near Cache)。这类Hibernate Cache的使用主要用于在特定的场景下,映射缓存(MapCache)上的高度频繁的读取操作,使网络通信都被视为瓶颈的情况。Redisson与Redis通信的同时,还将部分数据保存在本地内存里。这样的设计的好处是它能将读取速度提高最多 5倍 。
以下列表是Redisson提供的所有Hibernate Cache Factory的名称及其特性:
SingletonRedisRegionFactory
LocalCachedRedisRegionFactory
ClusteredRedisRegionFactory
ClusteredLocalCachedRedisRegionFactory
配置范例如下:
hibernate-redis.properties文件范例:
需要注意的是: <code>redis.localCache.*</code>配置参数仅适用于<code>ClusteredLocalCachedRedisRegionFactory</code>类和<code>LocalCachedRedisRegionFactory</code>类。
以下范例展示了使用Java缓存标准的用法。范例采用了保存在默认路径<code>/redisson-jcache.json</code>或<code>/redisson-jcache.yaml</code>下的配置文件构造实例。
也可以采用指定配置文件路径的方式构造实例:
还可以通过程序化的方式来构造:
甚至可以用Redisson实例来构造:
Redisson为Apache Tomcat集群提供了基于Redis的非黏性会话管理功能。该功能支持Apache Tomcat的6.x、7.x、8.x和9.x版。
使用方法:
<code>readMode</code> - 用来设定读取会话里各个属性的方式。主要分为以下两种:
<code>MEMORY</code> - 内存读取模式。直接从本地Tomcat中的会话里读取。这是默认情况。
<code>REDIS</code> - Redis读取模式。绕过本地会话信息,直接从Redis里读取。
<code>updateMode</code> - 用来设定更新会话属性的方式。主要有以下两种:
<code>DEFAULT</code> - 会话的属性只能通过<code>setAttribute</code>方法来储存到Redis里。这是默认请况。
<code>AFTER_REQUEST</code> - 再每次请求结束以后进行一次所有属性全量写入Redis。
拷贝相应的 两个 JAR包到指定的<code>TOMCAT_BASE/lib</code>目录下:
JDK 1.8+适用
<a href="https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-all&v=3.6.0&e=jar">redisson-all-3.6.0.jar</a>
Tomcat 6.x适用
Tomcat 7.x适用
Tomcat 8.x适用
Tomcat 9.x适用
JDK 1.6+适用
<a href="https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-all&v=2.11.0&e=jar">redisson-all-2.11.0.jar</a>
Redisson还提供了Spring Session会话管理器的实现。
使用方法:
首先请确保<code>spring-session</code>版本号为1.2.2+的依赖已经添加到了您的项目中:
#### Maven
#### Gradle
然后将<code>@EnableRedissonHttpSession</code>注释和<code>Redisson</code>实例添加到Spring的配置里:
然后提供一个启动器<code>AbstractHttpSessionApplicationInitializer</code>的扩展就行了:
也可以在JSON格式的配置文件中添加以下配置参数:
也可以在YAML格式的配置文件中添加以下配置参数:
<code>redisson.executor-pool-size</code> - [Gauge] 用于展示Executor线程池大小的度量值
<code>redisson.netty-pool-size</code> - [Gauge] 用于展示Netty线程池大小的度量值
名称前缀格式:<code>redisson.redis.<host>:<port></code>
<code>status</code> - [Gauge] 用于展示连接状态,连接 和 断开 状态的值分别为:[connected, disconnected]
<code>type</code> - [Gauge] 用于展示节点类型,主节点 和 从节点 的状态值分别为:[MASTER, SLAVE]
<code>bytes-read</code> - [Meter] 用于统计从该节点读取的字节量
<code>bytes-written</code> - [Meter] 用于统计写入到该节点的字节量
<code>connections.active</code> - [Counter] 用于显示客户端到该Redis节点的连接池当前 正在使用 的连接数量
<code>connections.free</code> - [Counter] 用于显示客户端到该Redis节点的连接池当前 空闲 的连接数量
<code>connections.max-pool-size</code> - [Counter] 用于显示客户端到该Redis节点的连接池大小
<code>connections.total</code> - [Counter] 用于显示客户端到该Redis节点的连接池当前 所有 的连接数量
<code>operations.total</code> - [Meter] 用于统计客户端到该Redis节点所有 已发送 的指令数量
<code>operations.total-failed</code> - [Meter] 用于统计客户端到该Redis节点所有 发送失败 的指令数量
<code>operations.total-successful</code> - [Meter] 用于统计客户端到该Redis节点所有 发送成功 的指令数量
<code>publish-subscribe-connections.active</code> - [Counter] 用于显示客户端到该Redis节点用于订阅发布的连接池 正在使用 的连接数量
<code>publish-subscribe-connections.free</code> - [Counter] 用于显示客户端到该Redis节点用于订阅发布的连接池 空闲 的连接数量
<code>publish-subscribe-connections.max-pool-size</code> - [Counter] 用于显示客户端到该Redis节点用于订阅发布的连接池大小
<code>publish-subscribe-connections.total</code> - [Counter] 用于显示客户端到该Redis节点用于订阅发布的连接池 所有 的连接数量
名称前缀格式:<code>redisson.remote-service.<name></code>
<code>invocations.total</code> - [Meter] 用于统计该远程服务对象所有 已执行 的请求数量
<code>invocations.total-failed</code> - [Meter] 用于统计该远程服务对象 执行失败 的请求数量
<code>invocations.total-successful</code> - [Meter] 用于统计该远程服务对象 执行成功 的请求数量
名称前缀格式:<code>redisson.executor-service.<name></code>
<code>tasks.submitted</code> - [Meter] 用于统计 已提交 的任务数量
<code>tasks.executed</code> - [Meter] 用于统计 已执行 的任务数量
<code>workers.active</code> - [Gauge] 用于统计 工作中 的任务线程(Workers)数量
<code>workers.free</code> - [Gauge] 用于统计 空闲 的任务线程(Workers)数量
<code>workers.total</code> - [Gauge] 用于统计 所有 的任务线程(Workers)数量
<code>workers.tasks-executed.total</code> - [Meter] 用于统计任务线程(Workers) 已执行 的任务数量
<code>workers.tasks-executed.total-failed</code> - [Meter] 用于统计任务线程(Workers) 执行失败 的任务数量
<code>workers.tasks-executed.total-successful</code> - [Meter] 用于统计任务线程(Workers) 执行成功 的任务数量
名称前缀:<code>redisson.map.<name></code>
<code>hits</code> - [Meter] 用于统计 Redis命中(Redis内 有 需要的数据)的次数
<code>misses</code> - [Meter] 用于统计 Redis未命中(Redis内 没有 需要的数据)的次数
<code>puts</code> - [Meter] 用于统计 写入 操作次数
<code>removals</code> - [Meter] 用于统计 擦除 操作次数
名称前缀:<code>redisson.map-cache.<name></code>
名称前缀:<code>redisson.clustered-map-cache.<name></code>
<code>misses</code> - [Meter] 用于统计 Redis命中(Redis内 没有 需要的数据)的次数
名称前缀:<code>redisson.local-cached-map.<name></code>
<code>local-cache.hits</code> - [Meter] 用于统计 本地命中(JVM内 有 需要的数据)的次数
<code>local-cache.misses</code> - [Meter] 用于统计 本地未命中(Redis内 没有 需要的数据)的次数
<code>local-cache.evictions</code> - [Meter] 用于统计 驱逐 发生次数
<code>local-cache.size</code> - [Gauge] 用于统计 本地缓存 的容量大小
名称前缀:<code>redisson.clustered-local-cached-map.<name></code>
名称前缀:<code>redisson.local-cached-map-cache.<name></code>
名称前缀:<code>redisson.clustered-local-cached-map-cache.<name></code>
名称前缀:<code>redisson.topic.<name></code>
<code>messages-sent</code> - [Meter] 用于统计向该话题 发送 出的消息数量
<code>messages-received</code> - [Meter] 用于统计从该话题 接收 到的消息数量
名称前缀:<code>redisson.bucket.<name></code>
<code>gets</code> - [Meter] 用于该统计分布式通用对象桶 读取 操作的次数
<code>sets</code> - [Meter] 用于该统计分布式通用对象桶 写入 操作的次数