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中提供了以下几种继承关系。
BoundValueOperations和ValueOperations;针对key-value形式的数据。
BoundSetOperations和SetOperations;针对key-set形式的数据。
BoundListOperations和ListOperations;针对key-list形式的数据。
BoundHashOperations和HashOperations;针对key-map形式的数据。
BoundGeoOperations和GeoOperations;针对经纬度-城市形式的数据。
BoundZSetOperations和ZSetOperations;针对有序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 被其他命令所改动,那么事务将被打断。