美文网首页Java实战
Redis基础篇-基本数据类型和API运用

Redis基础篇-基本数据类型和API运用

作者: 不孤独的字符串 | 来源:发表于2019-11-21 13:56 被阅读0次

    Redis是一个基于内存亦可持久化的日志型数据结构存储,基于RESP协议进行通讯,可用于数据库、缓存和消息队列。协议简单,数据在内存中进行操作同时又是单线程运行,避免了资源竞争以及线程之间上下文切换的开销,因此Redis的速度很快。但同时也存在一个请求独大的问题,如果某个命令处理很慢,会导致其他命令一直处于阻塞状态。

    RESP协议

    Redis是使用RESP协议进行通讯,底层其实也是TCP协议,RESP协议的数据形式很简单,*后面数量表示存在几个$,$后面数量表示字符串的长度,例如:

    *3
    $3
    SET
    $5
    key
    $7
    value
    

    合并之后的数据便是:"*3\r\n3\r\nSET\r\n5\r\nkey\r\n$7\r\nvalue\r\n",Redis中回复也是使用这种格式。

    Redis中提供了5中基本数据类型方便数据的操作,分别是:string、list、hash、set、zset。

    字符串(String)

    在Java中,万物皆对象,也皆可变成string,包括XML,JSON,数字,二进制文件(图片 音频、视频),最大不能超过512MB。

    --设置值
    set key value ex 10    //设置kv,10秒后过期
    setnx key value        //key不存在,设置value成功返回1,存在则添加失败返回0
    mset key value key2 value2...  //批量设置值
    append key value       //字符串追加
    
    --获取值
    get key                //存在则返回value, 不存在返回nil
    mget key key2 key3...  //批量获取值
    strlen key             //获取字符串长度
    getrange key 2 4       //截取字符串
     
    --计数
    incr key               //value+1,非整数返回错误,key不存在设置value为1,返回1
    decr key               //value-1
    incrby key n           //value+n
    decrby key n           //value-n
    incrbyfloat key 1.1    //浮点型key+1.1
    
    Hash

    hash可以看成是一个映射表类型的存储结构,有点类似于Java中的Map<K,Object>这种结构,适合存储对象。

    hset key field value     //设值,成功返回1,失败返回0
    hget key field           //取值,返回field对应的值
    hdel key field           //删除值,返回删除的个数
    
    --计算field个数
    hset key field value; hset key field2 value2; 
    hlen key                //返回2,key中有两个属性值
    --批量设值
    hmset key field value field2 value2 field3 value3 ... 
    --批量取值
    hmget key field field2 field3
    
    hexists key field               //判断field是否存在,若存在返回1,不存在返回0
    hkeys key                       //获取所有field
    hvals key                       //获取所有value:
    hgetall key                     //获取所有field与value:
    
    hincrby key field 1             //增加
    hincrbyfloat key field 2        //浮点型增加
    
    List

    list可用来存储多个有序的字符串,一个列表最多可存2的32次方减1个元素,可以看成是一个消息队列。因为有序,可以通过索引下标获取元素或某个范围内元素列表,列表元素可以重复。

    --添加命令:
    rpush key c b a         //从右向左插入cba, 返回值3
    lrange key 0 -1         //从左到右获取列表所有元素 返回 c b a
    lpush key c b a         //从左向右插入cba
    linsert key before b c  //在b之前插入c, after为之后
     
    --查找命令:
    lrange key start end   //索引下标特点:从左到右为0到N-1
    lindex james -1        //返回最右末尾值,-2返回倒数1第二个
    llen key               //返回当前列表长度
    lpop key               //把最左边的第一个元素c删除
    rpop key               //把最右边的元素a删除
    
    Set

    set保存多元素,与列表不同的是不允许有重复元素,且集合是无序,一个集合最多可添加231-1个元素,除了支持增删改查,还支持集合交集、并集、差集;

    sadd key a b c      //向key中插入3个元素,返回3
    sadd key a b        //若再加入相同的元素,则重复无效,返回0
    smember key         //获取key的所有元素,返回结果无序
    srem key a          //返回1,删除a元素
    scard key           //返回2,计算元素个数
    sinter key1 key2    //计算集合的交集,可用于智能推荐
    
    ZSet

    zset常用于排行榜,如视频网站需要对用户上传视频做排行榜,或点赞数。与集合有联系,不能有重复的成员,有序,根据score排序。

    zadd key score member   //基本命令
    zadd key 200 member         //返回操作成功的条数1
    zadd key 200 member 120 member2 100 member3 ... // 批量添加,操作成功返回操作总条数3
    zadd key nx 100 member           //键key必须不存在,主用于添加
    zadd key xx incr 200 member      //键key必须存在,主用于修改,此时为300
    zadd key xx ch incr -n member    //减少分数,返回操作结果
    zrange key 0 -1 withscores       //查看分数与成员
    zcard key                        //计算成员个数
    
    zrank key member        //返回名次,下表从0开始
    zrevrank key member     //反排序,score越高,排名越前
    
    Redis全局命令

    适用于所有数据类型的指令

    keys *              //查看所有键
    dbsize              //查看键总数,如果存在大量键,禁止使用此指令
    exists key          //检查键是否存在,存在返回1,不存在返回0
    del key             //删除键, 返回删除键个数,删除不存在键返回0
    expire key seconds  //设置键过期时间
    ttl key             // 查看剩余的过期时间
    type key            //查询键的数据结构类型,不存在返回none
    

    相关文章

      网友评论

        本文标题:Redis基础篇-基本数据类型和API运用

        本文链接:https://www.haomeiwen.com/subject/bbftwctx.html