Redis基础

2019-09-28  本文已影响0人  ands999
主从模式、网络分区、哨兵(主从切换)、持久化、复制(异步)、集群、哈希槽、rdb快照、aof日志、一致性、cap、过期、stream支持多播的可持久化的消息队列、lua脚本、pipeline批量发送命令、缓存雪崩、缓存穿透、缓存与数据库读写一致

Redis是REmote DIctionary Server的缩写。Redis可以保存键与5种不同类型的值之间的映射,持久化到硬盘,使用复制特性提高读性能,使用客户端分片提高写性能,使用集群提高写性能。是一个基于内存的高性能key-value内存数据库。

丰富的功能
Pipeline

redis是cs模式的tcp server,使用和http类似的请求响应协议。client可以通过socket连接发起多个请求命令。每个请求命令发出后client通常会阻塞并等待redis服务处理,redis处理完请求命令后会将结果通过响应报文返回给client。
可以利用pipeline的方式在client打包多条命令一起发出,不需要等待单条命令的响应返回,而redis服务端处理完多条命令后会将多条命令的处理结果打包到一起返回给客户端。
假设不会因为tcp 报文过长而被拆分。通过pipeline方式可以节省浪费在网络延迟的时间。需要注意的是,用 pipeline方式打包命令发送,redis必须在处理完所有命令前先缓存起所有命令的处理结果。所以并不是打包的命令越多越好。

pub/sub

发布订阅(pub/sub)是一种消息通信模式,主要是解耦消息的发布者和订阅者之间的耦合,这和观察者模式比较相似。
订阅者通过subscribe或psubscribe命令订阅自己感兴趣的消息类型,redis将消息类型称为通道(channel)。当发布者通过publish命令发送特定类型的消息时。订阅该消息类型的全部client都会收到此消息。这里消息的传递是多对多。
使用psubscribe命令订阅多个通配符通道,如果一个消息匹配上了多个通道模式的话,会多次收到同一个消息。

tips
高性能原因
分布式锁

setnx 会有死锁风险。再加上过期时间。但加锁和设置过期时间不是原子性,所以还是有死锁风险。
从2.8版本开始,set key value ex x nx。但还是会因业务逻辑执行时间较长,导致超时风险。这时需要人工介入。
这种分布式锁要支持锁的可重入性,需要在客户端的set方法进行封装,使用线程的Threadlocal变量存储当前持有锁的计数。精确一点,还要考虑内存锁计数的过期时间。锁的可重入性导致逻辑复杂度提升非常高。因此建议通过改变代码的逻辑结构避免锁的重入。

独特的键值对模型

很多数据库只能处理一种数据结构:
• SQL 数据库 —— 表格
• Memcached —— 键值缓存,键和值都是字符串
• 文档数据库(MongoDB) ——由 JSON/BSON 组成的文档(document)
Redis 的值有五种数据结构。

redis比memcached快

猜测有下面几个原因

上一篇 下一篇

猜你喜欢

热点阅读