js网站页面效果代码,wordpress+海+主题,南乐网站建设电话,深圳网站开发一、概述
大多数用户可能会使用RedisTemplate及其相应的包org.springframework.data.redis.core或其反应式变体ReactiveRedisTemplate。由于其丰富的功能集#xff0c;该模板实际上是Redis模块的中心类。该模板为Redis交互提供了高级抽象。虽然[Reactive]RedisConnection提供…一、概述
大多数用户可能会使用RedisTemplate及其相应的包org.springframework.data.redis.core或其反应式变体ReactiveRedisTemplate。由于其丰富的功能集该模板实际上是Redis模块的中心类。该模板为Redis交互提供了高级抽象。虽然[Reactive]RedisConnection提供了接受和返回二进制值字节数组的低级方法但模板负责序列化和连接管理使用户无需处理此类细节。
RedisTemplate类实现RedisOperations接口其反应变量ReactiveRedisTemplate实现ReactiveEdisOperations。
此外该模板还提供了操作视图遵循Redis命令参考中的分组这些视图提供了丰富的通用接口用于处理特定类型或特定键通过KeyBound接口如下表所述
操作视图
InterfaceDescription Key Type Operations GeoOperations Redis geospatial operations, such as GEOADD, GEORADIUS,… HashOperations Redis hash operations HyperLogLogOperations Redis HyperLogLog operations, such as PFADD, PFCOUNT,… ListOperations Redis list operations SetOperations Redis set operations ValueOperations Redis string (or value) operations ZSetOperations Redis zset (or sorted set) operations Key Bound Operations BoundGeoOperations Redis key bound geospatial operations BoundHashOperations Redis hash key bound operations BoundKeyOperations Redis key bound operations BoundListOperations Redis list key bound operations BoundSetOperations Redis set key bound operations BoundValueOperations Redis string (or value) key bound operations BoundZSetOperations Redis zset (or sorted set) key bound operations
配置后模板是线程安全的可以跨多个实例重用。
RedisTemplate对其大多数操作使用基于Java的序列化程序。这意味着模板写入或读取的任何对象都将通过Java序列化和反序列化。
您可以在模板上更改序列化机制Redis模块提供了几种实现可在org.springframework.data.Redis.serializer包中获得。有关详细信息请参阅序列化程序。您还可以通过将enableDefaultSerializer属性设置为false将任何序列化程序设置为null并将RedisTemplate与原始字节数组一起使用。请注意模板要求所有键都不为null。然而只要底层序列化程序接受它们值就可以为null。阅读每个序列化程序的Javadoc以了解更多信息。
对于需要特定模板视图的情况请将视图声明为依赖项然后注入模板。容器自动执行转换消除opsFor[X]调用如下例所示
配置模板API
Configuration
class MyConfig {BeanLettuceConnectionFactory connectionFactory() {return new LettuceConnectionFactory();}BeanRedisTemplateString, String redisTemplate(RedisConnectionFactory connectionFactory) {RedisTemplateString, String template new RedisTemplate();template.setConnectionFactory(connectionFactory);return template;}
} LettuceConnectionFactory是Spring Data Redis中的一个类用于创建和管理与Redis服务器的连接。它是一个连接工厂负责创建和配置Redis连接并提供与Redis服务器进行通信的方法
使用[Reactive]RedisTemplate将项目推送到列表
public class Example {// inject the actual operationsAutowiredprivate RedisOperationsString, String operations;// inject the template as ListOperationsResource(nameredisTemplate)private ListOperationsString, String listOps;public void addLink(String userId, URL url) {listOps.leftPush(userId, url.toExternalForm());}
}
二、围绕着字符串的操作
由于Redis中存储的键和值通常是java.lang.String因此Redis模块为RedisConnection和RedisTemplate提供了两个扩展分别是StringRedisConnectition及其DefaultStringRedissConnection实现和StringRedistTemplate作为密集String操作的便捷一站式解决方案。除了绑定到String键之外模板和连接还使用下面的StringRedisSerializer这意味着存储的键和值是人类可读的假设Redis和代码中使用相同的编码。以下列表显示了一个示例
Configuration
class RedisConfiguration {BeanLettuceConnectionFactory redisConnectionFactory() {return new LettuceConnectionFactory();}BeanStringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {StringRedisTemplate template new StringRedisTemplate();template.setConnectionFactory(redisConnectionFactory);return template;}
}
public class Example {Autowiredprivate StringRedisTemplate redisTemplate;public void addLink(String userId, URL url) {redisTemplate.opsForList().leftPush(userId, url.toExternalForm());}
}
与其他Spring模板一样RedisTemplate和StringRedisTemplet允许您通过RedisCallback接口直接与Redis对话。此功能为您提供了完全的控制因为它直接与RedisConnection对话。请注意当使用StringRedisTemplate时回调接收StringRedissConnection的实例。下面的例子展示了如何使用RedisCallback接口
public void useCallback() {redisOperations.execute(new RedisCallbackObject() {public Object doInRedis(RedisConnection connection) throws DataAccessException {Long size connection.dbSize();// Can cast to StringRedisConnection if using a StringRedisTemplate((StringRedisConnection)connection).set(key, value);}});
}
三、Serializers
从框架的角度来看Redis中存储的数据只是字节。虽然Redis本身支持各种类型但在大多数情况下这些类型是指数据的存储方式而不是它所表示的内容。由用户决定是否将信息转换为字符串或任何其他对象。
在Spring Data中用户自定义类型和原始数据之间的转换反之亦然由org.springframework.Data.Redis.serializer包中的Spring Data Redis处理。
此包包含两种类型的序列化程序顾名思义它们负责序列化过程
基于RedisSerializer的双向序列化程序。使用RedisElementReader和RedisElement Writer的元素读取器和写入器。
这些变体之间的主要区别是RedisSerializer主要序列化为byte[]而读取器和写入器使用ByteBuffer。 有多种实现包括本文档中已经提到的两种
JdkSerializationRedisSerializer默认情况下用于RedisCache和RedisTemplate。StringRedisSerializer。
然而可以通过Spring OXM支持使用OxmSerializer进行Object/XML映射或者使用Jackson2JsonRedisSerializers或GenericJackson2-JsonRedissSerializer.以JSON格式存储数据。 请注意存储格式不仅限于值。它可以用于键、值或哈希没有任何限制。
四、开发实例
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId
/dependency
spring:data:redis:host: Redis所在主机地址port: Redis对应端口号默认6379password: 密码lettuce:pool:max-active: 最大连接数max-wait: 等待时长max-idle: 最大空闲连接min-idle: 最小空闲连接数import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisconnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;configuration
public class Redisconfig {Beanpublic RedisTemplatestring, object redisTemplate(RedisconnectionFactory connectionfactory) {RedisTemplatestring, object template new RedisTemplate();template.setconnectionFactory(connectionFactory);return template;}
}
service
public class Userservice {Autowiredprivate RedisTemplatestring, object redisTemplate;public void saveUser(string userId, User user) {redisTemplate.opsForValue().set(userId, user);}public User getuser(string userId) {return (user) redisTemplate.opsForValue().get(userId);}public void deleteuser(string userId) {redisTemplate.delete(userId);}public void setuserwithExpiry(string userId, User user, long timeout) {redisTemplate.opsForValue().set(userId, user, timeout, TimeUnit.SECONDS);}
}