zoukankan      html  css  js  c++  java
  • Spring Data Redis怎么读不到我刚才设进去的值?

    目标

    精通 Spring Data Redis 操作流程。

    Spring Data提供了对市场上主流数据库支持:

    Spring Data Commons
    Spring Data JPA
    Spring Data KeyValue
    Spring Data LDAP
    Spring Data MongoDB
    Spring Data Redis
    Spring Data REST
    Spring Data for Apache Cassandra
    Spring Data for Apache Geode
    Spring Data for Apache Solr
    Spring Data for Pivotal GemFire
    Spring Data Couchbase (community module)
    Spring Data Elasticsearch (community module)
    Spring Data Neo4j (community module)
    

    而在使用时,难免会不动声色的写出一堆 bug。

    1 注意读、取一致性

    当使用 Spring Data Redis 时,我们有时候会在项目升级的过程中,发现存储后的数据有读取不到的情况;另外,还会出现解析出错的情况。

    案例

    使用了 Redis 提供的两种 Template:

      • RedisTemplate
      • stringRedisTemplate
        但当使用后者去存一个数据后,发现使用前者取不到对应数据:

    这不很显然吗?是因为这俩 Template 不同呀!

    发散一下思维,试想若我们是不同项目的开发。一个项目只负责存储,另外一个项目只负责读取,两个项目之间缺乏沟通。如此看来,这种问题是不是就很常见了?

    解析

    我们不可能直接将数据存取到 Redis,毕竟一些数据是对象类型,例如 String或自定义对象。因此需要在存取前对数据进行序列化或反序列化。

    带着key去存取数据时,会执行

    AbstractOperations#rawKey

    在执行存储 K.V 到 Redis或从 Redis 读数据前,对 key 进行序列化操作:

    可见,若存在 keySerializer,则利用它序列化 key。
    对于 StringRedisSerializer,它指定的 StringRedisSerializer:

    public class StringRedisSerializer implements RedisSerializer<String> {
    
       private final Charset charset;
       
       @Override
       public byte[] serialize(@Nullable String string) {
          return (string == null ? null : string.getBytes(charset));
       }
     
    }
    

    所以最后对 K 的读取处理,采用的JDK序列化:

    反序列化结果的确不同。

    那如何指定 RedisSerializer 的?

    以 StringRedisSerializer 为例。StringRedisTemplate构造器直接指定了KeySerializer为 RedisSerializer.string():

    修正

    一定要注意一致性,例如读写的序列化方法需要一致:

    • 检查自己所有的数据操作,是否使用了相同的 RedisTemplate
    • 即使相同,也要检查所指定各种Serializer是否完全一致
  • 相关阅读:
    osgi实战学习之路:8. Service-3之ServiceTracker
    使用Jquery+EasyUI 进行框架项目开发案例解说之二---用户管理源代码分享
    QQ音乐产品经理黄楚雄:产品与用户的情感联系
    AsyncTask简单入门
    晨跑感悟:三快三爽三熬
    【cocos2d-x制作别踩白块儿】第九期:游戏计时功能(附源代码)
    cocos2d3.0 Scale9Sprite
    新的历程-近两个月的工作总结
    基因突变的实例:加拿大无毛猫
    ANTS Performance Profiler 破解使用
  • 原文地址:https://www.cnblogs.com/aishangJava/p/15333509.html
Copyright © 2011-2022 走看看