Redis如何存储对象与集合示例详解
程序员文章站
2022-03-14 18:25:38
前言
大家都知道在项目中,缓存以及mq消息队列可以说是不可或缺的2个重要技术。前者主要是为了减轻数据库压力,大幅度提升性能。后者主要是为了提高用户的体验度,我理解的是再后...
前言
大家都知道在项目中,缓存以及mq消息队列可以说是不可或缺的2个重要技术。前者主要是为了减轻数据库压力,大幅度提升性能。后者主要是为了提高用户的体验度,我理解的是再后端做的一个ajax请求(异步),并且像ribbmitmq等消息队列有重试机制等功能。
这里主要讲redis如何把对象,集合存入,并且取出。下面话不多说了,来一起看看详细的介绍吧。
1.在启动类上加入如下代码
private jedis jedis;private jedispoolconfig config;private jedisshardinfo sharinfo;@beanpublic jedis jedis(){//连接redis服务器,192.168.0.100:6379// jedis = new jedis("192.168.0.100", 6379);// //权限认证// jedis.auth("123456");// 操作单独的文本串config = new jedispoolconfig(); config.setmaxidle(1000);//最大空闲时间config.setmaxwaitmillis(1000); //最大等待时间config.setmaxtotal(500); //redis池中最大对象个数sharinfo = new jedisshardinfo("192.168.0.100", 6379); sharinfo.setpassword("123456"); sharinfo.setconnectiontimeout(5000);//链接超时时间jedis = new jedis(sharinfo);return jedis; }
2.在application.yml当中加入redis配置
spring: redis: database: 0 host: 101.132.191.77 port: 6379 password: 123456 pool: max-idle: 8 #连接池最大连接数(使用负值表示没有限制) min-idle: 0 # 连接池中的最小空闲连接 max-active: 8 # 连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: -1 # 连接池中的最大空闲连接 timeout: 5000 # 连接超时时间(毫秒)
3.新建serializeutil类,这个类主要是为了将对象序列化redis当中
import java.io.bytearrayinputstream; import java.io.bytearrayoutputstream; import java.io.objectinputstream; import java.io.objectoutputstream;/** public class serializeutil { public static byte[] serialize(object object) { objectoutputstream oos = null; bytearrayoutputstream baos = null; try {// 序列化baos = new bytearrayoutputstream(); oos = new objectoutputstream(baos); oos.writeobject(object); byte[] bytes = baos.tobytearray(); return bytes; } catch (exception e) { }return null; } public static object unserialize( byte[] bytes) { bytearrayinputstream bais = null; try { // 反序列化bais = new bytearrayinputstream(bytes); objectinputstream ois = new objectinputstream(bais); return ois.readobject(); } catch (exception e) { }return null; } }
4.我封装了一个redisserviceimpl类,主要是用对redis设值和取值
import com.ys.util.redis.serializeutil; import org.springframework.beans.factory.annotation.autowired; import org.springframework.data.redis.core.stringredistemplate; import org.springframework.stereotype.service; import redis.clients.jedis.jedis; import java.util.list; import java.util.map; import java.util.concurrent.timeunit; @service public class redisserviceimpl {@autowired private stringredistemplate stringredistemplate; @autowired private jedis jedis; public void setstr(string key, string value) { setstr(key, value, null); } public void setstr(string key, object value, long time) {if(value == null){ return; }if(value instanceof string){ string obj = (string) value; stringredistemplate.opsforvalue().set(key, obj); }else if(value instanceof list){ list obj = (list) value; stringredistemplate.opsforlist().leftpushall(key,obj); }else if(value instanceof map){ map obj = (map) value; stringredistemplate.opsforhash().putall(key,obj); }if (time != null) stringredistemplate.expire(key, time, timeunit.seconds); } public object getkey(string key) {return stringredistemplate.opsforvalue().get(key); } public void delkey(string key) { stringredistemplate.delete(key); } public boolean del(string key) {return jedis.del(key.getbytes())>0; } }
5.测试redis是否ok,编写rediscontroller类
import com.ys.service.impl.redisserviceimpl; import com.ys.vo.iqproduct; import org.springframework.beans.factory.annotation.autowired; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.restcontroller; import java.util.arraylist; import java.util.date; import java.util.list; @restcontroller public class redisservicecontroller { @autowired private redisserviceimpl redisservice; @requestmapping(value = "/setredis") public string setredis(string keyredis){ redisservice.setstr(keyredis,"2018年1月26日"); return "保存成功,请访问getredis查询redis"; } @requestmapping(value = "/setobj") public string setobj(string keyredis){ iqproduct iqproduct = new iqproduct(); iqproduct.setsort(1); iqproduct.settimestamp(new date().gettime()); iqproduct.setproductname("productname"); // list.add(iqproduct); redisservice.set(keyredis, iqproduct); return "保存成功,请访问getredis查询redis"; } @requestmapping(value = "/getobj") public object getobj(string keyredis){ object object = redisservice.get(keyredis); if(object !=null){ iqproduct iqproduct = (iqproduct) object; system. out.println(iqproduct.getproductname()); system. out.println(iqproduct.getid()); system. out.println(iqproduct.gettimestamp()); }return object; } @requestmapping(value = "/delobj") public boolean delobj(string keyredis) {boolean del = redisservice.del(keyredis); return del; } @requestmapping(value = "/getredis") public string getredis(string keyredis){ string getredis = (string) redisservice.getkey(keyredis); return "redis的key是===>"+getredis; } @requestmapping(value = "/delredis") public string delredis(string keyredis){ redisservice.delkey(keyredis); return "删除成功,请通过getredis进行查询"; } @requestmapping(value = "/setlist") public string setlist(string keyredis){ list list = new arraylist();for (int i = 0;i<10;i++){ iqproduct iqproduct = new iqproduct(); iqproduct.setsort(1); iqproduct.settimestamp(new date().gettime()); iqproduct.setproductname("productname"); list.add(iqproduct); } redisservice.set(keyredis, list); return "保存成功,请访问getredis查询redis"; } @requestmapping(value = "/getlist") public object getlist(string keyredis){ object object = redisservice.get(keyredis); if(object !=null){ list<iqproduct> iqproducts = (list<iqproduct>) object; for (int i = 0;i<iqproducts.size();i++){ iqproduct iqproduct = iqproducts.get(i); system. out.println(iqproduct.getproductname()); system. out.println(iqproduct.getid()); system. out.println(iqproduct.gettimestamp()); } }return object; } @requestmapping(value = "/dellist") public boolean dellist(string keyredis) { boolean del = redisservice.del(keyredis);return del; } }
6.测试结果
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
下一篇: JS中移除非数字最多保留一位小数