RedisTemplate基本学习

使用背景

项目中因为一些数据来源于第三方系统,偶尔会有第三方接口不通,数据库不可用以及网络问题,所以选择redis用作中间件,用来缓存第三方的数据信息。

使用RedisTemplate

RedisTemplate是Spring Data Redis提供给用户的最高级的抽象客户端,用户可直接通过RedisTemplate进行多种操作。

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

RedisTemplate内封装了很多操作接口:
ValueOperations:简单K-V操作
SetOperations:set类型数据操作
ZSetOperations:zset类型数据操作
HashOperations:针对map类型的数据操作
ListOperations:针对list类型的数据操作
针对数据的“序列化/反序列化”,提供了多种可选择策略(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模块的支持】
项目使用情况:
在这里插入图片描述

RedisTemplate各种数据结构的操作

操作String的常用方法

set void set(K key, V value);
set void set(K key, V value, long timeout, TimeUnit unit);
set void set(K key, V value, long offset);

redisTemplate.opsForValue().set("num","12345");
redisTemplate.opsForValue().get("num")  //输出结果为12345

redisTemplate.opsForValue().set("num","123",10l, TimeUnit.SECONDS);
redisTemplate.opsForValue().get("num")//设置的是10秒失效,十秒之内查询有结果,十秒之后返回为null

template.opsForValue().set("key","hello world");
template.opsForValue().set("key","redis", 6);//hello redis

等等很多基础操作。。。。。

操作List的常用方法

Long size(K key);
返回存储在键中的列表的长度。如果键不存在,则将其解释为空列表,并返回0。当key存储的值不是列表时返回错误。
Long leftPush(K key, V value);
将所有指定的值插入存储在键的列表的头部。如果键不存在,则在执行推送操作之前将其创建为空列表。(从左边插入)
Long leftPushAll(K key, V… values);
批量把一个数组插入到列表中。
Long rightPush(K key, V value);
将所有指定的值插入存储在键的列表的头部。如果键不存在,则在执行推送操作之前将其创建为空列表。(从右边插入)
Long remove(K key, long count, Object value);
从存储在键中的列表中删除等于值的元素的第一个计数事件。
计数参数以下列方式影响操作:
count> 0:删除等于从头到尾移动的值的元素。
count <0:删除等于从尾到头移动的值的元素。
count = 0:删除等于value的所有元素。

template.opsForList().size("list");

template.opsForList().leftPush("list","java");
template.opsForList().leftPush("list","python");
template.opsForList().leftPush("list","c++");

template.opsForList().rightPush("listRight","java");
template.opsForList().rightPush("listRight","python");
template.opsForList().rightPush("listRight","c++");


操作Hash的常用方法

Long delete(H key, Object… hashKeys);
删除给定的哈希hashKeys
Boolean hasKey(H key, Object hashKey);
确定哈希hashKey是否存在
HV get(H key, Object hashKey);
从键中的哈希获取给定hashKey的值

template.opsForHash().delete("redisHash","name");

template.opsForHash().hasKey("redisHash","666")

操作Set,ZSet的常用方法均可参照api文档使用,不去列举了。

参考:https://blog.csdn.net/sinat_27629035/article/details/102652185

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值