美文网首页
Redis五种数据类型和消息订阅

Redis五种数据类型和消息订阅

作者: JBryan | 来源:发表于2020-04-17 09:45 被阅读0次
    1、key/value数据类型

    String是最常用的一种数据类型,普通的key/value存储都可以归为此类。
    set/get:设置key对应的值为String类型的value,获取key对应的值

    127.0.0.1:6379> set Jessie cuty
    OK
    127.0.0.1:6379> get Jessie
    "cuty"
    127.0.0.1:6379> set age 20
    OK
    127.0.0.1:6379> 
    

    mget:批量获取多个key的值,如果可以不存在则返回nil

    127.0.0.1:6379> mget Jessie age
    1) "cuty"
    2) "20"
    127.0.0.1:6379> 
    

    incr && incrby:incr对key对应的值进行加加操作,并返回新的值;incrby加指定值

    127.0.0.1:6379> incr age
    (integer) 21
    127.0.0.1:6379> incrby age 5
    (integer) 26
    127.0.0.1:6379> 
    

    decr && decrby:decr对key对应的值进行减减操作,并返回新的值;decrby减指定值

    127.0.0.1:6379> decr age
    (integer) 25
    127.0.0.1:6379> decrby age 5
    (integer) 20
    127.0.0.1:6379> 
    

    setnx:设置key对应的值为String类型的value,如果key已经存在则返回0。
    前面已经保存过key为Jessie的值了,所以setnx不成功,Jessie的值还是原来的"cuty";
    如果setnx一个未保存过的值,则返回1,保存成功。

    127.0.0.1:6379> setnx Jessie sweety
    (integer) 0
    127.0.0.1:6379> get Jessie
    "cuty"
    127.0.0.1:6379> setnx height 160
    (integer) 1
    127.0.0.1:6379> get height
    "160"
    127.0.0.1:6379>
    

    setex:设置key对应的值为String类型的value,并设定有效期。
    weight为key;20是过期时间,单位是秒;50是value。20s后再次访问weight,返回空。

    127.0.0.1:6379> setex weight 20 50
    OK
    127.0.0.1:6379> get weight
    "50"
    127.0.0.1:6379> get weight
    (nil)
    127.0.0.1:6379>
    
    2、Hash类型

    Hash是一个String类型的field和value之间的映射表。redis的Hash数据类型的key(hash表名称),对应的value实际的内部存储结构为一个HashMap。Hash特别适合存储对象。
    hset——设置key对应的HashMap中的field的value

    127.0.0.1:6379> hset person1 name zhangsan
    (integer) 1
    127.0.0.1:6379> hset person1 age 22
    (integer) 1
    127.0.0.1:6379> hset person1 height 175cm
    (integer) 1
    127.0.0.1:6379>
    

    hget——获取key对应的HashMap中的field的value

    127.0.0.1:6379> hget person1 name
    "zhangsan"
    127.0.0.1:6379> hget person1 age
    "22"
    127.0.0.1:6379> hget person1 height
    "175cm"
    127.0.0.1:6379> 
    

    hgetall——获取key对应的HashMap中的所有field的value

    127.0.0.1:6379> hgetall person1
    1) "name"
    2) "zhangsan"
    3) "age"
    4) "22"
    5) "height"
    6) "175cm"
    127.0.0.1:6379> 
    

    hlen--返回key对应的HashMap中的field的数量

    127.0.0.1:6379> hlen person1
    (integer) 3
    127.0.0.1:6379> 
    
    3、List类型

    List类型可类比Java中的List。常见命令如下:
    lpush——在key对应的list的头部添加一个元素,一次可添加多个元素

    127.0.0.1:6379> lpush person zhangsan zhangsi zhangwu zhangliu
    (integer) 4
    127.0.0.1:6379> 
    

    lrange——获取key对应的list的指定下标范围的元素,-1表示获取到最后的元素

    127.0.0.1:6379> lrange person 1 3
    1) "zhangwu"
    2) "zhangsi"
    3) "zhangsan"
    127.0.0.1:6379> lrange person 0 -1
    1) "zhangliu"
    2) "zhangwu"
    3) "zhangsi"
    4) "zhangsan"
    127.0.0.1:6379> lrange person 1 -1
    1) "zhangwu"
    2) "zhangsi"
    3) "zhangsan"
    127.0.0.1:6379> 
    

    lpop——从key对应的list的头部删除一个元素,并返回该元素

    127.0.0.1:6379> lpop person
    "zhangliu"
    127.0.0.1:6379> lrange person 0 -1
    1) "zhangwu"
    2) "zhangsi"
    3) "zhangsan"
    127.0.0.1:6379> 
    

    rpush——在key对应的list的尾部添加一个元素

    127.0.0.1:6379> rpush person zhanger
    (integer) 4
    127.0.0.1:6379> lrange person 0 -1
    1) "zhangwu"
    2) "zhangsi"
    3) "zhangsan"
    4) "zhanger"
    127.0.0.1:6379> 
    

    rpop——从key对应的list的尾部删除一个元素,并返回该元素

    127.0.0.1:6379> rpop person
    "zhanger"
    127.0.0.1:6379> lrange person 0 -1
    1) "zhangwu"
    2) "zhangsi"
    3) "zhangsan"
    127.0.0.1:6379> 
    
    4、Set类型

    Set类型可类比Java的Set,特点是不允许存放重复元素,常用命令如下:
    sadd——在key对应的set中添加一个元素

    127.0.0.1:6379> sadd scores 80 90 90 70 60
    (integer) 4
    127.0.0.1:6379>
    

    smembers——获取key对应的set的所有元素

    127.0.0.1:6379> smembers scores
    1) "60"
    2) "70"
    3) "80"
    4) "90"
    127.0.0.1:6379>
    

    spop——随机返回并删除key对应的set中的一个元素

    127.0.0.1:6379> spop scores 
    "60"
    127.0.0.1:6379> smembers scores
    1) "70"
    2) "80"
    3) "90"
    
    
    5、SortSet类型

    set的基础增加顺序score,再根据score进行排序,常用命令如下:
    zadd ——在key对应的zset中添加一个元素

    127.0.0.1:6379> zadd exam 100 zhangsan 90 zhangsi 60 zhangwu 80 zhangliu 95 zhangqi
    (integer) 5
    127.0.0.1:6379>
    

    其中,数字100、90是元素zhangsan、zhangsi对应的score,SortSet也是根据这个score进行排序的。
    zrange——获取key对应的zset中指定范围的元素,-1表示获取所有元素。

    127.0.0.1:6379> zrange exam 0 -1
    1) "zhangwu"
    2) "zhangliu"
    3) "zhangsi"
    4) "zhangqi"
    5) "zhangsan"
    127.0.0.1:6379> 
    

    zrem——删除key对应的zset中的一个元素。

    127.0.0.1:6379> zrem exam zhangsan
    (integer) 1
    127.0.0.1:6379> 
    

    zrangebyscore——返回有序集key中,指定分数范围的元素列表。

    127.0.0.1:6379> zrangebyscore exam 90 100
    1) "zhangsi"
    2) "zhangqi"
    127.0.0.1:6379> 
    

    zrank——返回key对应的zset中指定元素的排名。其中元素按score值递增(从小到大); 排名从0开始,也就是说,score值最小的成员排名为0。

    127.0.0.1:6379> zrank exam zhangqi
    (integer) 3
    127.0.0.1:6379> 
    

    set是通过hashmap存储,key对应set的元素,value是空对象 。
    sortset使用hashmap存储,还加了一层跳跃表。

    6、Redis消息订阅发布

    发布订阅类似于信息管道,用来进行系统之间消息解耦,类似于mq,rabbitmq、rocketmq、kafka、activemq主要有消息发布者和消息订阅者。比如运用于:订单支付成功,会员系统加积分、钱包进行扣钱操作、发货系统(下发商品)。

    PUBLISH:将信息message发送到指定的频道channel。返回收到消息的客户端数量

    127.0.0.1:6379> PUBLISH chanel1 msg1
    (integer) 0
    127.0.0.1:6379>
    

    SUBSCRIBE:订阅给指定频道的信息

    127.0.0.1:6379> SUBSCRIBE chanel1
    Reading messages... (press Ctrl-C to quit)
    1) "subscribe"
    2) "chanel1"
    3) (integer) 1
    

    UNSUBSCRIBE: 取消订阅指定的频道,如果不指定,则取消订阅所有的频道。

    127.0.0.1:6379> UNSUBSCRIBE chanel1
    1) "unsubscribe"
    2) "chanel1"
    3) (integer) 0
    127.0.0.1:6379> 
    

    redis发布订阅功能比较薄弱但比较轻量级,mq消息持久化,数据可靠性比较差,无后台功能可msgId、msgKey进行查询消息

    相关文章

      网友评论

          本文标题:Redis五种数据类型和消息订阅

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