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

  • 相关阅读:
    Python基础语法 第2节课(数据类型转换、运算符、字符串)
    python基础语法 第5节课 ( if 、 for )
    python基础语法 第4节课 (字典 元组 集合)
    Python基础语法 第3节课 (列表)
    A. Peter and Snow Blower 解析(思維、幾何)
    C. Dima and Salad 解析(思維、DP)
    D. Serval and Rooted Tree (樹狀DP)
    C2. Balanced Removals (Harder) (幾何、思維)
    B. Two Fairs 解析(思維、DFS、組合)
    D. Bash and a Tough Math Puzzle 解析(線段樹、數論)
  • 原文地址:https://www.cnblogs.com/snake107/p/12143204.html
Copyright © 2011-2022 走看看