• 【数据库】redis安装


    redis简介

    REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。

    Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。

    Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型

    redis安装

     brew install redis

     redis启动

    brew services start redis

    redis-server

    交互模式

    redis-cli -h 127.0.0.1 -p 6379

    使用redis-cli连接本地服务

    zhouxi@zhouxideMacBook-Pro ~ % redis-cli
    127.0.0.1:6379> 

    执行PING指令

    127.0.0.1:6379> PING
    PONG
    127.0.0.1:6379> 

    关闭redis服务

    redis-cli shutdown

    强制关闭redis服务

    sudo pkill redis-server

    添加key-value

    127.0.0.1:6379> SET runoobkey redis
    OK

    查询key-value

    127.0.0.1:6379> GET runoobkey
    "redis"

    删除key-value

    127.0.0.1:6379> DEL runoobkey
    (integer) 1

    判断Key是否存在

    127.0.0.1:6379> EXISTS runoobkey
    (integer) 1

    redis哈希

    存储哈希值

    127.0.0.1:6379> HMSET runoobkey name "redis" description "cac" likes 20 vis 23000
    OK

    获取全部属性

    复制代码
    127.0.0.1:6379> HGETALL runoobkey
    1) "name"
    2) "redis"
    3) "description"
    4) "cac"
    5) "likes"
    6) "20"
    7) "vis"
    8) "23000"
    复制代码

    判断HASH是否存在

    HEXISTS runoobkey name

    获取指定属性

    127.0.0.1:6379> HGET runoobkey name
    "redis"

    获取所有key

    127.0.0.1:6379> HKEYS runoobkey
    1) "name"
    2) "description"
    3) "likes"
    4) "vis"

    修改指定属性

    127.0.0.1:6379> HSET runoobkey name "hello"
    (integer) 0

    修改多个属性

    127.0.0.1:6379> HSET runoobkey name "hello" description "new des"
    (integer) 0

    redis列表

    Redis列表是简单的字符串列表,按照插入顺序排序

    创建列表并添加两个元素

    127.0.0.1:6379> LPUSH runoobkey redis
    (integer) 1
    127.0.0.1:6379> LPUSH runoobkey mongodb
    (integer) 2

    获取指定index的元素

    127.0.0.1:6379> LINDEX runoobkey -1
    "redis"

    redis集合(set)

    向集合中添加值

    复制代码
    127.0.0.1:6379> SADD runoobkey redis
    (integer) 1
    127.0.0.1:6379> SADD runoobkey mongodb
    (integer) 1
    127.0.0.1:6379> SADD runoobkey redis
    (integer) 0
    复制代码

    Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据,这里返回0

    redis有序集合(sorted set)

    Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。

    不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。

    有序集合的成员是唯一的,但分数(score)却可以重复。

    创建和添加属性

    复制代码
    127.0.0.1:6379> ZADD runoobkey 1 redis
    (integer) 1
    127.0.0.1:6379> ZADD runoobkey 2 redis
    (integer) 0
    127.0.0.1:6379> ZADD runoobkey 1 rediss
    (integer) 1
    复制代码

    redis发布订阅

    Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。

    Redis 客户端可以订阅任意数量的频道。

    创建一个redis-cli客户端订阅消息

    zhouxi@zhouxideMacBook-Pro ~ % redis-cli
    127.0.0.1:6379> SUBSCRIBE runoobChat
    Reading messages... (press Ctrl-C to quit)
    1) "subscribe"
    2) "runoobChat"

    创建一个redis-cli客户端发送消息

    zhouxi@zhouxideMacBook-Pro ~ % redis-cli
    127.0.0.1:6379> PUBLISH runoobChat "Redis PUBLISH test"
    (integer) 1
    127.0.0.1:6379> 

    这是订阅端会收到消息

    3) (integer) 1
    1) "message"
    2) "runoobChat"
    3) "Redis PUBLISH test"

    redis事务

    Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:

    • 批量操作在发送 EXEC 命令前被放入队列缓存。
    • 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
    • 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

    一个事务从开始到执行会经历以下三个阶段:

    • 开始事务。
    • 命令入队。
    • 执行事务。

    以下是一个事务的例子, 它先以 MULTI 开始一个事务, 然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务, 一并执行事务中的所有命令:

    复制代码
    127.0.0.1:6379> MULTI
    OK
    127.0.0.1:6379> SET book-name "hell"
    QUEUED
    127.0.0.1:6379> GET book-name
    QUEUED
    127.0.0.1:6379> EXEC
    1) OK
    2) "hell"
    127.0.0.1:6379> 
    复制代码

    单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。

    事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。

    redis stream

    Redis Stream 是 Redis 5.0 版本新增加的数据结构。

    Redis Stream 主要用于消息队列(MQ,Message Queue),Redis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis 宕机等,消息就会被丢弃。

    简单来说发布订阅 (pub/sub) 可以分发消息,但无法记录历史消息。

    而 Redis Stream 提供了消息的持久化和主备复制功能,可以让任何客户端访问任何时刻的数据,并且能记住每一个客户端的访问位置,还能保证消息不丢失。

    每个 Stream 都有唯一的名称,它就是 Redis 的 key,在我们首次使用 xadd 指令追加消息时自动创建。

    每个 Stream 都有唯一的名称,它就是 Redis 的 key,在我们首次使用 xadd 指令追加消息时自动创建。

    上图解析:

    • Consumer Group :消费组,使用 XGROUP CREATE 命令创建,一个消费组有多个消费者(Consumer)。
    • last_delivered_id :游标,每个消费组会有个游标 last_delivered_id,任意一个消费者读取了消息都会使游标 last_delivered_id 往前移动。
    • pending_ids :消费者(Consumer)的状态变量,作用是维护消费者的未确认的 id。 pending_ids 记录了当前已经被客户端读取的消息,但是还没有 ack (Acknowledge character:确认字符)。

    消息队列相关命令:

    • XADD - 添加消息到末尾
    • XTRIM - 对流进行修剪,限制长度
    • XDEL - 删除消息
    • XLEN - 获取流包含的元素数量,即消息长度
    • XRANGE - 获取消息列表,会自动过滤已经删除的消息 
    • XREVRANGE - 反向获取消息列表,ID 从大到小
    • XREAD - 以阻塞或非阻塞方式获取消息列表

    消费者组相关命令:

    • XGROUP CREATE - 创建消费者组
    • XREADGROUP GROUP - 读取消费者组中的消息
    • XACK - 将消息标记为"已处理"
    • XGROUP SETID - 为消费者组设置新的最后递送消息ID
    • XGROUP DELCONSUMER - 删除消费者
    • XGROUP DESTROY - 删除消费者组
    • XPENDING - 显示待处理消息的相关信息
    • XCLAIM - 转移消息的归属权
    • XINFO - 查看流和消费者组的相关信息;
    • XINFO GROUPS - 打印消费者组的信息;
    • XINFO STREAM - 打印流信息

    清除所有数据

    127.0.0.1:6379> FLUSHALL 
    OK
    127.0.0.1:6379> 
  • 相关阅读:
    $NOIP2018$赛道修建
    $NOIP2005$过河
    $NOIP2014$飞扬的小鸟
    $[SCOI2014]$方伯伯的玉米田
    大吉大利,晚上吃鸡!
    $HNOI2005$星际贸易
    $CF1142B$ $Lynyrd Skynyrd$
    $SDOI2015$排序
    $NOIP2003$侦探推理
    Build 2016概览
  • 原文地址:https://www.cnblogs.com/gtea/p/16141809.html
Copyright © 2020-2023  润新知