• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    redis缓存的简单操作(get、put)

    本文介绍简单的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 RuntimeSchemaObject> 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    //首先查询redis
    if null       //如果没有
     get from db     //再从数据库db查询
     if null      //如果仍然没有
      return null    //那么返回空
     else       //否则
      put into redis_cache  //现将数据放入redis
      return obj    //再放回数据
    else        //如果从redis中查询到了
     return obj     //那么直接返回数据
    

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

    您可能感兴趣的文章:
    • spring结合redis如何实现数据的缓存
    • Redis整合Spring结合使用缓存实例
    • php操作redis缓存方法分享
    • 图文详解Windows下使用Redis缓存工具的方法
    • Python的Flask框架使用Redis做数据缓存的配置方法
    • PHP使用redis实现统计缓存mysql压力的方法
    • Spring Boot 基于注解的 Redis 缓存使用详解
    • Nginx配置srcache_nginx模块搭配Redis建立缓存系统
    • CI框架中redis缓存相关操作文件示例代码
    • Redis缓存详解
    上一篇:SpringSession+Redis实现集群会话共享的方法
    下一篇:Redis 实现队列原理的实例详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    redis缓存的简单操作(get、put) redis,缓存,的,简单,操作,