Redis数据类型(1)

简介

  • 可做数据库、缓存、消息中间件MQ

数据类型

Redis-Key使用

  • 判断key存在

    1
    EXISTS keyName
  • 移除key值

    1
    move keyName DataBaseNum键值名|数据库索引

  • 设置key值过期时间

    1
    EXPIRE keyName seconds key名称|过期时间

  • 查看key的数据类型

    1
    type keyName

  • 更多常用命令可参考redis官方文档
    redis中文文档(常用命令)

String

  • 追加键值:APPEND keyName str

    1
    APPEND keyName str

  • 变更加操作 incr keyName

    1
    INCR keyName

  • 减操作decr keyName

    1
    decr keyName

  • 步长:增:incrby keyName step减:decrby keyName step

    1
    2
    incrby keyName step # 增
    decrby keyName step # 减

  • 获取指定索引字符串:GETRANGE keyName indexStart indexEnd 0,-1代表字符串全部

    1
    2
    # 0,-1代表字符串全部
    GETRANGE keyName indexStart indexEnd

  • 替换值:setrange keyName index str

    1
    setrange keyName index  str

  • 设置过期时间

  • setex 设置值多久过期

    1
    setex key time

  • setnx 如果key存在则创建失败

    1
    setnx key

  • 批量设置

  • mset:批量设置;mget:批量获取

    1
    2
    mset key1 val1 key2 val2
    mget key1 key2

  • msetnx:要么一起成功,要么一起失败

    1
    msetnx key1 val1 key2 val2

  • 对象

  • 设置和获取对象对象

    1
    2
    3
    4
    # 设置
    MSET user:1:name lchyang user:1:age 18
    # 获取
    MGET user:1:name user:1:age

  • 获取并设置

    1
    2
    3
    # 如果不存在,则返回nil
    # 存在,获取原来的值并设置新的值
    GETSET originKey updateValue

  • 使用场景

  • 计数器

  • 统计多单位的数量:uid:893489:follow 0

  • 粉丝数

  • 对象缓存存储

List

  • redis里面,可以将list变成,栈、队列、阻塞队列

  • 添加 LPUSH list xx 插入列表 可重复值

    1
    LPUSH list xxx

  • 获取 LRANGE list 0 -1 区间获取

    1
    2
    LRANGE list 0 -1
    # 先进的在最后

  • 插入 Rpush list value 插入的值在首位

    1
    RPUSH list value

  • 移除值:LPOP 左开始 RPOP 右开始

    1
    2
    3
    LPOP list
    RPOP list
    LRANGE list 0 -1

  • 查看长度 LLEN list

    1
    LLEN list

  • 移除指令 LREM list 2 three

    1
    LREN list 2 

  • 截取指定长度的值 LTRIM mylist 1 2 下标

    1
    LTRIM mylist 1 2 下标

  • 移除旧值到新列表 RPOPLPUSH mylist myotherlist

    1
    RPOPLPUSH mylist myotherlist

  • 更新值 lset list 0 “item”

    1
    lset list 0 "item"

  • 指定位置插入值 LINSERT mylist before “world” “other”

    1
    LINSERT mylist before "world" "other"

小结

  1. 他实际上是一个链表、before Node after,left、right都可以插入值
  2. 如果key不存在,创建新的链表
  3. 如果key存在,新增内容
  4. 如果移除了所有值,空链表、也代表不存在
  5. 两边插入或改动,效率最高、中间元素、相对来说效率低
  6. 消息排队:消息队列(Lpush、Rpop) 栈(Lpush,Lpop)