zoukankan      html  css  js  c++  java
  • redis数据类型--个人常规用法

    一.String

    1.可以容纳最高512M的value。

    2.经常用于通过expire来实现自动过期的一些值,直接通过setex 来。

    3.通过incrby的方式,来实现value值得增长。

    4.执行setnx会返回加成后的值来决定谁获取到了锁,比如同时往一个空的key写 setnx key value,哪个线程返回值是1,即为抢到了锁。

        基于以上,则可以实现简单的分布式锁:

    public void lock(){
        if(jedis.setnx("test.lock","1") == 1){
            jedis.expire("test.lock",3);
            //TODO
        }
    }
    
    public void unlock(){
        jedis.del("test.lock");
    }

    二.hash

    hash是一个string类型的field和value的映射表,hash很多操作指令都类似于string类型的指令,经常用于存储数据。

    1.hash 常常用于存储数据。

    2.hash 是 key field value的数据结构,与String相比,更省内存,但是对应自动过期粒度到Key,因此选择哪种数据结构依赖于需求决定。

    三.List

    List 简单就是队列,一般都是用于做简单的FIFO队列。

    1.采用rpush key value 把值赛进去,通过lpop把值取出来。

    2.如果是一次取出多个可以用另外一种方式减少交互的次数,降低往返的时延。

       a.pipeline 降低交互次数。

       b.lrange 获取数据

       c.ltrim 移除数据

    1 Jedis client = clientManager.getPooledClient();
    2 Pipeline pipeline = client.pipelined();
    3 pipeline.lrange(key,start,end);
    4 pipeline.ltrim(key,end + 1, -1);
    5 List<Object> rs = pipeline.syncAndReturnAll();
    6 List<String> result = (List<String>) rs.get(0);

    四.Set

    Set 就是set,String 类型的无序集合,不允许重复

    1.set类型可以简单通过sadd 判定某个值是否存在,不存在则返回 1,存在返回0.

    2.在一些不允许重复值的场景下还是非常好用的。

    五.sortedSet

    有序集合,默认根据score排序,可使用场景非常多。

    1.热门排序,由于在写入的时候就根据score排序,因此根据score获取非常快,但是在写入时候时间复杂度会相对高些。

    2.分布式定时任务,这个当时无意中发现的,再一些时间精度要求没那么高的场景时候非常好用。

      a.设置定时任务,key score(时间戳) member(定时任务参数)

      b.zrangebyscore,获取某个区间内的任务。返回值是Set<String> 即member的列表

      c.zrem key member,根据争抢有移除到的返回值为1,未移除到的返回值为0,来判断这个定时任务在哪台机器上执行。

      d.根据具体的member来执行任务

    //添加定时任务
    jedis.zadd("cronKey",1554739013,"{'param':'123'}");
    
    //获取区间定时任务
    Set<String> members = jeids.zrangeByScore("cronKey",0,currentTime);
    
    for(String value:members){
      if(jedis.zrem("cronKey",value) > 0){
        //TODO
      }
    }
  • 相关阅读:
    Python:文件操作技巧(File operation)
    使用多域名实现并行下载
    win7 + cygwin + nodejs很详细的安装步骤【推荐】
    gzip压缩
    C#中一些常用的方法使用
    C#中的@符号的使用
    Sql中partition by的使用
    C#中使用WCF一些常见问题及解决方案
    C# MVC中直接执行Js
    MVC路由规则进一步了解
  • 原文地址:https://www.cnblogs.com/HA-Tinker/p/10674457.html
Copyright © 2011-2022 走看看