zoukankan      html  css  js  c++  java
  • Redis的Jedis操作(五)

    需要把jedis依赖的jar包添加到工程中。Maven工程中需要把jedis的坐标添加到依赖。

    推荐添加到服务层。

    1.连接单机版

    第一步:创建一个Jedis对象。需要指定服务端的ip及端口。

    第二步:使用Jedis对象操作数据库,每个redis命令对应一个方法。

    第三步:打印结果。

    第四步:关闭Jedis

    @Test

         public void testJedis() throws Exception {

              // 第一步:创建一个Jedis对象。需要指定服务端的ip及端口。

              Jedis jedis = new Jedis("192.168.25.153", 6379);

              // 第二步:使用Jedis对象操作数据库,每个redis命令对应一个方法。

              String result = jedis.get("hello");

              // 第三步:打印结果。

              System.out.println(result);

              // 第四步:关闭Jedis

              jedis.close();

         }

     

    2.连接单机版使用连接池

    第一步:创建一个JedisPool对象。需要指定服务端的ip及端口。

    第二步:从JedisPool中获得Jedis对象。

    第三步:使用Jedis操作redis服务器。

    第四步:操作完毕后关闭jedis对象,连接池回收资源。

    第五步:关闭JedisPool对象。

    @Test

         public void testJedisPool() throws Exception {

              // 第一步:创建一个JedisPool对象。需要指定服务端的ip及端口。

              JedisPool jedisPool = new JedisPool("192.168.25.153", 6379);

              // 第二步:从JedisPool中获得Jedis对象。

              Jedis jedis = jedisPool.getResource();

              // 第三步:使用Jedis操作redis服务器。

              jedis.set("jedis", "test");

              String result = jedis.get("jedis");

              System.out.println(result);

              // 第四步:操作完毕后关闭jedis对象,连接池回收资源。

              jedis.close();

              // 第五步:关闭JedisPool对象。

              jedisPool.close();

         }

     

    3.连接集群版

    第一步:使用JedisCluster对象。需要一个Set<HostAndPort>参数。Redis节点的列表。

    第二步:直接使用JedisCluster对象操作redis。在系统中单例存在。

    第三步:打印结果

    第四步:系统关闭前,关闭JedisCluster对象。

     

    @Test

         public void testJedisCluster() throws Exception {

              // 第一步:使用JedisCluster对象。需要一个Set<HostAndPort>参数。Redis节点的列表。

              Set<HostAndPort> nodes = new HashSet<>();

              nodes.add(new HostAndPort("localhost", 7001));

              nodes.add(new HostAndPort("localhost", 7002));

              nodes.add(new HostAndPort("localhost", 7003));

              nodes.add(new HostAndPort("localhost", 7004));

              nodes.add(new HostAndPort("localhost", 7005));

              nodes.add(new HostAndPort("localhost", 7006));

              JedisCluster jedisCluster = new JedisCluster(nodes);

              // 第二步:直接使用JedisCluster对象操作redis。在系统中单例存在。

              jedisCluster.set("hello", "100");

              String result = jedisCluster.get("hello");

              // 第三步:打印结果

              System.out.println(result);

              // 第四步:系统关闭前,关闭JedisCluster对象。

              jedisCluster.close();

         }

     

     

    在业务代码中使用:

    注意:添加缓存不能影响正常业务逻辑。

     

    1.代码实现--在接口实现类方法中实现

     

    @Autowired

    private JedisClient jedisClient

    @Value("${CONTENT_KEY}")

    private String CONTENT_KEY;

    @Override

         public List<TbContent> getContentList(long cid) {

              //查询缓存

              try {

                   String json = jedisClient.hget(CONTENT_KEY, cid + "");

                   //判断json是否为空

                   if (StringUtils.isNotBlank(json)) {

                        //json转换成list

                        List<TbContent> list = JsonUtils.jsonToList(json, TbContent.class);

                        return list;

                   }

              } catch (Exception e) {

                   e.printStackTrace();

              }

              //根据cid查询内容列表

              TbContentExample example = new TbContentExample();

              //设置查询条件

              Criteria criteria = example.createCriteria();

              criteria.andCategoryIdEqualTo(cid);

              //执行查询

              List<TbContent> list = contentMapper.selectByExample(example);

              //向缓存中添加数据

              try {

                   jedisClient.hset(CONTENT_KEY, cid + "", JsonUtils.objectToJson(list));

              } catch (Exception e) {

                   e.printStackTrace();

              }

              return list;

         }

     

    2.缓存同步

    对内容信息做增删改操作后只需要把对应缓存删除即可。

    可以根据cid删除。

    @Override

         public E3Result addContent(TbContent content) {

              //补全属性

              content.setCreated(new Date());

              content.setUpdated(new Date());

              //插入数据

              contentMapper.insert(content);

              //缓存同步

              jedisClient.hdel(CONTENT_KEY, content.getCategoryId().toString());

             

              return E3Result.ok();

         }

  • 相关阅读:
    devm_xxx机制
    shell中的IFS和$*变量
    数轮中结论记录,超大指数取模
    ZOJ 3537 Cake 求凸包 区间DP
    数据库 外键
    python 学习笔记 sqlalchemy
    python 学记笔记 SQLalchemy
    malloc 函数详解
    动态字典树
    枚举子集的写法
  • 原文地址:https://www.cnblogs.com/Aaron-007/p/12814597.html
Copyright © 2011-2022 走看看