1.我的项目是maven项目,最近因为要用到,先引进下面两个包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>1.5.2.RELEASE</version>
</dependency>
2. 配置redis链接,因为spring-data集成了reids,我们只需要在yml文件里面配置数据库连接等就OK了
spring:
redis:
database: 0 # Redis数据库索引(默认为0)
host: 127.0.0.1 # Redis服务器地址
port: 6379 # Redis服务器连接端口
password:
3.StringRedisTemplate 是对redis数据库操作的封装模板,下图,是我们要使用模板的类关系

4.下面上测试代码咯!
1.先获取方法模板,可以使用@autowired 自动注入
String key = "hexiaowu";
/**
* 先获取redis对value的操作对象,需要先设定key
*/
BoundValueOperations stringTemplate = redisTemplate.boundValueOps(key);
2.对value操作的模板,有很多方法,我们下面一个一个来测试,(stringTemplate对象下会有多个set、get方法)

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 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());
接下来就是测试结果:
exiaowu设置缓存时间是否成功: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
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的名称 |
分享到:
相关推荐
本项目"springboot-redis"专注于如何在Spring Boot应用中集成和操作Redis。 首先,让我们详细探讨Spring Boot与Redis的集成。在Spring Boot应用中引入Redis支持,我们需要添加对应的依赖到`pom.xml`或`build.gradle...
在AOP切面`LockAspect`中,使用`RedisTemplate`的`boundValueOps().setIfAbsent()`来尝试获取锁,并通过`expire()`设置锁的超时时间。如果获取到锁,执行目标方法,否则直接返回,避免了重复执行。 2. 使用...
库存判断,利用decr操作(spring-data-redis封装后可以使用boundValueOps(KEY).increment(-1L)的形式 decr成功,发送mq消息,成功既可以返回客户端抢购成功 mq消费端处理下单、支付等具体流程(这里落db,支付等场景...
例如,Redis的`setIfAbsent`操作是原子的,但为了提高并发性能,可以考虑使用Redis的lua脚本来封装多个操作,以减少网络通信的开销。 总之,分布式锁是解决分布式系统中并发问题的关键技术,上述代码展示了基于...
1. **加锁**:使用 `stringRedisTemplate.boundValueOps(skuId).setIfAbsent("fmmall")` 这样的操作尝试为每个商品 ID(skuId)设置一个值,如果该值不存在(即没有其他客户端持有锁),则设置成功,返回 true,表示...