API 的理解和使用-全局命令与编码

全局命令

redis 有5种数据结构,它们是键值对中的值,对于键来说有一些通用的命令

  1. 查看所有键

      keys * 
    
  2. 键总数

     dbsize
    

dbsize 命令在计算键总数时不会遍历所有键,而是直接获取redis 内置的键总数变量,所以dbsize命令的时间复杂度是O(1)。 而keys 命令会遍历所有键,所以它的时间复杂度是O(n),当redis 保存了大量键时,线上环境禁止使用。

  1. 检查键是否存在

     exists key
    

如果键存在则返回1,不存在则返回0:

    127.0.0.1:6379> exists hello
    (integer) 1
  1. 删除键

    del key
    

    del 是一个通用命令,无论值是什么类型的数据结构,del 命令都可以将其删除,删除成功返回1,删除不存在的键返回0。

    同时删除多个键(a、b、c 为键名)

     del a b c
    
  2. 键过期

     expire key seconds
    

    redis 支持对键添加过期时间,当超过过期时间后,会自动删除键,例如为hello 设置10s 过期时间

     expire hello 10
    

    ttl 命令观察键的剩余过期时间,有三种返回值
    1)大于等于0的整数:键剩余的过期时间
    2)-1: 键没设置过期时间
    3)-2: 键不存在

  3. 键的数据类型

     type key
    
数据结构和内部编码

在这里插入图片描述

type 命令实际返回的就是当前键的数据结构类型,它们分别是:string(字符串)、hash (哈希)、list(列表)、set(集合)、zset(有序集合),这是都是redis 对外的数据结构。
实际上每种数据结构都有自己的底层的内部编码实现,可通过 object encoding 命令查询内部编码:

object encoding hello
"embstr"

redis 这样设计的有两个好处:
第一,可以改进内部编码,而对外的数据结构和命令没有影响,这样一旦开发出更优秀的内部编码,无需改动外部数据结构和命令,例如redis 3.2 提供了quicklist,结合了ziplist和linkedlist两者的优势,为列表类型提供了一种更为优秀的内部编码实现,而对外用户基本感知不到。
第二,多种内部编码实现可以在不同场景下发挥各自的优势,例如ziplist 比较节省内存,但是在列表元素比较多的情况下,性能会有所下降,这时候redis 会根据配置选项将列表类型的内部实现转换为linkedlist

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值