Spring-Data之StringRedisTemplate-boundValueOps方法描述

1.我的项目是maven项目,最近因为要用到,先引进下面两个包 

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

<dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.6.2</version>
</dependency>

 

2. 配置redis链接,因为spring-data集成了reids,我们只需要在properties里面配置数据库连接等就OK了

spring.redis.host=redisIP
spring.redis.port=端口
spring.redis.pool.max-active=连接数
spring.redis.pool.max-idle=最大连接数
spring.redis.pool.min-idle=最小连接数
spring.redis.pool.max-wait=超时时间

 

3.StringRedisTemplate 是对redis数据库操作的封装模板,下图,是我们要使用模板的类关系

 

 

 

4.下面上测试代码咯!

------------------------------分割线-------------------------------------------

 

1.先获取方法模板,可以使用@autowired 自动注入

        @Autowired
        private StringRedisTemplate redisTemplate;
        
        String key = "hexiaowu";

		/**
		 * 先获取redis对value的操作对象,需要先设定key
		 */
		BoundValueOperations<String, String> stringTemplate = redisTemplate.boundValueOps(key);

 

2.对value操作的模板,有很多方法,我们下面一个一个来测试

set 方法

有三个重载的方法,分别是干嘛的呢,我们来测试下吧

 

        //赋值key
		stringTemplate.set("test");
		//获取value
		String value = stringTemplate.get();
		System.out.println(key+"的值为:"+value);
        
        //从value下标,第0位开始替换原有字符串
		stringTemplate.set("test1",0);
		String value1 = stringTemplate.get();
		System.out.println(key+"的值为:"+value1);
        
        //从value下标,第1位开始替换原有字符
		stringTemplate.set("test2",1);
		String value2 = stringTemplate.get();
		System.out.println(key+"的值为:"+value2);

        //从value下标第7位进行替换,如果超过原有字符串长度,差额中间补齐并且则将原有字符串跟新的进行拼接,
		stringTemplate.set("test3",7);
		String value3 = stringTemplate.get();
		System.out.println(key+"的值为:"+value3);

        /**
		 * 设置value缓存时间 V value, long timeout, TimeUnit unit
		 * 	三个字段分别对应 value,缓存时间,缓存单位,例如天,小时等,具体的,看TimeUnit源码,上面有描写,这里就不一一介绍了
		 */
		//设置超时时间为1天
		stringTemplate.set("testTimeout",1, TimeUnit.DAYS);
		//获取缓存时间,单位 秒
		Long expire = stringTemplate.getExpire();
		System.out.println(key+"的缓存时间为:"+expire);

 

下面是测试结果:

hexiaowu的值为:test
hexiaowu的值为:test1
hexiaowu的值为:ttest2
hexiaowu的值为:ttest2test3
hexiaowu的缓存时间为:86400

说明结果跟注释描写的一致,那接下来,我们测试其他方法咯

 

get 方法

 

 

下面是测试代码:

        //赋值key
		stringTemplate.set("test");
		//根据key获取value的值
		String value = stringTemplate.get();
		System.out.println(key+"的值为:"+value);

		//从 value 的下标开始截取字符串,从第一个参数开始,到第二个参数截止
		// 第一个参数不能小于0,如果小于0,则取出来的是个空字符串,
		// 第二个参数可以大于value的长度,这样,取出来的value就是完整的value,不会截取
		String value1 = stringTemplate.get(0, 1);
		System.out.println(key+"的值为:"+value1);

		// 获取原来的value,并且进行替换
		String modifyTest = stringTemplate.getAndSet("modifyTest");
		System.out.println(key+"的值为:"+modifyTest);
		String value3 = stringTemplate.get();
		System.out.println(key+"的值为:"+value3);

		//获取value的缓存时间,单位:秒 -1表示永不超时
		Long expire = stringTemplate.getExpire();
		System.out.println(key+"的超时时间:"+expire);

		//获取key值
		String key1 = stringTemplate.getKey();
		System.out.println(key+"的key值为:"+key1);

		//获取value的类型
		DataType type = stringTemplate.getType();
		System.out.println(value+"的类型为:"+type);

		//获取 RedisOperations 接口实现对象
		RedisOperations<String, String> operations = stringTemplate.getOperations();

 

测试结果:

hexiaowu的值为:test
hexiaowu的值为:te
hexiaowu的值为:test
hexiaowu的值为:modifyTest
hexiaowu的超时时间:-1
hexiaowu的key值为:hexiaowu
test的类型为:STRING

 

 

