美文网首页
Redis API 理解与使用

Redis API 理解与使用

作者: 不二不二熊 | 来源:发表于2019-07-04 14:27 被阅读0次

    本章节大致分为以下几种:

    1. 通用API的介绍
    2. 简单介绍5种不同数据结构
    一、通用API
    • 查找key
    keys 
    [keys *] 遍历所有的key
    [keys he*] 查找以he开头的key,类似于正则表达式的通配符概念
    注意:keys命令为O(n)复杂度,一般不建议在生产环境中使用,建议使用scan命令,或者在热备
    从节点中使用。
    
    • 查看redis存储keys数量
    dbsize
    [dbsize] 命令时间复杂度仅为O(1),因为redis在内部维护了一个计数器,因此,可以放心在生产
    环境中使用。
    
    • 判断keys是否存在
    exists key
    [存在]:返回 1
    [不存在]:返回 0
    
    • 删除key
    del key :删除指定的 key 命令,可删除多个key
    [成功]:返回 1
    [不成功] :返回 0
    
    • 设置过期时间
    expire key seconds 
    [expire] :设置过期时间
    [ttl] :查询剩余过期时间 :返回 -2 即代表key不存在,内部执行了del 命令
    [persist] : 取消过期时间
    
    • 查看key类型
    type key
    O(1)级别命令
    
    二、数据结构以及内部编码
    内部编码
    redis 是单线程为什么还这么快?
    1. 基于内存,响应速度很快
    2. 非阻塞IO
    3. 避免线程切换和竞态消耗

    单线程使用注意事项:

    1. 一次只能执行一条命令
    2. 拒绝长(慢)命令
    3. 其实并不是完全单线程(AOF)

    字符串

    注意:字符串类型的value 不能超过 512M
    场景:缓存/计数器/分布式锁

    set key :设置
    get key :获取
    incr key : 对key 进行自增 1 ,如果之前不存在,则会创建key。
    decr key : 自减操作
    incrby key k :自增某个值
    decrby key k :自减某个值
    以上命令时间复杂度均为O(1)
    setnx key value :假如key 不存在,才设置
    setxx key value :key存在,才设置
    setex :设置过期时间,原子操作
    mget key1,key2:批量获取,原子操作(时间复杂度:O(n))
    mset key1,key2 :批量设置(时间复杂度:O(n))
    getset key newValue: set key newValue 并且返回旧的value
    append key value :追加value 值
    strlen key :返回字符串的长度(注意中文)
    incrbyfloat key k:增加浮点数
    getrange key start end :获取字符串指定下标的值
    setrange key start end :指定下标获取新的值
    

    hash

    注意:field 不能相同,value可以相同

    hget key field:获取hash key 的field对应的value值
    hset  key field value :设置 hash key 
    hdel key field :删除field 
    hexists  key field : 判断field是否存在
    hlen key : 获取field总数
    hgetall key:获取所有的key field
    hvals key: 获取hash key 对应所有field 的value
    hkeys key : 获取所有的fileds
    hmget key field1 field 2: 获取多个field值
    hmset key field1 value1 field2 value2:批量设置多个field 值
    

    list

    有序,可以重复

    rpush  key value1 value2 valueN:从列表右端插入
    loush key value1 value2 valueN :从列表左端插入
    linsert key before/after value  newValue :在list 指定的值前/后插入新元素,时间复杂度为O(n)
    lpop key :从左边弹出一个元素
    rpop key :从右边弹出一个元素
    lrem key count value:根据count值,从列表中删除所有value相等的值,count 根据传值正负0删除的个数不同
    ltrim key start end:根据索引范围修剪列表,时间复杂度为O(n)
    lrange key start end (包含end) :获取列表指定所索引范围内的item
    lindex key index:获取列表指定索引的item
    llen  key :获取长度 (时间复杂度为O(1))
    lset key index newValue :设置列表指定索引为新的值
    可实现TimeLine 时间轴功能
    blpop key timeout :lpop 阻塞版本,timeout是阻塞超时时间,0代表永远不阻塞
    brpop key timeout :rpop 阻塞版本,timeout是阻塞超时时间,0代表永远不阻塞
    [注意] lpush +lpop = Stack
    lpush +rpop = Queue
    lpush +brpop = message queue 
    

    set

    无序,无重复

    sadd key element :向集合中添加元素,如果元素已经存在,则添加失败
    srem key element :删除集合中的某个元素
    scard :查看集合中的元素
    sismember :判断元素是否存在于集合内
    srandommember :从集合中随机取出一个元素,不会破坏原集合,可返回多个元素
    smembers :取出集合中所有元素 (无序 ,使用需小心)
    sinter :取交集
    sdiff :取 差集
    sunion :取并集
    

    zset

    有序集合,引入了score 字段来保持有序性。
    集合:无序,可重复,element
    有序集合:有序,不可重复,element +score,score 是可以重复的

    zadd key score element (可以是多对):添加score 和element,时间复杂度为O(logn)
    zscore key element  返回元素的分数
    zincrby key  increScore element  增加或减少元素的分数
    zcard key 返回元素的个数
    zcount key minScore maxScore :返回有序集合内在指定分数范围内的个数
    可以利用有序集合实现排行榜功能
    

    相关文章

      网友评论

          本文标题:Redis API 理解与使用

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