虚位以待(AD)
虚位以待(AD)
首页 > 数据库 > Redis数据库 > redis缓存的简单操作(get、put)

redis缓存的简单操作(get、put)
类别:Redis数据库   作者:码皇   来源:互联网   点击:

这篇文章主要介绍了redis缓存的简单操作,包括引入jedisjar包、配置redis、RedisDao需要的一些工具等,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文介绍简单的redis缓存操作,包括引入jedisjar包、配置redis、RedisDao需要的一些工具、向redis中放数据(put)、从redis中取数据(get)、访问redis时的逻辑

一、引入jedis jar包

    <!-- java访问redis的jar包jedis --><dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.7.3</version></dependency><!-- protostuff序列化依赖 --><dependency> <groupId>com.dyuproject.protostuff</groupId> <artifactId>protostuff-core</artifactId> <version>1.0.8</version></dependency><dependency> <groupId>com.dyuproject.protostuff</groupId> <artifactId>protostuff-runtime</artifactId> <version>1.0.8</version></dependency>

注意:为什么要引入序列化依赖jar包protostuff?

1)从redis中取出的数据是序列化的,我们需要使用protostuff的反序列化操作,讲序列化对象转化成我们的需要的对象

2)向redis中放入数据时,我们需要先使用protostuff的序列化操作,将对象转化成序列化对象,才能放入redis

二、在spring配置文件中注入redis,放入spring的ioc容器

    <!-- 注入redis dao --><bean id="redisDao" class="org.demo.dao.cache.RedisDao">  <constructor-arg index="0" value="localhost"></constructor-arg>  <constructor-arg index="1" value="6379"></constructor-arg></bean>

注意:

1)这里的RedisDao路径是我的包路径,注意你在配置的时候应使用你自己的路径

2)这里使用本地的redis服务localhost

3)redis服务的默认端口是6379

三、RedisDao需要的一些工具

    //redis连接池 private final JedisPool jedisPool;
    //根据对象的字节码文件,生成空对象 private RuntimeSchema<Object> schema = RuntimeSchema.createFrom(Object.class);
    //Object.class:获取对象的字节码 public RedisDao(String ip, int port){
    jedisPool = new JedisPool(ip, port);
    }

注意:

1)RedisDao需要redis的连接池JedisPool,就好比JDBC的数据库连接池一样。我们在RedisDao的构造器中会初始化这个连接池

2)我们需要一个可以根据对象的字节码文件生成空对象的工具 RuntimeSchema。你要使用什么对象,你就在Object的位置写入你的对象(Object.class:获取对象的字节码文件)

3)连接池JedisPool的初始化需要两个参数:ip、port

四、向redis中放数据(put)

    //将对象缓存到redis public String putObject(Object obj){
    //缓存逻辑:Object --> 序列化 --> byte[] --> 缓存到redis try {
    Jedis jedis = jedisPool.getResource();
    //获取redis的连接对象,相当于JDBC的connection try{
    String key = "Object:"+obj.getId();
    //进行序列化 byte[] bytes = ProtostuffIOUtil.toByteArray(seckill, schema, LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE));
    //如果对象过大,会进行缓冲 //开始缓存 int timeout = 60*60;
    //设置超时时间 一小时,通过超时维护一致性 String result = jedis.setex(key.getBytes(), timeout, bytes);
    return result;
    }
    finally{
    jedis.close();
    }
    }
    catch (Exception e) {
    e.printStack();
    }
    return null;
    }

注意:

1)缓存逻辑:Object --> 序列化操作 --> byte[] --> 写入redis。也就是先把对象序列化,再写入redis!

2)我们在操作redis之前必须先拿到redis的连接对象,从连接池拿

五、从redis中取数据(get)

    //从redis缓存中查询 public Object getObject(long id){
    //redis操作逻辑 try {
    Jedis jedis = jedisPool.getResource();
    //缓存连接对象,相当于数据库连接对象connection try {
    String key = "Object:"+id;
    //实体对象并没有实现内部序列化操作 //缓存逻辑:getByte[] --> 反序列化 --> Object byte[] bytes = jedis.get(key.getBytes());
    //从jedis中获取目标对象的序列化对象数组 if(bytes != null){
    //反序列化逻辑 Object obj = schema.newMessage();
    //通过schema生成一个新的空对象 ProtostuffIOUtil.mergeFrom(bytes, obj, schema);
    //进行反序列化操作 return obj;
    }
    }
    finally {
    jedis.close();
    }
    }
    catch (Exception e) {
            e.printStack();
    }
    return null;
    }

注意:

1)取数据逻辑:redis --> 得到byte[] --> 反序列化 --> Object

2)我们在放数据的时候,是以键值对的形式:id --> obj。我们在取数据的时候,就是根据id来取的

六、查询redis时的逻辑

伪代码:

    get form redis_cache //首先查询redisif null //如果没有 get from db //再从数据库db查询 if null //如果仍然没有 return null //那么返回空 else //否则 put into redis_cache //现将数据放入redis return obj //再放回数据else //如果从redis中查询到了 return obj //那么直接返回数据

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关热词搜索: redis 缓存