RedisTemplate全面解读和Redis常用数据结构命令介绍

1 篇文章 0 订阅
1 篇文章 0 订阅

RedisTemplate详细解读

1,RedisSerializer;redis序列化对象(主要操作对象是String)
2,ClassLoader,类加载器;
3,key值,value值,hashkey值,hashvalue值的对象序列化;
4,ScriptExecutor<K>;
    K - The type of keys that may be passed during script execution;
    脚本执行期间可能传递的密钥类型;
    作用,Redis是支持脚本的,这个应该是脚本执行器。
5,ValueOperations<K, V>:对单个值进行操作,一个key 对一个Value 不能一个key对应多个值。
6,ListOperations<K, V>:对List多个值进行操作的对象;
7,SetOperations<K, V>:对Set多个值进行操作的对象;
8,ZSetOperations<K, V>:对有序Set多个值进行操作的对象;
9,GeoOperations<K, V>:对地点坐标经纬度多个值进行操作的对象;
10,HyperLogLogOperations<K, V>:不知
11:afterPropertiesSet();
    争对spring而言,可以忽略;
    非spring注入使用RedisTemplate,需先调用afterPropertiesSet()方法;例如:redisTemplate.afterPropertiesSet();
    确定序列化方式,确定脚本执行对象。
    execute(RedisCallback<T> action);
    execute(RedisCallback<T> action, boolean exposeConnection);

    向外暴露连接,执行提交过来的action操作,可以返回多个结果集或者一个boolean值。不支持redis的事务;
    execute(RedisCallback<T> action, boolean exposeConnection, boolean pipeline);
    这个中与上面不同,第三个参数是判断是否为管道执行,但这并不决定着redis在此处是支持事务操作的。
    if (this.enableTransactionSupport) {
        conn = RedisConnectionUtils.bindConnection(factory, this.enableTransactionSupport);
    } else {
        conn = RedisConnectionUtils.getConnection(factory);
    };

    this.enableTransactionSupport在最开始被定义为false,所以这个函数依旧不支持事务操作。
12,execute(SessionCallback<T> session);执行完action操作后的session中内容的回调地方;
13,executePipelined(SessionCallback<?> session);
    开启执行管道;
    executePipelined(SessionCallback<?> session, @Nullable RedisSerializer<?> resultSerializer);
    代码中有写道,调用这个方法之前可能需要先进行afterPropertiesSet()的调用。
    Callback对象不能为空;
14,executePipelined(RedisCallback<?> action);
    executePipelined(RedisCallback<?> action, @Nullable RedisSerializer<?> resultSerializer);
    和上面的功能几乎一样,只是底层封装方式不同。
    作用:都是让RedisTemplate进行回调,通过他们可以在同一条连接中执行多个redis命令;
15,execute(RedisScript<T> script, List<K> keys, Object... args);
    执行redis脚本操作的函数。
16,executeSession(SessionCallback<?> session);开启session会话。
17,接下来就是一堆的默认序列化方式与反序列化的方法。
18,delete,根据key值进行删除,分为单个删除和批量删除;批量删除参数为一个Collect集合(Key);
    返回值分别为boolean和collection长度;
19,unlink,与delete类似,不过这个不会引起阻塞,他会在另一个线程中被回收,
    不同之处:key都是同步删除,但是value不一样,del是同步删除,unlink不是,它会在后续中异步删除。
    什么时候用del,什么时候用unlink,争对value数据过大时,可以用unlink异步,value数据过小时使用同步。
20,hasKey,是否含有指定的key,返回值为boolean。
21,countExistingKeys,redis中key值得数量。返回值为Long。
22,expire(K key, long timeout, TimeUnit unit);
    设置key值得过期时间,timeout是时间长短,unit是单位,一般用second(秒),一天就是60*60*24.
23,expireAt(K key, Date date);通过设置日期来判断过期时间。
24,convertAndSend(String channel, Object message);进行消息传递得功能。
    SUBSCRIBE channel,订阅一个频道;
    PUBLISH channel message,向一个频道发送消息。
    所有订阅此频道的用户都能接收到信息。
25,getExpire,获取过期时间,返回值为long
26,keys(),模糊查询功能,符合正则 pattern 的 key;返回一个集合
27,persist(K key),移除过期时间,变为永久key,持久化。
28,move(K key, int dbIndex),移动一条数据到指定的位置。
29,randomKey(),获取随机key值。
30,rename(K oldKey, K newKey),为key值重新命名。
31,renameIfAbsent(K oldKey, K newKey);如果没有就重命名。
32,type(K key),获取 key 的类型
33,dump(K key),序列化给定key对应的value,并且返回序列化的字符串。
34,restore(K key, byte[] value, long timeToLive, TimeUnit unit, boolean replace);
    重新写入对应的key与value,只不过此处的value有可能是序列化对象。
