当前位置: 首页 > news >正文

闸北区网站建设网页设计网站排名快速上升

闸北区网站建设网页设计,网站排名快速上升,网站建设公司团队简介,报名网站制作两者的关系是 StringRedisTemplate 继承 RedisTemplate 。 两者的数据是不共通的:也就是说 StringRedisTemplate 只能管理 StringRedisTemplate 里面的数据,RedisTemplate 只能管理 RedisTemplate 中的数据。 RedisTemplate 看这个类的名字后缀是 Temp…
两者的关系是 StringRedisTemplate 继承 RedisTemplate 。
两者的数据是不共通的:也就是说 StringRedisTemplate 只能管理 StringRedisTemplate 里面的数据,RedisTemplate 只能管理 RedisTemplate 中的数据。

RedisTemplate 看这个类的名字后缀是 Template ,如果了解过 Spring 如何连接关系型数据库的,大概不会难猜出这个类是做什么的 ,它跟 JdbcTemplate 一样封装了对Redis的一些常用的操作,当然 StringRedisTemplate 跟 RedisTemplate 功能类似那么肯定就会有人问,为什么会需要两个Template呢,一个不就够了吗?其实他们两者之间的区别主要在于他们使用的序列化类是不同的。

  • StringRedisTemplate 的API假定所有的数据类型化都是字符类型,即key和value都是字符串类型。默认采用的是 String 的序列化策略,即 StringRedisSerializer ,保存的key和value都是采用此策略序列化保存的。
  • RedisTemplate 默认采用的是JDK的序列化策略,即 JdkSerializationRedisSerializer ,保存的key和value都是采用此策略序列化保存的。

RedisTemplate 默认使用的序列类在在操作数据的时候,比如说存入数据会将数据先序列化成字节数组然后在存入 Redis 数据库,这个时候打开 Redis 查看的时候,你会看到你的数据不是以可读的形式展现的,而是以字节数组显示,类似下面:

StringRedisTemplate 默认存入的数据就是原文,因为 StringRedisTemplate 默认使用的是 String 序列化策略,使用 StringRedisTemplate 默认存入数据长这个样:

造成两者差异的原因是因为在初始化时,两者使用的序列化策略不同导致的,翻开源码可以看到,如下:

public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperations<K, V>, BeanClassLoaderAware {private boolean enableTransactionSupport = false;private boolean exposeConnection = false;private boolean initialized = false;private boolean enableDefaultSerializer = true;@Nullableprivate RedisSerializer<?> defaultSerializer;@Nullableprivate RedisSerializer keySerializer = null;@Nullableprivate RedisSerializer valueSerializer = null;@Nullableprivate RedisSerializer hashKeySerializer = null;@Nullableprivate RedisSerializer hashValueSerializer = null;// 其它字段略...public RedisTemplate() {}// 该方法是重写RedisAccessor的方法 RedisAccessor实现了spring的InitializingBean 也就是在启动时会执行该方法 可以看到该方法默认的序列化为JdkSerializationRedisSerializerpublic void afterPropertiesSet() {super.afterPropertiesSet();boolean defaultUsed = false;if (this.defaultSerializer == null) {this.defaultSerializer = new JdkSerializationRedisSerializer(this.classLoader != null ? this.classLoader : this.getClass().getClassLoader());}if (this.enableDefaultSerializer) {if (this.keySerializer == null) {this.keySerializer = this.defaultSerializer;defaultUsed = true;}if (this.valueSerializer == null) {this.valueSerializer = this.defaultSerializer;defaultUsed = true;}if (this.hashKeySerializer == null) {this.hashKeySerializer = this.defaultSerializer;defaultUsed = true;}if (this.hashValueSerializer == null) {this.hashValueSerializer = this.defaultSerializer;defaultUsed = true;}}if (this.enableDefaultSerializer && defaultUsed) {Assert.notNull(this.defaultSerializer, "default serializer null and not all serializers initialized");}if (this.scriptExecutor == null) {this.scriptExecutor = new DefaultScriptExecutor(this);}this.initialized = true;}// 其余方法略...
}

