Redis 学习记录| 青训营

140 阅读6分钟

此篇文章是我参与 #青训营笔记创作活动 的第4篇笔记

主要是简单记录一下自己在学习 Redis 时遇到的一些要点,

只是个人的一个学习记录,水平不高还望大佬们包容。


安装(Ubuntu)

# apt 安装
sudo apt install redis-server
​
# 检测
redis-server

使用

  • clear

    • 清空屏幕
  • quit

    • 退出redis客户端

字符串 String

  • SET 命令

    • 设置一个键值对,中间以空格相隔

    • SET name ta0lve

      • OK
    • SET Name Ta0lve

      • OK
  • GET 命令

    • 读取一个键对应的值

    • GET name

      • "ta0lve"
    • GET Name

      • "Ta0lve"
  • DEL 命令

    • 删除一个键值对

    • DEL name

      • (integer) 1
    • GET name

      • (nil)
  • EXISTS 命令

    • 判断一个键值对是否存在

    • EXISTS name

      • (integer) 0
    • EXISTS Name

      • (integer) 1
  • KEYS 命令

    • 查找符合条件的键

    • KEYS *

      • 查找所有的键
    • KEYS *me

      • 查找所有以me结尾的键
  • FLUSHALL 命令 (flush all)

    • FLUSHALL

      • OK
    • KEYS *

      • (empty array)
  • EXPIPE 命令

    • 设置一个键的过期时间
    • EXPIPE name 10
  • TTL 命令(time to live)

    • 查看一个键的过期时间

    • TTL Name

      • -1(未设置过期时间)
    • TTL name

      • 9(还有9秒过期)
    • GET name

      • (过期之后再GET值为空)
    • KEYS name

      • (使用KEYS命令也看不到这个键)
  • SETEX 命令

    • SETEX + 键 + 过期时间 + 值
    • SETEX name 5 ta0lve
    • 当键不存在是才会设置过期时间与值
    • 如果键已经存在则不会做任何动作

Redis 默认是使用字符串来存储数据的,且是以二进制的形式存储的,所以可以存储许多类型的数据,但是默认是不支持中文的

想要显示中文需要重新登陆redis,并且加上 --raw 参数,表示以原始的形式显示内容。


列表 List

可以看做是一个双向队列,也可以实现一个栈

  • LPUSH

    • LPUSH letter 1

      • (integer) 1
      • push 一个元素 1
    • 像栈一样是头部添加,新添加的元素在头部

      • 头插法,后进的元素在前面,"后来居上"
    • 可以一次push多个元素

      • LPUSH 2 3 4
      • 从左到右添加,所以4最后进
      • 此时排序为 "4" "3" "2" "1"
  • LRANGE

    • LRANGE letter 0 -1

      • 1)"a"
      • 0 -1表示从第一个元素到最后一个元素
  • RPUSH

    • 从尾部插入,尾插法
  • LPOP

    • 从列表的头部删除元素

      • 返回被删除的元素
    • LPOP letter 2

      • 一次删除多个元素(这里是两个)
      • (过老版本的redis可能会报错,忽略即可)
  • RPOP

    • 从列表的尾部删除元素
  • LIEN

    • 查看列表的长度

    • LIEN letter

      • (integer) 3
      • 表示列表中现在还有三个元素
  • LTRIM

    • 删除列表中指定范围以外的元素
    • trim 修剪,只保留start和stop之间的元素
  • flushall

    • 清空所有数据

集合 Set

set 是一种无序集合,其内部的元素不可重复

list 中的元素则具有顺序,且是可以重复的

  • SADD

    • SADD course Redis

      • (integer) 1
    • SADD course Redis

      • (integer) 0
      • 重复添加,添加失败
  • SMEMBERS

    • members 查看该集合中的元素

    • SMEMBERS course

      • 1)"Redis"
  • SISMEMBER

    • 判断一个元素是否在集合中

    • SISMEMBERS course Redis

      • (integer) 1
  • SREM

    • 删除集合中的元素

    • SREM course Redis

      • (integer) 1
    • SMEMBERS course

      • (empty list or set)
  • 在Redis中支持集合的相关运算

    • SINTER

      • inter
    • SUNION

      • union
    • SDIFF

      • diff

有序集合 SortedSet

有序集合(ZSet)的每个元素都会关联一个浮点类型的分数,然后按照这个分数来对集合中的元素进行从小到大的排序(有点像优先级队列)

