Redis详解(二)

API使用

  • 安装Redis后大部分场景都是使用它的API(命令)
    • 通用命令
    • 数据结构和编码
    • 单线程架构

通用命令

  • keys [pattern]
    • 扫描所有键值对,keys *打印出全部的键,pattern是正则表达式
    • 在生产环境不要随意使用,影响性能
    • 什么时候使用?热备从节点和scan
  • dbsize
    • 得到key的总数
    • 有个计数器在实时计数
  • exists key
    • 判断键是否存在
    • 一般可以任意使用
  • del key [...]
    • 删除键,可一次删除多个
  • expire key seconds
    • 设置键的过期时间(秒)
    • persist key在过期之前可以取消设置的过期时间
  • type key
    • 查看键值的类型
      1

数据结构

  • 概览
    2
  • 字符串
    • 就是value的类型为字符串,一个key的value上限是512M,但一般100K以内
    • 场景:缓存、计数器、分布式锁
      3
    • 计数器:从1开始
      4
      5
    • 如果存在,incrby会加上之前的计数值
    • 案例:缓存视频的基本信息(数据源在MySQL),后面是伪代码
      6
      7
    • 案例:多线程并发获取唯一自增ID,使用incr即可
      8
    • 其他API
      • setnx,在指定的 key 不存在时,设置指定的值
      • setxx,当指定的 key 存在时,设置指定的值(覆盖),默认的set是无则创建,有则改之
      • mget,一次获取多个 key,节省网络请求开销(n次和1次的区别);但是在服务端的复杂度是O(n),使用时需要节制!
      • mset,一次设置多个 key
      • 还有getset append strlen
        9
      • 了解即可
        10
  • 哈希
    • 特点:value也由键值对组成,或者说filed:value,或者说MapMap的结构
    • API
      10
      11
    • hlen返回filed的数量
      12
    • 案例:记录每个用户的访问量,hincrby user:1 pageviewnumber count
    • 其他API:
      13
    • 谨慎使用hgetall,因为一个key中可能包含大量field:value
    • 案例:更新用户信息
      • 使用string实现,value中全部保存为json格式的字符串
      • 也可以将各个字段拆成各个key,比较浪费内存
        14
      • 使用hash实现,直观,可以节省空间,实现部分更新
        15
        16
  • 列表
    • 有序(按照插入顺序排序)、元素可重复,默认是字符串类型的value
      17
    • ltrim key start end,只保留指定取件的元素(包头包尾)
    • 从左侧或右侧都可以操作,这很方便
    • 其他API:
      18
    • 实现常见结构:
      19
  • 集合(set)
    • 特点:无序、无重复(一个key里面的值不允许重复)
      20
      23
    • 注意smembers有可能阻塞
    • 案例:给用户添加标签,给标签添加用户(避免重复)
    • 集合间交差并集:
      21
    • 差集就是前者有后者无的
  • 有序集合(zset)
    • 特点:类似hash,value由score:value组成(score用来排序),无重复
      22
    • 对比set
      23
    • 常用API
      24
      26
    • 案例:排行榜(书籍、电影、音乐),这里可以通过控制score实现?

单线程

  • Redis是单线程模型,所有操作都是串行的
  • 单线程为什么这么快?
    • 纯内存(主要原因)
    • 非阻塞IO(epoll),同时监听多条请求,基本上reday即可go
    • 避免线程切换
  • 一次只运行一条指令,拒绝慢命令
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Roy_Allen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值