Redis一些知识整理

    科技2024-11-10  10

    Redis简介

    什么是Redis?为什么Redis这么快?如何用Redis实现分布式锁?分布式锁需要解决的问题?Redis实现分布式锁的方法 如何使用Redis做异步队列?

    什么是Redis?

    Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value、NoSQL数据库,并提供多种语言的API。 它支持存储的value包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。 它常用于高并发场景,能够访问访问海量数据,查询效率也非常高。

    为什么Redis这么快?

    Redis本身由C语言编写,而且完全基于内存,绝大部分是内存操作,执行效率高。采用单线程,防止多线程竞争问题数据结构简单,操作也简单采用IO多路复用模型,非阻塞IO

    如何用Redis实现分布式锁?

    分布式锁需要解决的问题?

    互斥性安全性死锁容错

    Redis实现分布式锁的方法

    通过set key value [EX seconds] [PX millseconds] [NX][XX]设置过期的时间以避免key大量堆积。通过NX模式判定该key资源是否被占用,如果返回为ok,则表示被占用,那么该线程将会阻塞等待。否则获取该资源。

    如何使用Redis做异步队列?

    使用List作为队列,RPUSH生产消息,LPOP消费消息

    缺点:没有等待队列里有值就直接消费弥补:可以通过在应用层引入Sleep机制去调用LPOP重试

    BLPOP key [key …] timeout : 阻塞直到队列里有消息或超时 缺点: 只能供一个消费者消费

    pub/sub: 主题订阅者模式

    发送者(pub)发送消息,订阅者(pub)接收消息订阅者可以订阅任意数量的频道缺点: 消息的发布是无状态的,无法保证可达,如果消费者在生产者发布消息时下线,消费者重新上线将无法收到。
    Processed: 0.033, SQL: 8