zoukankan      html  css  js  c++  java
  • 【深入浅出SpringBoot】RedisTemplate使用方法归纳

    一.介绍

    RedisTemplate是Spring Data Redis提供给用户的最高级的抽象客户端,用户可直接通过RedisTemplate进行多种操作,那么,我们先来看看RedisTemplate封装了哪些操作。下面这列表是RedisTemplate的继承关系和所有方法(已过滤重载方法,共有81个方法)

    (1) 类继承关系

    //RedisAccessor是RedisTemplate定义普通属性的基类,不直接使用
    //RedisOperations是指定RedisTemplate实现的Redis connection操作的集合接口
    //BeanClassLoaderAware是给其实现类是设置类加载器的接口
    RedisTemplate<K, V> extends RedisAccessor implements RedisOperations<K, V>, BeanClassLoaderAware
    

    (2) 方法

    //配置默认序列化与反序列化工具类
    2.afterPropertiesSet
    //根据参数执行相关operation操作,例如,事务
    3.execute
    //执行pipelining流水线相关操作
    4.executePipelined
    //执行指定connection连接的相关操作
    5.executeWithStickyConnection
    //执行session内的execute方法
    6.executeSession
    //创建RedisConnection代理类
    7.createRedisConnectionProxy
    //connection连接的预处理
    8.preProcessConnection
    //结果的后处理,默认什么都不做
    9.postProcessResult
    //是否向RedisCallback暴露本地连接
    10.isExposeConnection
    //设置是否向RedisCallback暴露本地连接
    11.setExposeConnection
    //12到26都是设置和获取相关序列化工具类
    12.isEnableDefaultSerializer
    13.setEnableDefaultSerializer
    14.getDefaultSerializer
    15.setDefaultSerializer
    16.setKeySerializer
    17.getKeySerializer
    18.setValueSerializer
    19.getValueSerializer
    20.getHashKeySerializer
    21.setHashKeySerializer
    22.getHashValueSerializer
    23.setHashValueSerializer
    24.getStringSerializer
    25.setStringSerializer
    26.setScriptExecutor
    //27到34为私有方法,不对外提供使用
    27.rawKey
    28.rawString
    29.rawValue
    30.rawKeys
    31.deserializeKey
    32.deserializeMixedResults
    33.deserializeSet
    34.convertTupleValues
    //执行事务
    35.exec
    36.execRaw
    //删除操作
    37.delete
    //接触链接
    38.unlink
    //查看是否含有指定key
    39.hasKey
    40.countExistingKeys
    //设置过期时间
    41.expire
    42.expireAt
    //转换成字节流并向channel发送message
    43.convertAndSend
    //获取过期时间
    44.getExpire
    //根据传入的正则表达式返回所有的key
    46.keys
    //取消指定key的过期时间
    47.persist
    //移动指定的key和index到数据库中
    48.move
    //从键空间随机获取一个key
    49.randomKey
    //将指定key改成目标key
    50.rename
    //key不存在时,将指定key改成目标key
    51.renameIfAbsent
    //设置存储在指定key的类型
    52.type
    //检索存储在key的值的序列化版本
    53.dump
    //执行Redis的restore的命令
    54.restore
    //标记事务阻塞的开始
    55.multi
    //丢弃所有在multi之后发出的命令
    56.discard
    //观察指定key在事务处理开始即multi之后的修改情况
    57.watch
    //刷新先前观察的所有key
    58.unwatch
    //为key元素排序
    59.sort
    //关闭客户端连接
    60.killClient
    //请求连接客户端的相关信息和统计数据
    61.getClientList
    //更改复制配置到新的master
    62.slaveOf
    //将本机更改为master
    63.slaveOfNoOne
    //64到79都是获取相对应的操作
    64.opsForCluster
    65.opsForGeo
    66.boundGeoOps
    67.boundHashOps
    68.opsForHash
    69.opsForHyperLogLog
    70.opsForList
    71.boundListOps
    72.boundSetOps
    73.opsForSet
    74.opsForStream
    75.boundStreamOps
    76.boundValueOps
    77.opsForValue
    78.boundZSetOps
    79.opsForZSet
    //设置是否支持事务
    80.setEnableTransactionSupport
    //设置bean的类加载器
    81.setBeanClassLoader
    

    (3)功能介绍

    spring-data-redis的提供了如下功能:

    1. 连接池自动管理,提供了一个高度封装的“RedisTemplate”类
    2. 进行了归类封装,将同一类型操作封装为operation接口

    ValueOperations:简单K-V操作
    SetOperations:set类型数据操作
    ZSetOperations:zset类型数据操作
    HashOperations:针对map类型的数据操作
    ListOperations:针对list类型的数据操作

    1. 提供了对key的“bound”(绑定)便捷化操作API,可以通过bound封装指定的key,然后进行一系列的操作而无须“显式”的再次指定Key,即BoundKeyOperations:

    BoundValueOperations
    BoundSetOperations
    BoundListOperations
    BoundSetOperations
    BoundHashOperations

    1. 将事务操作封装,有容器控制。
    2. 针对数据的“序列化/反序列化”,提供了多种可选择策略(RedisSerializer)

    1.JdkSerializationRedisSerializer:POJO对象的存取场景,使用JDK本身序列化机制,将pojo类通过ObjectInputStream/ObjectOutputStream进行序列化操作,最终redis-server中将存储字节序列。是目前最常用的序列化策略。

    2.StringRedisSerializer:Key或者value为字符串的场景,根据指定的charset对数据的字节序列编码成string,是“newString(bytes,charset)”和“string.getBytes(charset)”的直接封装。是最轻量级和高效的策略。

    3.JacksonJsonRedisSerializer:jackson-json工具提供了javabean与json之间的转换能力,可以将pojo实例序列化成json格式存储在redis中,也可以将json格式的数据转换成pojo实例。因为jackson工具在序列化和反序列化时,需要明确指定Class类型,因此此策略封装起来稍微复杂。

    4.OxmSerializer:提供了将javabean与xml之间的转换能力,目前可用的三方支持包括jaxb,apache-xmlbeans;redis存储的数据将是xml工具。不过使用此策略,编程将会有些难度,而且效率最低;不建议使用。【需要spring-oxm模块的支持】

    如果你的数据需要被第三方工具解析,那么数据应该使用StringRedisSerializer而不是JdkSerializationRedisSerializer。

    二.依赖导入

    redis的引用包:
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-redis</artifactId>
        <version>1.8.6.RELEASE</version>
    </dependency>
    

    三.具体使用

    (1) String类型:

    • 插入操作
    UserInfo markIfFirstSync = new UserInfo();
    userRedisTemplate.opsForValue().set(CACHE_KEY, markIfFirstSync);
    
    • 向redis中某个string类型的key下面插入一个对象。
    批量插入操作
    public Map<String, OrgRelationInfo> mappingRelationRefresh = new HashMap<>();
    redisTemplate.opsForValue().multiSet(mappingRelationRefresh);
    
    • 获取对象操作
      userRedisTemplate.opsForValue().get(CACHE_NAME + CACHE_KEY_EXIST_PREFIX);
    
    • 从redis中获取某个key下面的某个对象,如果不存在就返回null。
     //批量获取对象操作
      List<String> sourceIdList = new ArrayList<>();
      List<OrgRelationInfo> orgMappingRelationList = redisTemplate.opsForValue().multiGet(sourceIdList);
    //从redis中获取多个key下面的多个对象,返回一个List列表,但是即使对应的key下面没有值,这个**value也会返回**,不过是
    //null,因此要判断是否List都为空,不能够用isEmpty直接判断,而应该一个一个的判断是否为空,才能判断整体为空。
    

    (2) List类型

    • 批量插入
    //向redis的某个key下面的list列表里面插入一个list列表,不会去重。
    List<OrgRelationInfo> remainOrgNodes = new ArrayList<>();
    redisTemplate.opsForList().leftPushAll(CACHE_KEY, remainOrgNodes);
    
    • 批量取出
    //从redis中取出某一个key下面的list列表, 0表示从列表的第0个元素开始取,-1表示直取到倒数第一个元素,也就是整个列表的所有元素都取出来。
    List<OrgRelationInfo> lastRemainOrgNodeList = redisTemplate.opsForList().range(CACHE_NAME + CACHE_REMAIN_KEY_PREFIX, 0, -1);
    

    (3) Hash类型

    • 批量插入
    // 向redis中某个key下面插入key,hash的Map。
    Map<Long, UserRelationInfo> value = new HashMap<>();
    userHashRedisTemplate.opsForHash().putAll(KEY, value );
    

    -单个删除

    //从redis中某个key下面删除掉某个hashkey所在的value。
    userHashRedisTemplate.opsForHash().delete(key, sourceOrgId);
    
    • 单个获取
    //从redis中某个key下面得到这个key对应的hashkey的value值。前一个key只能是String类型,hashKey可以声明为自己需要的类型。
    userHashRedisTemplate.opsForHash().get(Key, hashKey);
    
    • 批量获取
    //从redis中得到某个key下面的所有的hashkey和hashvalue值。
    Map<Object, Object> userOrgMap = userHashRedisTemplate.opsForHash().entries(getUserNodeCacheKey(syncUserNode.getSourceId()));
    

    (4) Set类型

    • 单个插入
    //向redis的某个key下面的set列表里面插入一个元素,回去重,且无序。
    userRoleSetRedisTemplate.opsForSet().add(KEY, cloudtOrgRoleInfo);
    
    • 批量取出
    //从redis的某个key下面得到set集合的所有元素,返回的也是一个Set集合。
    cloudtOrgRoleSet = userRoleSetRedisTemplate.opsForSet().members(KEY);
    
    • 单个删除
    //从redis的某个key下面的set集合中删除掉一个元素。
    userRoleSetRedisTemplate.opsForSet().remove( KEY, subDeleteOrgRoleUserArray[i]);
    

    redis命令行操作可以参考:http://doc.redisfans.com/

    本文转自https://www.jianshu.com/p/0fa4c100e9a9

  • 相关阅读:
    AIX下的ha高可用集群cluster
    触发redo写的几个条件
    Oracle Internals Notes Redo Write Triggers
    触发写Redo&nbsp;Log的条件
    [Oracle]理解undo表空间
    MySQL数据备份之mysqldump使用
    Orabbix无法获取Oracle DB Size和DB Files Size的解决方法
    ES5和ES6那些你必须知道的事儿(三)
    ES5和ES6那些你必须知道的事儿(二)
    ES5和ES6那些你必须知道的事儿(一)
  • 原文地址:https://www.cnblogs.com/snake107/p/12143204.html
Copyright © 2011-2022 走看看