2人参与 • 2025-03-10 • Java
<dependencies> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-data-redis</artifactid> </dependency> <dependency> <groupid>org.apache.commons</groupid> <artifactid>commons-pool2</artifactid> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> </dependency> </dependencies>
# redis服务器地址 spring.redis.host=192.168.11.84 # redis服务器连接端口 spring.redis.port=6379 # redis服务器连接密码(默认为空) spring.redis.password= # redis数据库索引(默认为0) 共15个 spirng.redis.database=0 ## 连接超时时间(毫秒) spring.redis.timout=30000 # 连接池最大连接数(使用负值表示没有限制) 默认 8 spring.redis.lettuce.pool.max-active=8 # 连接池中的最大空闲连接 默认 8 spring.redis.lettuce.pool.max-idle=8 # 连接池中的最小空闲连接 默认 0 spring.redis.lettuce.pool.min-idle=1 #连接池中最大空闲等待时间,3s没有活干的时候直接驱逐该链接 spring.redis.lettuce.pool.min-evicate-idle-time-millis=3000 # 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1 spring.redis.lettuce.pool.max-wait=-1
package com.by.config; import com.fasterxml.jackson.databind.objectmapper; import org.springframework.boot.autoconfigure.condition.conditionalonmissingbean; import org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; import org.springframework.data.redis.connection.redisconnectionfactory; import org.springframework.data.redis.core.redistemplate; import org.springframework.data.redis.serializer.jackson2jsonredisserializer; import org.springframework.data.redis.serializer.stringredisserializer; import java.net.unknownhostexception; @configuration public class redisconfig { @bean @conditionalonmissingbean(name = "redistemplate") public redistemplate<object, object> redistemplate(redisconnectionfactory redisconnectionfactory) throws unknownhostexception { redistemplate<object, object> template = new redistemplate<>(); template.setconnectionfactory(redisconnectionfactory); // key序列化方式 template.setkeyserializer(stringredisserializer.utf_8); //jackson2jsonredisserializer 序列化方式 来代替自来的jdk序列化方式,因为后者会乱码 jackson2jsonredisserializer jack = new jackson2jsonredisserializer(object.class); template.setvalueserializer(jack); template.sethashkeyserializer(stringredisserializer.utf_8); template.sethashvalueserializer(jack); /** * 使用objeck设置对象的类型为真实的对象类型 而不是hsash */ objectmapper mapper=new objectmapper(); // 启用默认类型推理,将类型信息作为属性写入json // 就是把对象的全类名写入json mapper.activatedefaulttyping(mapper.getpolymorphictypevalidator(), objectmapper.defaulttyping.non_final); // 将类型的信息作为属性传给json jack.setobjectmapper(mapper); return template; } }
@data @allargsconstructor @noargsconstructor @builder public class student implements serializable { private integer id; private string name; }
@data @allargsconstructor @noargsconstructor @builder public class product implements serializable { private integer id; private string name; }
@slf4j @springboottest class stringtest { /** * 使用redis 操作string */ @autowired private stringredistemplate str; // 自动序列化,用 @autowired报错 @resource(name ="redistemplate") private redistemplate<string,student> redistemplate; private final string key ="zhouxingxing"; /** * 将对象序列化 不用手动将对象转成字符串 */ @test void m8() { // jdk 序列化 student student = student.builder().id(1).name("张三").build(); // jdkserializationredisserializer serializer =new jdkserializationredisserializer(); // byte[] serialize = serializer.serialize(student); // string s=new string(serialize); // s乱码 redistemplate.opsforvalue().set("student", student); student student1 = redistemplate.opsforvalue().get("student"); system.out.println(student1.getname()); } /** * string里的get set 方法 */ @test void m1() { str.opsforvalue().set("xiaolong", "帅呆了"); string xiaolong = str.opsforvalue().get("xiaolong"); log.info("xiaolong:{}", xiaolong); } /** * string里的strlen 方法 * append 方法:追加字符串 */ @test void m2() { str.opsforvalue().set("xiaolong", "帅呆了"); string xiaolong = str.opsforvalue().get("xiaolong"); log.info("xiaolong:{}", xiaolong); // 追加字符串 str.opsforvalue().append("xiaolong", "哈哈"); // 获取长度 long size = str.opsforvalue().size("xiaolong"); log.info("长度为:{}", size);//15 } /** * string里的incr 方法 * incrby 方法:增加指定值 */ @test void m3() { str.opsforvalue().set("xiaolong", "100"); long xiaolong = str.opsforvalue().decrement("xiaolong", 2); log.info("xiaolong:{}", xiaolong); //98 } /** * 将student 对象存到redis 里 * jsonutil.tojsonstr(对象)--->将对象转成序列化的json字符串 */ @test void m4() { student student = student.builder().id(1).name("张三").build(); str.opsforvalue().set("student", jsonutil.tojsonstr(student)); log.info("student:{}", str.opsforvalue().get("student"));//student:{"id":1,"name":"张三"} } @test public void m7() { str.opsforhash().put(key,"20220325","郑州"); str.opsforhash().put(key,"20220326","洛阳"); // 拿到所有小key的值 list<object> values = str.opsforhash().values(key); for (object value : values) { system.out.println(value); } }
@springboottest @slf4j public class listtest { @autowired private stringredistemplate redistemplate; private final string key = "xiaolong"; /** * 给list左推元素和又推元素 * 从右方删除元素并返回删除的元素 */ @test void m1() { redistemplate.opsforlist().leftpush(key, "g1"); redistemplate.opsforlist().leftpush(key, "g2"); redistemplate.opsforlist().leftpush(key, "g3"); redistemplate.opsforlist().rightpush(key, "g4");//顺序为 g3 g2 g1 g4 // 从右边删除元素 并返回删除的元素 string s = redistemplate.opsforlist().rightpop(key); log.info("删除元素为:{}", s);// g4 } @test public void m2() { list<object> obj = redistemplate.executepipelined((rediscallback<object>) connection -> { //队列没有元素会阻塞操作,直到队列获取新的元素或超时 return connection.blpop(600, "list1".getbytes()); }, new stringredisserializer()); for (object str : obj) { system.out.println(str); } }
@slf4j @springboottest public class hashtest { @autowired private stringredistemplate redistemplate; // 自动序列化 @resource(name ="redistemplate") private redistemplate<string, student> redistemplate1; // 设置大key private final string key = "xiaolong"; @test void m10() { student student = student.builder().id(1).name("张三").build(); redistemplate1.opsforhash().put(key, "g1", student); object o = redistemplate1.opsforhash().get(key, "g1"); } // 设置商品黑名单 @test public void m9() { product p1 = product.builder().id(1).name("华为").build(); product p2 = product.builder().id(2).name("小米").build(); redistemplate1.opsforhash().put("黑名单","名单列表1",p1); redistemplate1.opsforhash().put("黑名单","名单列表2",p2); } /** * 获取大key里所有小key的值 */ @test public void m1() { redistemplate.opsforhash().put(key, "g1", "小芳"); redistemplate.opsforhash().put(key, "g2", "小红"); // 拿到所有小key的值 list<object> values = redistemplate.opsforhash().values(key); for (object value : values) { log.info("所有小key的值为:"+value); } }
@springboottest @slf4j public class settest { @autowired private stringredistemplate redistemplate; private final string xiaoming = "xiaoming"; private final string xiaohong = "xiaohong"; @test// 交集 void m1() { // 添加小明同学感兴趣的学科 redistemplate.opsforset().add(xiaoming, "语文", "数学","物理"); // 添加小红同学感兴趣的学科 redistemplate.opsforset().add(xiaohong, "语文", "英语"); // 获取两位同学共同感兴趣的学科 set<string> tong = redistemplate.opsforset().intersect(xiaohong, xiaoming); for (string s : tong) { log.info("小明和小红共同感兴趣的学科为:"+s);// 语文 } } @test//并集 void m2() { // 添加小明同学感兴趣的学科 redistemplate.opsforset().add(xiaoming, "语文", "数学","物理"); // 添加小红同学感兴趣的学科 redistemplate.opsforset().add(xiaohong, "语文", "英语"); // 获取两位同学共同感兴趣的学科 set<string> tong = redistemplate.opsforset().union(xiaohong, xiaoming); for (string s : tong) { log.info("小明和小红共同感兴趣的学科为:"+s);// 语文 } }
@springboottest @slf4j public class zsettest { @autowired private stringredistemplate redistemplate; @resource(name = "redistemplate") private redistemplate<string, integer> redistemplate1; private string key = "xiaolong"; /** * zset有序集合唯一 去重 适用于今日头条和热搜 * 给xiaolong 添加三门得成绩 */ @test public void m1() { redistemplate.opsforzset().add(key, "语文", 90); redistemplate.opsforzset().add(key, "数学", 100); redistemplate.opsforzset().add(key, "英语", 80); long along = redistemplate.opsforzset().zcard(key); log.info("{科目数量为:}", along); // 获取xiaolong的最高分 spring 没有给我们封装 redistemplate.execute(new rediscallback<object>() { @override public object doinredis(redisconnection connection) throws dataaccessexception { return connection.blpop(5, key.getbytes()); } }); }
@component public class bitmapdemo { @autowired private stringredistemplate stringredistemplate; private final string key ="sign#2022#zhouxingxing"; public void test(){ //设置签到 stringredistemplate.opsforvalue().setbit(key,2,true); stringredistemplate.opsforvalue().setbit(key,85,true); //获取周星星同学的签到天数 rediscallback<long> callback = connection -> { return connection.bitcount(key.getbytes(),0,365);}; long count = stringredistemplate.execute(callback); //打印周星星2022年签到天数 system.out.println("周星星2022年一共签到天数:"+count); } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论