有序集合的元素都是唯一的,但是有序集合元素所关联的分数是可以重复的

有序集合的命令都是以 Z 开头

  • ZADD

    • ZADD + 集合的名字 + 集合的元素(分数+成员)

    • ZADD result 680 华清 670 大北 660 旦复 650 大浙

      • 4
  • ZRANGE

    • ZRANGE 0 -1

      • 大浙
      • 旦复
      • 大北
      • 华清
    • ZRANGE 0 -1 WITHSCORES

      • 大浙
      • 650
      • 旦复
      • 660
      • 大北
      • 670
      • 华清
      • 680
      • (withscores)
  • ZSCORE

    • 查看某个成员的分数

    • ZSCORE result 华清

      • 680
  • ZRANK

    • 查看某个成员的排名

    • ZRANK result 华清

      • 3
      • index = 3,即从小到大排是第4位
  • ZREVRANK

    • 查看某个成员在从大到小的顺序中的排名

    • ZREVRANK result 华清

      • 0
      • index = 0
  • ZREM

    • 删除某个成员

哈希 Hash

哈希是一个字符类型的字段和值的映射表,简单来说就是一个键值对的集合,十分适合用来存储对象。

哈希相关的命令都是以 H 开头

  • HSET

    • HSET person name laoyang
    • HSET person age 100
  • HGET

    • HGET person name

      • laoyang
    • HGET person age

      • 100
    • HGETALL person

      • name
      • laoyang
      • age
      • 100
  • HDEL

    • 删除某个键值对
  • HEXISTS

    • exists 判断某个键值对是否存在
  • HKEYS

    • 获取哈希中的所有键
  • HLENS

    • 获取哈希中的所有键值对的数量

发布订阅模式

  • SUBSCRIBE

    • subscribe 订阅
    • SUBSCRIBE Ta0lve
    • 订阅一个频道
  • publish

    • publish Ta0lve git
    • 在频道上发布消息"git"
  • 一个频道可以有多个终端订阅

  • 局限性

    • 消息无法持久化
    • 无法记录历史消息
    • 可以通过 stream流 数据结构来解决

消息队列 Stream

Stream 相关的命令1都以 X 开头

  • XADD

    • 向Stream中添加消息

    • XADD geekhour * course redis

      • "168645710450-0"
      • 回显消息即为消息的ID
      • 命令中的"*"表示自动生成一个消息ID,不同消息 ID不同
      • 自动生成的ID是保持递增的
    • XADD geekhour * course redis

      • 消息ID格式为 1-0

        • 第一个整数表示一个时间戳,第二个整数表示一个序列号
  • XLEN

    • 查看Stream中消息的数量
  • XRANGE

    • 查看Stream中消息的详细内容

    • XRANGE geekhour - +

      • 减号与加号表示所有信息
  • XDEL

    • 删除消息,后加消息的ID

    • XDEL geekhour 168645710450-0

      • (integer) 1
  • XTRIM

    • XTRIM geekhour MAXLEN 0

      • 删除所有信息
      • 2
      • 表示一共删除了两条信息
  • XREAD

    • XREAD COUNT 2 BLOCK 1000 STREAMS geekhour 0

      • COUNT 2 表示一次读取两条消息
      • BLOCK 1000 表示如果没有消息的话就阻塞1000毫秒,即1秒
      • STREAMS 后加上消息队列的名称
      • 0 表示从 index = 0 开始读取
    • XREAD COUNT 2 BLOCK 1000 STREAMS geekhour $

      • $ 表示获取从现在开始的最新消息
  • XGROUP

    • XGROUP CREATE geekhour group1 0
    • 创建一个名称为 group1的消费者组
  • XINFO

    • XINFO GROUPS geekhour

      • 返回组的名称,消费者的数量,待处理的消息数等等
  • XGROUP

    • XGROUP CREATECONSUMER geekhour group1 cousumer1

      • create consumer 添加消费者
  • XREADDROUP

    • XREADDROUP GROUP group1 consumer1 COUNT 2 BLOCK 3000 STREAMS geekhour >

      • ">"表示从这个消息中读取最新的消息

未完待续

  • 地理空间Geospatial
  • HyperLogLog
  • 位图Bitmap
  • 位域Bitfield
  • 事务
  • 持久化
  • 主从复制
  • 哨兵模式

附录

本文参考链接及推荐阅读:

Redis 教程 | 菜鸟教程 (runoob.com)

【GeekHour】一小时Redis教程_ 哔哩哔哩_ bilibili