Redis 学习笔记(一)- 基本数据结构

用了好几年的Redis,很多东西还是一知半解。于是决定系统的学习一下,也写些笔记以做巩固。

Redis 有哪些特性

  • 速度快(单线程)
  • 基于键值对的数据结构服务器
  • 丰富的功能
    • 除了基础的5种数据结构,还提供了发布订阅、Lua脚本、简单的事务等等功能。
  • 简单稳定
  • 客户端语言多
  • 持久化
  • 主从复制
  • 高可用及分布式

Redis 能用来做什么

  • 缓存
  • 分布式锁
  • 排行榜系统
  • 计数器应用(如 api 限频)
  • 消息队列系统

Redis 的基本数据结构

Redis 使用了单线程架构和 I/O 多路复用模型来实现高性能的内存数据库服务。它提供了 5 种数据结构。

字符串

  • 常用命令
    • set key value [ex seconds] [px milliseconds] [nx|xx]
    • get key
    • mset key value [key value …]
    • hget key [key …]
    • incro key (如果键值不存在,会按照值0自增,返回1)
  • 内部编码
    • int : 长整型(8字节,-2^63 ~ 2^63 -1)
    • embstr :大于等于39个字节的字符串
    • raw:大于39个字节的字符串
  • 使用场景
    • 缓存
    • 计数
    • 共享 session
    • 限频

哈希

  • 常用命令
    • hset key field value
    • hget key field
    • hdel key field [field …]
    • hmset key field value [field value …]
    • hmget key field [field]
    • hkeys key (获取所有field)
    • hvals key (获取所有vaule)
    • hgetall key (获取所有field-value)
  • 内部编码
    • ziplist (压缩列表)
    • hashtable (哈希表)
  • 使用场景
    • 存储数据库表记录

列表

  • 常用命令
    • rpush key value [value …] (lpush 同理) ( r-right, l-left)
    • linsert key before|after pivot value 从某个值前后插入元素
    • lrange key start end
    • lindex key index 获取指定索引下标元素
    • llen key 列表长度
    • lpop key (rpop 同理)
  • 内部编码
    • ziplist (压缩列表)
    • linkedlist (链表)
  • 使用场景
    • 消息队列(如 laravel 的队列实现)

集合

  • 常用命令
    • sadd key element [element …]
    • srem key element [element …]
    • scard key 计算元素个数
    • sismember key element 判断元素是否在集合中
    • smembers key 获取所有元素 (慎用)
    • sinter key [key …] 多个集合的交集
    • sunion key [key …] 多个集合的并集
    • sdiff key [key …] 多个集合的差集
  • 内部编码
    • intset (整数集合)
    • hashtable (哈希表)
  • 使用场景
    • 用户标签
    • 大数组操作

有序集合

  • 常用命令
    • zadd key score member [score member …]
    • zcard key 计算成员数量
    • zscore key member 获取成员的分数
    • zrem key member [member …]
    • zrange key start end [withscores] 从低到高返回指定排名范围的成员 (下标从0开始)
  • 内部编码
    • ziplist (压缩列表)
    • skiplist (跳跃列表)
  • 使用场景
    • 排行榜

键管理

单个键

  • 重命名 :rname key newkey
  • 随即返回一个key :randomkey
  • 键过期
    • expire key seconds
    • expire key timestamp
    • ttl key
  • 迁移键
    • move key db
    • dump + restore
    • migrate

遍历键

  • 全量遍历键:keys pattern
  • 渐进遍历键:scan cursor [match pattern] [count number] (number 默认为10)

数据库

  • 切换数据库:select dbIndex
  • 清除数据库:flushdb/flushall

猜你喜欢

转载自blog.csdn.net/melody_lql/article/details/85457984