一些其他方法测试,就直接贴测试代码了

 

        //赋值value
		stringTemplate.set("1");
		//设置 key的缓存时间
		// 可以先添加对应的value,然后在设置缓存时间
		Boolean expire = stringTemplate.expire(1, TimeUnit.DAYS);
		System.out.println(key+"设置缓存时间是否成功:"+expire);
		//获取缓存时间
		Long expire1 = stringTemplate.getExpire();
		System.out.println(expire1);



		//设置具体的到期时间,并且返回是否设置成功,例如,设定当天8点,8点后就会自动销毁
		Boolean expireTime = stringTemplate.expireAt(new Date());
		System.out.println("是否设置成功:"+expireTime);
		//获取剩余过期时间
		Long expire3 = stringTemplate.getExpire();
		System.out.println("剩余到期时间:"+expire3);

		//删除key的到期时间,并且返回是否删除成功
		Boolean persist = stringTemplate.persist();
		System.out.println("删除key的缓存时间是否成功:"+persist);

		//获取剩余过期时间
		Long expire2 = stringTemplate.getExpire();
		System.out.println("key的缓存时间为"+expire2);



		String value = stringTemplate.get();
		System.out.println("原来的value="+value+",长度为:"+value.length());
		//在value值的基础上进行追加添加,并且返回新的字符串长度
		Integer addComment = stringTemplate.append("2");
		String s = stringTemplate.get();
		System.out.println("新的value="+s+",新的字符串长度为"+addComment);

		String value1 = stringTemplate.get();
		System.out.println("原来的value="+value1);
		//如果value 是number类型,增加value的值,如 12变为 12+param,并且返回新的value
		// 方法重载,可以传递2中参数,一个是 long还有一个是double,分别返回对应参数的类型 value
		Long increment = stringTemplate.increment(1);
		System.out.println("value增加参数后的值为:"+increment);
		String s1 = stringTemplate.get();
		System.out.println("新的value="+s1);

		//获取value的长度
		Long size = stringTemplate.size();
		System.out.println("value的长度为"+size);

		//删除key
		redisTemplate.delete(key);
		//如果key没有设置value的话,那么参数设置为value
		Boolean asd = stringTemplate.setIfAbsent("123");
		System.out.println("新的value="+stringTemplate.get());

		System.out.println("旧的key为:"+stringTemplate.getKey());
		//替换key的名称
		stringTemplate.rename("newhexiaowu");
		System.out.println("新的key为:"+stringTemplate.getKey());

 

接下来就是测试结果:

 

hexiaowu设置缓存时间是否成功:true
86400
是否设置成功:true
剩余到期时间:36
删除key的缓存时间是否成功:true
key的缓存时间为-1
原来的value=1,长度为:1
新的value=12,新的字符串长度为2
原来的value=12
value增加参数后的值为:13
新的value=13
value的长度为2
新的value=123
旧的key为:hexiaowu
新的key为:newhexiaowu

ps:

使用StringRedisTemplate  set值,可以对相同的key进行重复set,不同的是新值会把旧值覆盖掉,包括过期时间。

以上就是本人测试的一些结果,可能会有一些出入什么的,欢迎指正

 

 

BoundValueOperations 接口文档,因为官方文档并没有对方法的描述,源码里面也没有注释,所以在下面增加一份方法作用描述.方法中的 V,K均为String,大家可以收藏文章保存,以后忘了,可以进行查阅

方法名方法描述
void set(V value)设定key对应的vlaue值
void set(V value,long offset)将value值从第offset位开始替换
                  void set(V value, long timeout, TimeUnit unit)设置value的超时时间,timeout为数字,unit为单位,例如天,小时等
Boolean setIfAbsent(V value)判断key是否有对应的value,如果有,则返回false,如果没有,添加,返回true
V get()返回key对应的value
String get(long start, long end)从start开始,到end结束,截取value的值
V getAndSet(V value)替换value的值,并且返回value的旧值
Long increment(long delta)如果value是数字类型的字符串,那么增加delta,并且返回新的value
Double increment(double delta)如果value是数字类型的字符串,那么增加delta,并且返回新的value
Integer append(String value)在value值后面进行添加,并且返回新value的长度
Long size()返回value的长度
Boolean expire(long var1, TimeUnit var3)设置key的缓存时间,var1为数字,unit为单位,例如天,小时等,返回是否设置成功
Boolean expireAt(Date var1)设置key的具体到期时间,并且返回是否设置成功
Long getExpire()返回key的剩余缓存时间,单位:秒
K getKey()返回key的名称
DataType getType()获取key的类型
Boolean persist()删除key的缓存时间
void rename(K var1)修改key的名称

 

 

上面就是我自己测试的一些方法,下次测试对redis对List,Set等集合的操作.

原作者:贺小五

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值