可以看到 RedisTemplate 在初始化时是无参构造,通过 Spring 的 Bean 加载机制在项目启动时执行afterPropertiesSet来完成序列化设置,如果需要自定义序列化配置,可以自己写一个 RedisTemplate 的Bean,来完成配置。

@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String,Object> redisTemplate(@Autowired RedisConnectionFactory redisConnectionFactory) {// 创建RedisTemplateRedisTemplate<String,Object> redisTemplate = new RedisTemplate<String,Object>();// 字符串和JDK序列化器RedisSerializer<String> strSerializer = RedisSerializer.string();RedisSerializer<Object> jdkSerializer = RedisSerializer.java();// 设置键值序列化器redisTemplate.setKeySerializer(strSerializer);redisTemplate.setValueSerializer(jdkSerializer);// 设置哈希字段和值序列化器redisTemplate.setHashKeySerializer(strSerializer);redisTemplate.setHashValueSerializer(jdkSerializer);// 给redisTemplate设置连接工厂redisTemplate.setConnectionFactory(redisConnectionFactory);return redisTemplate;}
}

StringRedisTemplate 就比较简单了,直接继承了 RedisTemplate,在初始化时默认使用了 String 序列化,源码如下:

public class StringRedisTemplate extends RedisTemplate<String, String> {public StringRedisTemplate() {this.setKeySerializer(RedisSerializer.string());this.setValueSerializer(RedisSerializer.string());this.setHashKeySerializer(RedisSerializer.string());this.setHashValueSerializer(RedisSerializer.string());}// 其他方法略...
}

那么就可以得出一个结论,如果你想使用默认的配置来操作 Redis,则如果操作的数据是字节数组,就是用RedisTemplate,如果操作的数据是明文,使用 StringRedisTemplate

当然在项目中真实使用时,一般是自定义 RedisTemplate 的 Bean 实例,来设置具体的序列化策略,说白了就是 RedisTemplate 通过自定义 Bean 可以实现和 StringRedisTemplate 一样的序列化,使用起来更加灵活。

http://www.yayakq.cn/news/319609/

相关文章:

  • 学网站建设好不好菲律宾
  • 建设机械网站哪家好网站与建设实训报告
  • 个人域名怎么做社交网站深圳网站建设10强
  • 公司域名更改 网站怎么做提示国外网站谷歌seo推广
  • 泸州百度做网站联系安康网站设计
  • 成都网站建设v门店销售管理系统
  • 智库建设网站方案网站主题旁边的图标怎么做的
  • 广州黄埔做网站hexo文章转WordPress
  • 网站建设接单技巧跨境电商怎么做视频教程
  • 泉州网站建设公司首选公司哪家好应用商城app开发
  • 沂南建设局网站深圳装修公司报价
  • 厦门微网站制作公司logo设计注意事项
  • 百度地图网站开发闵行网页设计公司
  • 制作网站公司宜兴宜兴建设局网站
  • 辽宁建设厅证件查询网站做图标去什么网站找
  • 网站优化北京如何联系?做文具的网站
  • 衡阳北京网站建设网站开发开票内容写什么
  • 网站关键词怎么做效果好担保公司网站建设汇报
  • WordPress文章消失徐州关键词优化平台
  • 为什么建设文化馆网站网站开发支付功能
  • 做个门户网站多少钱合肥 网站运营
  • 临沂网站制作wordpress壁纸
  • 网站竞价如何做个人网页设计特点
  • shopify建站流程清苑区建设网站找那家公司
  • 东莞网站建设怎么做网站做不做账
  • 网站跟自媒体建设你认为什么是网络营销
  • 网站建设流程笔记上海今天最新新闻10条
  • 在那个网站做推广实用网站制作公司网站设计公司
  • 网站正在备案女孩短期技能培训班
  • 做网站时如何将前端连接到后台网站建设市区