redis缓存的简单操作(get、put)
本文介绍简单的redis缓存操作,包括引入jedisjar包、配置redis、RedisDao需要的一些工具、向redis中放数据(put)、从redis中取数据(get)、访问redis时的逻辑
一、引入jedisjar包
redis.clients jedis 2.7.3 com.dyuproject.protostuff protostuff-core 1.0.8 com.dyuproject.protostuff protostuff-runtime 1.0.8
注意:为什么要引入序列化依赖jar包protostuff?
1)从redis中取出的数据是序列化的,我们需要使用protostuff的反序列化操作,讲序列化对象转化成我们的需要的对象
2)向redis中放入数据时,我们需要先使用protostuff的序列化操作,将对象转化成序列化对象,才能放入redis
二、在spring配置文件中注入redis,放入spring的ioc容器
注意:
1)这里的RedisDao路径是我的包路径,注意你在配置的时候应使用你自己的路径
2)这里使用本地的redis服务localhost
3)redis服务的默认端口是6379
三、RedisDao需要的一些工具
//redis连接池 privatefinalJedisPooljedisPool;//根据对象的字节码文件,生成空对象 privateRuntimeSchema
注意:
1)RedisDao需要redis的连接池JedisPool,就好比JDBC的数据库连接池一样。我们在RedisDao的构造器中会初始化这个连接池
2)我们需要一个可以根据对象的字节码文件生成空对象的工具RuntimeSchema。你要使用什么对象,你就在Object的位置写入你的对象(Object.class:获取对象的字节码文件)
3)连接池JedisPool的初始化需要两个参数:ip、port
四、向redis中放数据(put)
//将对象缓存到redis
publicStringputObject(Objectobj){
//缓存逻辑:Object-->序列化-->byte[]-->缓存到redis
try{
Jedisjedis=jedisPool.getResource();//获取redis的连接对象,相当于JDBC的connection
try{
Stringkey="Object:"+obj.getId();
//进行序列化
byte[]bytes=ProtostuffIOUtil.toByteArray(seckill,schema,
LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE));//如果对象过大,会进行缓冲
//开始缓存
inttimeout=60*60;//设置超时时间一小时,通过超时维护一致性
Stringresult=jedis.setex(key.getBytes(),timeout,bytes);
returnresult;
}finally{
jedis.close();
}
}catch(Exceptione){
e.printStack();
}
returnnull;
}
注意:
1)缓存逻辑:Object-->序列化操作-->byte[]-->写入redis。也就是先把对象序列化,再写入redis!
2)我们在操作redis之前必须先拿到redis的连接对象,从连接池拿
五、从redis中取数据(get)
//从redis缓存中查询
publicObjectgetObject(longid){
//redis操作逻辑
try{
Jedisjedis=jedisPool.getResource();//缓存连接对象,相当于数据库连接对象connection
try{
Stringkey="Object:"+id;
//实体对象并没有实现内部序列化操作
//缓存逻辑:getByte[]-->反序列化-->Object
byte[]bytes=jedis.get(key.getBytes());//从jedis中获取目标对象的序列化对象数组
if(bytes!=null){
//反序列化逻辑
Objectobj=schema.newMessage();//通过schema生成一个新的空对象
ProtostuffIOUtil.mergeFrom(bytes,obj,schema);//进行反序列化操作
returnobj;
}
}finally{
jedis.close();
}
}catch(Exceptione){
e.printStack();
}
returnnull;
}
注意:
1)取数据逻辑:redis-->得到byte[]-->反序列化-->Object
2)我们在放数据的时候,是以键值对的形式:id-->obj。我们在取数据的时候,就是根据id来取的
六、查询redis时的逻辑
伪代码:
getformredis_cache//首先查询redis ifnull//如果没有 getfromdb//再从数据库db查询 ifnull//如果仍然没有 returnnull//那么返回空 else//否则 putintoredis_cache//现将数据放入redis returnobj//再放回数据 else//如果从redis中查询到了 returnobj//那么直接返回数据
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。