35,multi(),标记事务开始,就和@Trancasial注解类似。
36,discard(),取消事务执行。
37,watch(),用于监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。
38,unwatch(), 取消WATCH 命令对所有 key 的监视。
39,sort(),对集合进行排序。
40,slaveOf(),调整 master 节点;
41,slaveOfNoOne(),与 master 断开链接;
42,RedisTemplate 把 Redis 的数据结构封装为 XXXOperations 和 BoundXXXOperations,以区分不同数据结构,使每个数据结构成为一个内聚的整体。
    XXXOperations 和 BoundXXXOperations 都是对 XXX 数据结构的封装,都提供操作该数据类型的方法。
    不同点在于,BoundXXXOperations 在创建时,已经指定了 key (bound含义所在),
    因此在操作的时候,不需要传递 key;同时,所有的 BoundXXXOperations 都继承 BoundKeyOperations ,提供对 key 的操作。

    在redisTemplate中提供了以下几种继承关系。
    BoundValueOperationsValueOperations;针对key-value形式的数据。
    BoundSetOperationsSetOperations;针对key-set形式的数据。
    BoundListOperationsListOperations;针对key-list形式的数据。
    BoundHashOperationsHashOperations;针对key-map形式的数据。
    BoundGeoOperationsGeoOperations;针对经纬度-城市形式的数据。
    BoundZSetOperationsZSetOperations;针对有序set
    在各自的接口中分别对这些数据结构操作的方法进行了封装。通过ops对象的方式也可以进行对数据的操作。
43,redisTemplate操作redis的方法有以下几种。
    (1),使用底层方法(execute、executePipeline) 进行 redis 操作;
    (2),使用 RedisTemplate 进行 key 相关操作(hasKey、unlink、delete 等);
    (3),使用 opsForXXX 获取 XXXOperations,然后通过 XXXOperations 操作对应的数据结构;
            例如:redisTemplate.opsForValue().increment(key, -2);
    (4),使用 boundXXXOps(key) 获取 BoundedXXXOperations,然后通过 BoundedXXXOperations 操作对应数据结构。
            例如:BoundValueOperations boundValueOperations = redisTemplate.boundValueOps("key");
                  boundValueOperations.increment(2);

Redis常用数据结构命令介绍

这儿是从Redis菜鸟教程中趴下来的,建议去https://www.runoob.com/redis/redis-tutorial.html学习了解

对表里面的行进行更新却是一个速度相当慢的操作,因为这种更新除了会引起一次随机读(random read)之外,还可能会引起一次随机写(random write);
    Redis的五种数据结构:STRING(字符串)、LIST(列表)、SET(集合)、HASH(散列)和ZSET(有序集合);
    hash数据结构:
        HMSET key +hash数据:
            expmle:HMSET runoobkey name "redis tutorial" description "redis basic commands for caching" likes 20 visitors 23000
        HGETALL key;相当于字符串中的get;
        HKEYS key ;获取hash为key的所有字段名称;
        HLEN key ;获取长度;
        HMGET key field1 [field2],获取指定field1的字段内容。
            exmple:HMGET runoobkey name likes;查询两个数据内容
        HMSET key field1 value1 [field2 value2 ];更新某个hash字段数据
        HSET key field value ;设置单个字段的数据。
        HSETNX key field value ;只有在字段 field 不存在时,设置哈希表字段的值。
        HVALS key ;获取哈希表中所有值;
        HSCAN key cursor [MATCH pattern] [COUNT count] ;迭代哈希表中的键值对。
    List列表数据结构:
        1    BLPOP key1 [key2 ] timeout 
            移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
        2    BRPOP key1 [key2 ] timeout 
            移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
        3    BRPOPLPUSH source destination timeout 
            从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
        4    LINDEX key index 
            通过索引获取列表中的元素
        5    LINSERT key BEFORE|AFTER pivot value 
            在列表的元素前或者后插入元素
        6    LLEN key 
            获取列表长度
        7    LPOP key 
            移出并获取列表的第一个元素
        8    LPUSH key value1 [value2] 
            将一个或多个值插入到列表头部
        9    LPUSHX key value 
            将一个值插入到已存在的列表头部
        10    LRANGE key start stop 
            获取列表指定范围内的元素
        11    LREM key count value 
            移除列表元素
        12    LSET key index value 
            通过索引设置列表元素的值
        13    LTRIM key start stop 
            对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
        14    RPOP key 
            移除列表的最后一个元素,返回值为移除的元素。
        15    RPOPLPUSH source destination 
            移除列表的最后一个元素,并将该元素添加到另一个列表并返回
        16    RPUSH key value1 [value2] 
            在列表中添加一个或多个值
        17    RPUSHX key value 
            为已存在的列表添加值
    Redis的订阅发布:
        1    PSUBSCRIBE pattern [pattern ...] 
            订阅一个或多个符合给定模式的频道。
        2    PUBSUB subcommand [argument [argument ...]] 
            查看订阅与发布系统状态。
        3    PUBLISH channel message 
            将信息发送到指定的频道。
        4    PUNSUBSCRIBE [pattern [pattern ...]] 
            退订所有给定模式的频道。
        5    SUBSCRIBE channel [channel ...] 
            订阅给定的一个或多个频道的信息。
        6    UNSUBSCRIBE [channel [channel ...]] 
            指退订给定的频道。
            
    Redis事务:
        1    DISCARD 
            取消事务,放弃执行事务块内的所有命令。
        2    EXEC 
            执行所有事务块内的命令。
        3    MULTI 
            标记一个事务块的开始。
        4    UNWATCH 
            取消 WATCH 命令对所有 key 的监视。
        5    WATCH key [key ...] 
            监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值