• redis的5种数据结构和基本操作


    1.字符串(string)

    字符串的value结构

    1.1设置值
    set key value [ex seconds] [px milliseconds] [nx|xx]
    

    例如:

    127.0.0.1:6379> set hello world
    OK
    
    1.2获取值
    127.0.0.1:6379> get hello
    "world"
    

    字符串类型的内部编码有3种:

    • int:8个字节的长整型。
    • embstr:小于等于39个字节的字符串。
    • raw:大于39个字节的字符串。
      Redis会根据当前值的类型和长度决定使用哪种内部编码实现。

    2.哈希(hash)

    哈希的value结构图
    hash由多个field构成,适合存储拥有多个属性的对象。

    2.1 设置值
    hset key field value
    

    例如添加一个名字为tom的用户,user为key,name为field

    127.0.0.1:6379> hset user name tom
    (integer) 1
    

    再为这个hash添加一个名为age的field

    127.0.0.1:6379> hset user age 13
    (integer) 1
    
    2.2 获取值
    hget key field
    

    例如获取用户的名字

    127.0.0.1:6379> hget user name
    "tom"
    

    获取用户的年龄

    127.0.0.1:6379> hget user age
    13
    

    3.list

    list结构和双端入队出队示意图
    list是一个类似数组的有序线性结构,允许存储重复元素。

    3.1添加操作
    • 从右边添加元素
      rpush key value [value ...]
      从右边向左插入三个元素a、b、c示例:
    127.0.0. 1:6379> rpush listkey c b a
    (integer) 3
    

    此时名为listkey的list存储的元素如下:

    127.0.0.1:6379> lrange listkey 0 -1
    1) "c"
    2) "b"
    3) "a"
    
    • 从左边添加元素
      lpush key value [value ...]
      从左向右添加元素示例:
    127.0.0. 1:6379> lpush listkey c b a
    (integer) 3
    
    3.2查找元素
    • 获取指定索引下标元素
    lindex key index
    
    • 获取列表长度
    127.0.0.1:6379> llen listkey
    (integer) 4
    
    3.3删除元素
    • 将列表最左侧的一个元素弹出
    lpop listkey
    
    • 将列表最右侧的一个元素弹出
    rpop listkey
    

    其余操作可参考这张命令表:
    redis list基本操作命令

    4.集合(set)

    set可以用来保存多个字符串元素,无序,不允许重复。

    4.1添加元素

    sadd key element [element ...]

    127.0.0.1:6379> sadd myset a b c
    (integer) 3
    
    127.0.0.1:6379> sadd myset a b
    (integer) 0
    
    4.2 删除元素

    srem key element [element ...]
    返回删除元素个数

    127.0.0.1:6379> srem myset a b
    (integer) 2
    127.0.0.1:6379> srem myset hello
    (integer) 0
    
    4.3 计算元素个数

    scard的时间复杂度为O(1),它不会遍历集合所有元素,而是直接用
    Redis内部的变量,例如:

    127.0.0.1:6379> scard myset
    (integer) 1
    
    4.4 判断元素是否在集合中

    sismember key element
    如果给定元素element在集合内返回1,反之返回0,例如:

    127.0.0.1:6379> sismember myset c
    (integer) 1
    
    4.5 从集合随机弹出元素

    spop key
    spop操作可以从集合中随机弹出一个元素,例如下面代码是一次spop
    后,集合元素变为"d b a":

    127.0.0.1:6379> spop myset
    "c"
    127.0.0.1:6379> smembers myset
    1) "d"
    2) "b"
    3) "a"
    

    srandmember和spop都是随机从集合选出元素,两者不同的是spop命令
    执行后,元素会从集合中删除,而srandmember不会。

    4.6 获取所有元素

    smembers key

    127.0.0.1:6379> smembers myset
    1) "d"
    2) "b"
    3) "a"
    

    smembers和lrange、hgetall都属于比较重的命令,如果元素过多存在阻
    塞Redis的可能性,建议使用sscan来完成。

    常用命令表

    5.有序集合(zset)

    有序集合在set上增加了排序的特性,依然不允许重复元素。
    有序集合排序靠的不是索引下标,而是每个元素的分数(score)。zset十分适合用来做排行榜。
    如图,多个学生按score排序

    5.1添加元素
    127.0.0.1:6379> zadd user:ranking 251 tom
    (integer) 1
    
    5.2 计算成员个数
    127.0.0.1:6379> zcard user:ranking
    (integer) 5
    
    5.3 计算成员排名

    zrank是从分数从低到高返回排名,zrevrank反之。例如下面操作中,tom
    在zrank和zrevrank分别排名第5和第0(排名从0开始计算)。

    127.0.0.1:6379> zrank user:ranking tom
    (integer) 5
    127.0.0.1:6379> zrevrank user:ranking tom
    (integer) 0
    
    5.3 删除成员
    127.0.0.1:6379> zrem user:ranking mike
    (integer) 1
    
    5.4 返回指定分数范围的成员

    zrangebyscore key min max [withscores] [limit offset count]
    zrevrangebyscore key max min [withscores] [limit offset count]

    其中zrangebyscore按照分数从低到高返回,zrevrangebyscore反之。例如
    下面操作从低到高返回200到221分的成员,withscores选项会同时返回每个
    成员的分数。[limit offset count]选项可以限制输出的起始位置和个数:

    127.0.0.1:6379> zrangebyscore user:ranking 200 tinf withscores
    1) "frank"
    2) "200"
    3) "tim"
    4) "220"
    127.0.0.1:6379> zrevrangebyscore user:ranking 221 200 withscores
    1) "tim"
    2) "220"
    3) "frank"
    4) "200"
    
  • 相关阅读:
    解释器模式
    命令模式
    责任链模式
    代理模式
    享元模式
    外观模式
    装饰器模式
    组合模式
    过滤器模式
    js广告浮动
  • 原文地址:https://www.cnblogs.com/powerjiajun/p/11530591.html
Copyright © 2020-2023  润新知