zoukankan      html  css  js  c++  java
  • Redis第四章:五大数据类型

    • 一、Redis数据库类型图解

    • 二、Key基本操作

       1、keys * -----查看当前库的所有键

    127.0.0.1:6379> keys *
    (empty list or set)

      2、exists <key>-----------判断某个键是否存在

      3、type <key>-------------查看键的类型

      4、del <key>------------删除某个键

      5、expire  <key>  <seconds>  -------------- 为键值设置过期时间,单位秒

      6、ttl  <key> -------------  查看多少秒过期,-1表示永不过期,-2表示已过期

      7、dbsize  ---------------  查看当前数据库的key的数量

      8、flushdb --------------- 清空当前库

      9、flushall -------------- 通杀全部库

    • 三、五大数据类型

      1、String

      (1)基本介绍

        a、String是Redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。

        b、String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或序列化的对象。

        c、String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512m。

      (2)特性

        

         i++不是,可能被打断

     

      (2)基本命令

        1)get <key> -------------- 查询对应键值

    127.0.0.1:6379> get k1
    "v1"

        2)set <key> <value> ------------------ 添加键值对

    127.0.0.1:6379> set k1 v1
    OK
    127.0.0.1:6379> set k2 v2
    OK

        3)append <key> <value> ---------------- 将给定的<value>追加到原值的末尾

    127.0.0.1:6379> append k1 1234
    (integer) 6
    127.0.0.1:6379> get k1
    "v11234"

        4)strlen  <key>  -----------------获取值的长度

    127.0.0.1:6379> strlen k1
    (integer) 2

        5)setnx  <key>  <value> ---------------------- 只有在key不存在时设置key的值

    127.0.0.1:6379> setnx k1 v11
    (integer) 0
    127.0.0.1:6379> get k1
    "v1"

        6)incr <key>----------将key中存储的数字值增1(只能对数字值操作,如果为空,新增值为1)

    127.0.0.1:6379> incr k1
    (error) ERR value is not an integer or out of range
    127.0.0.1:6379> incr k3
    (integer) 1
    127.0.0.1:6379> get k3
    "1"   
    127.0.0.1:6379> incrby k3 10
    (integer) 11

        7)decr <key>----------将key中存储的数字值增1(只能对数字值操作,如果为空,新增值为-1)

    127.0.0.1:6379> decr k3
    (integer) 10

        8)incrby/decrby <key> <步长> ---------------- 将key中存储的数字值增减,自定义步长

    127.0.0.1:6379> incrby k3 4
    (integer) 14
    127.0.0.1:6379> decrby k3 3
    (integer) 11

        9)mset <key1> <vlaue1> <key2> <value2> ----------------- 同时设置一个或多个key-value对

    127.0.0.1:6379> mset k4 444 k5 5555 k6 6666
    OK

        10)mget <key1> <key2> <key3>  ----------------- 同时获取一个或多个value

    127.0.0.1:6379> mget k4 k6
    1) "444"
    2) "6666"

        11)msetnx <key1> <vlaue1> <key2> <value2>  ----------------- 同时设置一个或多个key-value对,当且仅当所有给定的key都不存在时

    127.0.0.1:6379> msetnx k4 12345 k8 888
    (integer) 0
    127.0.0.1:6379> mget k4 k5
    1) "444"
    2) "5555"

        12)getrange <key> <起始位置> <结束位置> -------------------- 获得值的范围,类似JAVA中的substring

    127.0.0.1:6379> set k4 123456
    OK
    127.0.0.1:6379> getrange k4 1 3
    "234"

        13)setrange <key> 起始位置 <value> ---------------------用<value>覆盖<key>所存储的字符串值,从<起始位置>开始

    127.0.0.1:6379> setrange k5 0 12345
    (integer) 5
    127.0.0.1:6379> get k5
    "12345"

        14)setex <key> <过期时间> <value> --------------------- 设置键的同时,设置过去时间,单位秒

    127.0.0.1:6379> setex k7 30 7777
    OK
    127.0.0.1:6379> ttl k7
    (integer) 26
    127.0.0.1:6379> ttl k7
    (integer) 23

        15)getset <key> <value>---------------------------- 以旧换新,设置了新值同时获得旧值

    127.0.0.1:6379> getset k7 771
    (nil)

      2、List

      (1)基本介绍

        a、单键多值

        b、Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或尾部(右边)

        c、它的底层实际上是个双向列表,对两端的操作性能很高,通过索性下标的操作中间的节点性能会较差

       (2)常用命令

        1)lpush/rpush <key> <value1> <value2> <value3>...-----------------从左边/右边插入一个或多个值

    127.0.0.1:6379> lpush k2 v1 v2 v3 v4
    (integer) 4

     127.0.0.1:6379> RPUSH k3 v5 v6 v7 v8
     (integer) 4

     

        2)lpop/rpop <key> ----------------从左边/右边吐出一个值,值在键在,值亡键亡

    127.0.0.1:6379> LPOP k2
    "v4"
    127.0.0.1:6379> RPOP k2
    "v1"

        3)rpoplpush <key1> <key2>------------------丛<key1>列表右边吐出一个值,插到<key2>列表左边

    127.0.0.1:6379> RPOPLPUSH k2 k3
    "v2"
    127.0.0.1:6379> LRANGE k2 0 5 
    1) "v3"
    127.0.0.1:6379> LRANGE k3 0 5
    1) "v2"
    2) "v5"
    3) "v6"
    4) "v7"
    5) "v8"

        4)lrange <key> <start> <stop>------------------按照索引下标获得元素(从左往右 )

    127.0.0.1:6379> lrange k2 0 5
    1) "v3"
    2) "v2"

        5)lindex <key> <value> -------------------- 按照索引下标获得元素(从左到右)

    127.0.0.1:6379> LINDEX k3 0
    "v2"

        6)llen <key> ------------------------------------ 获得列表长度

    127.0.0.1:6379> LLEN k3
    (integer) 5

        7)linsert <key> before <value> <newvalue> ------------------ 在<value>前面添加<newvalue> 

    127.0.0.1:6379> linsert k3 before  v5 v4
    (integer) 6
    127.0.0.1:6379> LRANGE k3 0 6
    1) "v2"
    2) "v4"
    3) "v5"
    4) "v6"
    5) "v7"
    6) "v8"

        8)lrem <key> <n> <value> --------------------- 

        count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。    

        count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。   

        count = 0 : 移除表中所有与 VALUE 相等的值。

    127.0.0.1:6379> lrange k2 0 6
    1) "v4"
    2) "v4"
    3) "v4"
    4) "v4"
    5) "v3"
    127.0.0.1:6379> LREM k2 3 v4
    (integer) 3
    127.0.0.1:6379> lrange k2 0 6
    1) "v4"
    2) "v3"

       3、set

      1、基本介绍

       a、Redis set 对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据时,又不希望出现重复数据,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这也是list所不能提供的。

       b、Redis的Set是string类型的无序集合。它底层实际上一个value为null的hash表,所以,添加,删除,查找的复杂度都是0(1)。

      2、常用命令

      1)sadd <key> <value1> <value2> ------------------------ 将一个或多个member元素加入到集合key中,已存在于集合的member元素被忽略

    127.0.0.1:6379> sadd k1 v1 v2 v3 v3 v3 v3 v4 v5
    (integer) 5

      2)smembers <key> ------------------------ 取出该集合的所有值

    127.0.0.1:6379> SMEMBERS k1
    1) "v3"
    2) "v1"
    3) "v4"
    4) "v2"
    5) "v5"

      3)sismember <key> <value> --------------------------- 判断集合<key>是否为含有该<value>值,有返回1,没有返回0

    127.0.0.1:6379> SISMEMBER k1 v1
    (integer) 1
    127.0.0.1:6379> SISMEMBER k1 v7
    (integer) 0

      4)scard <key> ------------------------ 返回该集合的元素个数

    127.0.0.1:6379> SCARD k1
    (integer) 5

      5)srem <key> <value1> <value2> ---------------------- 删除集合中的某个元素

    127.0.0.1:6379> SREM k1 v1 v2
    (integer) 2
    127.0.0.1:6379> SMEMBERS k1
    1) "v5"
    2) "v3"
    3) "v4"

      6)spop <key> ---------------------- 随机从该集合中吐出一个值

    
    

    127.0.0.1:6379> SPOP k1
    "v3"
    127.0.0.1:6379> SMEMBERS k1
    1) "v5"
    2) "v4"

     

      7)srandmember <key> <n> -------------------- 随机从该集合中取出n个值,不会从集合中删除

    127.0.0.1:6379> SRANDMEMBER k1 1
    1) "v4"
    127.0.0.1:6379> SMEMBERS k1
    1) "v5"
    2) "v4"

      8)sinter <k1> <k2> -------------------- 返回两个集合的交集元素

    127.0.0.1:6379> sadd k2 v2 v4 v6 
    (integer) 3
    127.0.0.1:6379> SINTER k1 k2
    1) "v4"
    2) "v2"

      9)sunion <k1> <k2> ----------------- 返回两个集合的并集元素

    127.0.0.1:6379> SUNION k1 k2
    1) "v5"
    2) "v3"
    3) "v6"
    4) "v2"
    5) "v4"
    6) "v1"

      10)sdiff <k1> <k2> ------------------ 返回两个集合的差集元素

    127.0.0.1:6379> SDIFF k1 k2
    1) "v5"
    2) "v3"
    3) "v1"

     127.0.0.1:6379> SDIFF k2 k1
     1) "v6"

     

      4、Hash

      1、基本介绍

        a、Redis hash 是一个键值对集合。

        b、Redis hash 是一个string类型的field和value的映射表,hash特别适合用于储存对象。

        c、类似JAVA里的Map<String,Object>

      2、常用命令

      1)hset <key> <field> <value> --------------------- 给<key>集合中的<field>键赋值<value>

    127.0.0.1:6379> HSET k5 name zhangsan
    (integer) 1
    127.0.0.1:6379> type k5
    hash

      2)hget <key> <field> -------------------------------- 从<key>集合<field>取出value

    127.0.0.1:6379> HGET k5 name
    "zhangsan"

      3)hmset <key1> <field1> <value1> <field2> <value2>..... ------------------ 批量设置hash的值

    127.0.0.1:6379> HMSET k5 age 15 email 1501790343@qq.com
    OK

      4)hexists key <field> --------------------------- 查找哈希表key中,给定域field是否存在

    127.0.0.1:6379> HEXISTS k5 name
    (integer) 1

      5)hkeys <key> ------------------- 列出该hash集合的所有filed

    127.0.0.1:6379> HKEYS k5
    1) "name"
    2) "age"
    3) "email"

      6)hvals <key> ------------------- 列出该hash集合的所有value

    127.0.0.1:6379> HVALS k5
    1) "zhangsan"
    2) "15"
    3) "1501790343@qq.x82com"

      7)hincrby <key> <field> <increment> ------------- 为哈希表key中的域field的值添加增量increment

    127.0.0.1:6379> HINCRBY k5 age 5
    (integer) 20

      8)hsetnx <key> <field> <value> -------------------- 将哈希表key中的域field的值设置为value,当且仅当域field不存在

    127.0.0.1:6379> HSETNX k5 gender man
    (integer) 1

      5、zset

      1、基本介绍

       2、常用命令

      (1)zadd <key> <score1> <value1> <score2> <value2>... -------------------- 将一个或多个member元素及其score值加入到有序集key中

    127.0.0.1:6379> ZADD k6 100 v6 90 v7 80 v8 80 v9
    (integer) 4
    127.0.0.1:6379> TYPE k6
    zset

      (2)zrange <key> <start> <stop> [withscores] --------------------返回有序集key中,下标在<start> <stop>之间的元素,按score从小到大;带withscores,可以让分数一起和值返回到结果集

    127.0.0.1:6379> ZRANGE k6 0 3 
    1) "v8"
    2) "v9"
    3) "v7"
    4) "v6"

      (3)ZRANGEBYLEX key min max  [withscores]  [limit offset count] ---------------------- 返回有续集key中,所有score值介于min和max之间(包括等于min或max)的成员。

        有序集合按score值递增(从小到大)次序排列

    127.0.0.1:6379> ZRANGEBYSCORE k6 80 90 
    1) "v8"
    2) "v9"
    3) "v7"

    127.0.0.1:6379> ZRANGEBYSCORE k6 80 90 withscores
    1) "v8"
    2) "80"
    3) "v9"
    4) "80"
    5) "v7"
    6) "90"

      (4)ZREVRANGEBYLEX key max min  [withscores]  [limit offset count]  ------------ 同上,改为从大到小排列

    127.0.0.1:6379> ZREVRANGEBYSCORE k6 90 80 withscores
    1) "v7"
    2) "90"
    3) "v9"
    4) "80"
    5) "v8"
    6) "80"

      (5)zincrby <key> <increment> <value> ------------------------ 为元素的score加上增量

    127.0.0.1:6379> ZINCRBY k6 5 v7
    "95"

      (6)zrem  <key>  <value> -------------------- 删除该集合下指定值的元素

    127.0.0.1:6379> ZREM k6 v8
    (integer) 1

      (7)zcount <key> <min> <max>--------------------- 统计该集合,分数区间的元素个数

    127.0.0.1:6379> ZCOUNT k6 60 90
    (integer) 2
    127.0.0.1:6379> ZCOUNT k6 60 100
    (integer) 4

      (8)zrank <key> <value> ---------------------- 返回该值在集合中的排名,从零开始

    127.0.0.1:6379> ZRANK k6 v8
    (integer) 0
  • 相关阅读:
    【杭电】[1302]The Snail
    【Light】[1297]Largest Box
    ubuntu10.04安装putty以保存SSH会话
    印象笔记导入为知笔记方法
    HTTP返回状态码及错误大全
    Ubuntu14.04安装wineqq国际版
    Ubuntu Unity 桌面快捷键切换窗口技巧
    Ubuntu14.04下安装为知笔记
    在ubuntu中如何管理startup application
    Error:" Can't locate Term/ReadKey.pm in @INC" 的解决方法
  • 原文地址:https://www.cnblogs.com/Ge-Zsj/p/12494099.html
Copyright © 2011-2022 走看看