• Redis Redis的数据结构 - 通用命令 - String类型命令 - Hash类型命令


    目录

    Redis的数据结构:

    Redis命令:

    通用命令:(通用指令是部分数据类型的,都可以使用的指令)

    KEYS查询命令:

    DEL删除命令:

    EXISTS判断命令:

    EXPIPE有效期设置命令:

    TTL查看剩余期限命令:

    String类型:

    String的3种类型:

    String类型的常见命令:

    SET插入数据命令:

    MSET多重插入命令:

    GET获取数据命令:

    MGET多重获取命令:

    INCR自增命令:

    INCRBY指定自增命令:

    INCRBYFLOAT指定浮点数自增命令:

    SETNX添加String类型键值对命令(前提是key不存在,否则不执行)

    SETEX添加Sting类型键值对命令(指定有效期)

    Redis的key的格式:

    问题:Redis没有类似Mysql的Table的概念,我们该如何区分不同类型的key呢?

    key的结构:

    Hash类型

    为什么需要使用Hash类型呢? 

    Hash类型的常见命令:

    HSET key field value:添加或者修改hash类型的key和fired的值

    HGET key field:获取一个hash类型的key的field的值

    HMSET:添加多个hash类型的key的field值

    HMGET:获取多个hash类型的key的field值

    HGETALL:获取一个hash类型的key中所有的field和value

    HKEYS:获取一个hash类型的key中的所有的field

    HVALS:获取一个hash类型的key中的所有的value

    HINCRBY:让一个hash类型key的字段值自增并指定步长

    HSETNX:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行


    参考视频:黑马程序员Redis入门到实战教程,深度透析redis底层原理+redis分布式锁+企业解决方案+黑马点评实战项目

    Redis的数据结构:

    我们能通过官方网站提供的文档来了解我们需要使用的redis数据类型

    或者是使用命令help来查看

    Redis命令

    通用命令:(通用指令是部分数据类型的,都可以使用的指令)

    192.168.1.209:6379> help @generic
    

    KEYS查询命令:

    我们能通过help [command]可以查看一个命令的具体用法

    1. 192.168.1.209:6379> help KEYS
    2. KEYS pattern
    3. summary: Find all keys matching the given pattern
    4. since: 1.0.0
    5. group: generic
    6. 192.168.1.209:6379>

    使用KEYS命令查看所有的key 

    1. 192.168.1.209:6379> SET name "claylpf"
    2. OK
    3. 192.168.1.209:6379> SET id 66
    4. OK
    5. 192.168.1.209:6379> KEYS *
    6. 1) "id"
    7. 2) "name"
    8. 192.168.1.209:6379>

    例如:

    DEL删除命令:

    具体用法 

    1. 192.168.1.209:6379> help DEL
    2. DEL key [key ...]
    3. summary: Delete a key
    4. since: 1.0.0
    5. group: generic
    6. 192.168.1.209:6379>

     例如:

    1. 192.168.1.209:6379> DEL id
    2. (integer) 1
    3. 192.168.1.209:6379> KEYS *
    4. 1) "name"
    5. 192.168.1.209:6379>

    多重删除

    1. 192.168.1.209:6379> DEL k1 k2 k3
    2. (integer) 3
    3. 192.168.1.209:6379> KEYS *
    4. 1) "age"
    5. 2) "name"
    6. 192.168.1.209:6379>

    EXISTS判断命令:

    具体用法:

    1. 192.168.1.209:6379> help EXISTS
    2. EXISTS key [key ...]
    3. summary: Determine if a key exists
    4. since: 1.0.0
    5. group: generic
    6. 192.168.1.209:6379>

     如:

    1. 192.168.1.209:6379> KEYS *
    2. 1) "age"
    3. 2) "name"
    4. 192.168.1.209:6379> EXISTS age
    5. (integer) 1
    6. 192.168.1.209:6379> EXISTS id
    7. (integer) 0
    8. 192.168.1.209:6379>

    EXPIPE有效期设置命令:

    具体用法:

    1. 192.168.1.209:6379> help EXPIRE
    2. EXPIRE key seconds
    3. summary: Set a key's time to live in seconds
    4. since: 1.0.0
    5. group: generic
    6. 192.168.1.209:6379>

    例如:

    1. 192.168.1.209:6379> EXPIRE age 20
    2. (integer) 1
    3. 192.168.1.209:6379> TTL age
    4. (integer) 13
    5. 192.168.1.209:6379>

    TTL查看剩余期限命令:

    具体用法:

    1. 192.168.1.209:6379> help TTL
    2. TTL key
    3. summary: Get the time to live for a key
    4. since: 1.0.0
    5. group: generic
    6. 192.168.1.209:6379>

    例如:

    当我们使用TTL查看到剩余时间为-1的时候,他表示的就是永久有效

    1. 192.168.1.209:6379> TTL age
    2. (integer) 13
    3. 192.168.1.209:6379> TTL name
    4. (integer) -1
    5. 192.168.1.209:6379> KEYS * # 因为age的有效时间到了,所以age消失了,而只剩下name的永久有效
    6. 1) "name"
    7. 192.168.1.209:6379>

    String类型:

    String的3种类型:

    其中value是字符串,不过根据字符串的格式不同,可以分为3类:

    注:不管是那种格式,底层都是字节数组形式存储的,只不过是编码的方式不同。字符串类型的最大空间不能超过512mb

    String类型的常见命令:

    SET插入数据命令:

    我们能通过help [command]可以查看一个命令的具体用法

    具体用法

    1. 192.168.1.209:6379> help SET
    2. SET key value [EX seconds|PX milliseconds|EXAT timestamp|PXAT milliseconds-timestamp|KEEPTTL] [NX|XX] [GET]
    3. summary: Set the string value of a key
    4. since: 1.0.0
    5. group: string
    6. 192.168.1.209:6379>

    插入数据

    1. 192.168.1.209:6379> SET age 20
    2. OK
    3. 192.168.1.209:6379> KEYS a*
    4. 1) "age"
    5. 192.168.1.209:6379>
    MSET多重插入命令:

    多重插入

    1. 192.168.1.209:6379> MSET k1 v1 k2 v2 k3 v3
    2. OK
    3. 192.168.1.209:6379> KEYS *
    4. 1) "age"
    5. 2) "k1"
    6. 3) "k3"
    7. 4) "name"
    8. 5) "k2"
    9. 192.168.1.209:6379>
    GET获取数据命令:

    具体用法:

    1. 192.168.1.209:6379> help GET
    2. GET key
    3. summary: Get the value of a key
    4. since: 1.0.0
    5. group: string
    6. 192.168.1.209:6379>

     例如:

    1. 192.168.1.209:6379> GET name
    2. "claylpf"
    3. 192.168.1.209:6379>
    MGET多重获取命令:
    1. 192.168.1.209:6379> MSET k1 v1 k2 v2 k3 v3
    2. OK
    3. 192.168.1.209:6379> KEYS *
    4. 1) "k1"
    5. 2) "k3"
    6. 3) "name"
    7. 4) "k2"
    8. 192.168.1.209:6379> MGET k1 k2 k3
    9. 1) "v1"
    10. 2) "v2"
    11. 3) "v3"
    12. 192.168.1.209:6379>
    INCR自增命令:
    1. 192.168.1.209:6379> GET age
    2. "18"
    3. 192.168.1.209:6379> INCR age
    4. (integer) 19
    5. 192.168.1.209:6379> INCR age
    6. (integer) 20
    7. 192.168.1.209:6379>
    INCRBY指定自增命令:
    1. 192.168.1.209:6379> GET age
    2. "20"
    3. 192.168.1.209:6379> INCRBY age 2
    4. (integer) 22
    5. 192.168.1.209:6379> INCRBY age 2
    6. (integer) 24
    7. 192.168.1.209:6379> INCRBY age 3
    8. (integer) 27
    9. 192.168.1.209:6379>

    也可以实现自减操作

    1. 192.168.1.209:6379> INCRBY age 3
    2. (integer) 27
    3. 192.168.1.209:6379> INCRBY age -1
    4. (integer) 26
    5. 192.168.1.209:6379> INCRBY age -1
    6. (integer) 25
    7. 192.168.1.209:6379> INCRBY age -2
    8. (integer) 23
    9. 192.168.1.209:6379>
    INCRBYFLOAT指定浮点数自增命令:
    1. 192.168.1.209:6379> set float1 10.11
    2. OK
    3. 192.168.1.209:6379> GET float1
    4. "10.11"
    5. 192.168.1.209:6379> INCRBYFLOAT float1 0.5
    6. "10.61"
    7. 192.168.1.209:6379> INCRBYFLOAT float1 0.5
    8. "11.11"
    9. 192.168.1.209:6379> INCRBYFLOAT float1 -1.5
    10. "9.61"
    11. 192.168.1.209:6379> INCRBYFLOAT float1 -1.5
    12. "8.11"
    13. 192.168.1.209:6379>
    SETNX添加String类型键值对命令(前提是key不存在,否则不执行)

    具体用法:

    1. 192.168.1.209:6379> help SETNX
    2. SETNX key value
    3. summary: Set the value of a key, only if the key does not exist
    4. since: 1.0.0
    5. group: string
    6. 192.168.1.209:6379>

    例如:

    1. 192.168.1.209:6379> SETNX name2 lisi
    2. (integer) 1
    3. 192.168.1.209:6379> get name2
    4. "lisi"
    5. 192.168.1.209:6379> SETNX name lisi2
    6. (integer) 0
    7. 192.168.1.209:6379> get name
    8. "claylpf"
    9. 192.168.1.209:6379>
    SETEX添加Sting类型键值对命令(指定有效期)

    具体用法:

    1. 192.168.1.209:6379> help SETEX
    2. SETEX key seconds value
    3. summary: Set the value and expiration of a key
    4. since: 2.0.0
    5. group: string
    6. 192.168.1.209:6379>

    例如:

    1. 192.168.1.209:6379> SETEX name3 30 jack
    2. OK
    3. 192.168.1.209:6379> TTL name3
    4. (integer) 24
    5. 192.168.1.209:6379> TTL name3
    6. (integer) 21
    7. 192.168.1.209:6379> TTL name3
    8. (integer) 19
    9. 192.168.1.209:6379> GET name3
    10. "jack"
    11. 192.168.1.209:6379>

    Redis的key的格式:

    问题:Redis没有类似Mysql的Table的概念,我们该如何区分不同类型的key呢?

    例如:当我们需要存储用户、商品的信息到redis,如果有一个用户的id是1,而有一个商品的id恰好是也是1,我们应该如何解决这个问题呢。

    我们可以通过拼接key的结构实现多层级结构

    key的结构:

    这个格式并非固定的,我们也可以根据自己的需求来删除或者添加词条。

    实操:

    Hash类型

    为什么需要使用Hash类型呢? 

    String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便

    因此,我们需要使用到Hash类型。

    Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD(增删改查)

      

    Hash类型的常见命令:

    HSET key field value:添加或者修改hash类型的key和fired的值
    1. 192.168.1.209:6379> HSET heima:user:3 name lucy
    2. (integer) 1
    3. 192.168.1.209:6379> HSET heima:user:3 age 22
    4. (integer) 1
    5. 192.168.1.209:6379> HSET heima:user:4 name band
    6. (integer) 1
    7. 192.168.1.209:6379> HSET heima:user:4 age 23
    8. (integer) 1
    9. 192.168.1.209:6379> KEYS heima*
    10. 1) "heima:user:4"
    11. 2) "heima:user:3"

    HGET key field:获取一个hash类型的key的field的值
    1. 192.168.1.209:6379> HGET heima:user:3 name
    2. "lucy"
    3. 192.168.1.209:6379> HGET heima:user:3 age
    4. "22"
    5. 192.168.1.209:6379> HGET heima:user:4 name
    6. "band"
    7. 192.168.1.209:6379> HGET heima:user:4 age
    8. "23"
    9. 192.168.1.209:6379>
    HMSET:添加多个hash类型的key的field值
    1. 192.168.1.209:6379> HMSET heima:user:5 name clay age 24 sex man
    2. OK
    3. 192.168.1.209:6379> HMGET heima:user:5 name age sex
    4. 1) "clay"
    5. 2) "24"
    6. 3) "man"
    7. 192.168.1.209:6379>
    HMGET:获取多个hash类型的key的field值
    1. 192.168.1.209:6379> HMSET heima:user:5 name clay age 24 sex man
    2. OK
    3. 192.168.1.209:6379> HMGET heima:user:5 name age sex
    4. 1) "clay"
    5. 2) "24"
    6. 3) "man"
    7. 192.168.1.209:6379>
    HGETALL:获取一个hash类型的key中所有的field和value
    1. 192.168.1.209:6379> HGETALL heima:user:4
    2. 1) "name"
    3. 2) "band"
    4. 3) "age"
    5. 4) "23"
    6. 192.168.1.209:6379> HGETALL heima:user:5
    7. 1) "name"
    8. 2) "clay"
    9. 3) "age"
    10. 4) "24"
    11. 5) "sex"
    12. 6) "man"
    13. 192.168.1.209:6379>
    HKEYS:获取一个hash类型的key中的所有的field
    1. 192.168.1.209:6379> HKEYS heima:user:5
    2. 1) "name"
    3. 2) "age"
    4. 3) "sex"
    5. 192.168.1.209:6379> HKEYS heima:user:4
    6. 1) "name"
    7. 2) "age"
    8. 192.168.1.209:6379>
    HVALS:获取一个hash类型的key中的所有的value
    1. 192.168.1.209:6379> HVALS heima:user:4
    2. 1) "band"
    3. 2) "23"
    4. 192.168.1.209:6379> HVALS heima:user:5
    5. 1) "clay"
    6. 2) "24"
    7. 3) "man"
    8. 192.168.1.209:6379>
    HINCRBY:让一个hash类型key的字段值自增并指定步长
    1. 192.168.1.209:6379> HINCRBY heima:user:4 age 2
    2. (integer) 25
    3. 192.168.1.209:6379> HINCRBY heima:user:4 age 2
    4. (integer) 27
    5. 192.168.1.209:6379> HVALS heima:user:4
    6. 1) "band"
    7. 2) "27"
    8. 192.168.1.209:6379> HINCRBY heima:user:4 age -10
    9. (integer) 17
    10. 192.168.1.209:6379> HVALS heima:user:4
    11. 1) "band"
    12. 2) "17"
    13. 192.168.1.209:6379>
    HSETNX:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行
    1. 192.168.1.209:6379> HSETNX heima:user:4 sex woman
    2. (integer) 1
    3. 192.168.1.209:6379> HGETALL heima:user:4
    4. 1) "name"
    5. 2) "band"
    6. 3) "age"
    7. 4) "17"
    8. 5) "sex"
    9. 6) "woman"
    10. 192.168.1.209:6379> HSETNX heima:user:5 sex woman
    11. (integer) 0
    12. 192.168.1.209:6379> HGETALL heima:user:5
    13. 1) "name"
    14. 2) "clay"
    15. 3) "age"
    16. 4) "24"
    17. 5) "sex"
    18. 6) "man"
    19. 192.168.1.209:6379>
  • 相关阅读:
    SpringCloud使用Zookeeper作为服务注册发现中心
    数据结构——常见的十种排序算法
    改进的DBSCAN算法(附open3d python代码)
    c++复合数据类型
    【JavaWeb】登陆页面
    LeetCode1 两数之和
    ArcGIS_空间插值分析
    两万字带你认识黑客在kali中使用的工具
    A Self-Attentive model for Knowledge Tracing论文笔记和代码解析
    遥感和GIS在滑坡、泥石流风险普查中的应用
  • 原文地址:https://blog.csdn.net/lpfstudy/article/details/132672000