Redis 简介

Redis具备如下特性:
    1、基于内存运行,性能高效
    2、支持分布式,理论上可以无限扩展
    3、key-value 存储系统
    4、开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的API
相比于其他数据库类型,Redis具备的特点:
1、C/S通讯模型
2、单进程单线程模型
3、丰富的数据类型
4、操作具有原子性
5、持久化
6、高并发读写
7、支持lua脚本
Redis的应用场景有哪些?
1、缓存系统(缓存“热点”数据:高频读、低频写)
2、计数器
3、消息队列系统
4、排行榜
5、社交网络和实时系统

Redis的数据类型:

1、String类型
2、哈希类型
3、列表类型
4、集合类型
5、顺序集合类型
String类型:
它是一个二进制安全的字符串,意味着它不仅能够存储字符串、还能存储图片、视频等多种类型, 最大长度支持512M。
对每种数据类型,Redis都提供了丰富的操作命令,如:
GET/MGET
SET/SETEX/MSET/MSETNX
INCR/DECR
GETSET
DEL
哈希类型:
该类型是由field和关联的value组成的map。其中,field和value都是字符串类型的。
Hash的操作命令如下:
HGET/HMGET/HGETALL
HSET/HMSET/HSETNX
HEXISTS/HLEN
HKEYS/HDEL
HVALS
列表类型:
该类型是一个插入顺序排序的字符串元素集合, 基于双链表实现。
List的操作命令如下:
LPUSH/LPUSHX/LPOP/RPUSH/RPUSHX/RPOP/LINSERT/LSET
LINDEX/LRANGE
LLEN/LTRIM
集合类型:
Set类型是一种无顺序集合, 它和List类型最大的区别是:集合中的元素没有顺序, 且元素是唯一的。
Set类型主要应用于:在某些场景,如社交场景中,通过交集、并集和差集运算,通过Set类型可以非常方便地查找共同好友、共同关注和共同偏好等社交关系。
Set类型的底层是通过哈希表实现的,其操作命令为:
SADD/SPOP/SMOVE/SCARD
SINTER/SDIFF/SDIFFSTORE/SUNION
顺序集合类型:
ZSet是一种有序集合类型,每个元素都会关联一个double类型的分数权值,通过这个权值来为集合中的成员进行从小到大的排序。与Set类型一样,其底层也是通过哈希表实现的。
ZSet命令:
ZADD/ZPOP/ZMOVE/ZCARD/ZCOUNT
ZINTER/ZDIFF/ZDIFFSTORE/ZUNION

Redis特性:

1、事务
命令序列化,按顺序执行
原子性
三阶段: 开始事务 - 命令入队 - 执行事务
命令:MULTI/EXEC/DISCARD
2、发布订阅(Pub/Sub)
Pub/sub是一种消息通讯模式
Pub发送消息, Sub接受消息
Redis客户端可以订阅任意数量的频道
“fire and forgot”, 发送即遗忘
命令:Publish/Subscribe/Psubscribe/UnSub
3、Stream
Redis 5.0新增
等待消费
消费组(组内竞争)
消费历史数据
FIFO

Redis常见问题:

1、击穿
概念:在Redis获取某一key时, 由于key不存在, 而必须向DB发起一次请求的行为, 称为“Redis击穿”。
引发击穿的原因:
第一次访问
恶意访问不存在的key
Key过期
合理的规避方案:
服务器启动时, 提前写入
规范key的命名, 通过中间件拦截
对某些高频访问的Key,设置合理的TTL或永不过期
2、雪崩
概念:Redis缓存层由于某种原因宕机后,所有的请求会涌向存储层,短时间内的高并发请求可能会导致存储层挂机,称之为“Redis雪崩”。
合理的规避方案:
使用Redis集群
限流

除了Redis,还有什么NoSQL型数据库?

市面上类似于Redis,同样是NoSQL型的数据库有很多,比如:
1、Memcache:
        是一个和Redis非常相似的数据库,但是它的数据类型没有Redis丰富。Memcache由LiveJournal的Brad Fitzpatrick开发,作为一套分布式的高速缓存系统,被许多网站使用以提升网站的访问速度,对于一些大型的、需要频繁访问数据库的网站访问速度的提升效果十分显著。
2、Apache Cassandra(社区内一般简称为C*):
        是一套开源分布式NoSQL数据库系统。它最初由Facebook开发,用于储存收件箱等简单格式数据,集Google BigTable的数据模型与Amazon Dynamo的完全分布式架构于一身。Facebook于2008将 Cassandra 开源,由于其良好的可扩展性和性能,被 Apple、Comcast、Instagram、Spotify、eBay、Rackspace、Netflix等知名网站所采用,成为了一种流行的分布式结构化数据存储方案。
3、MongoDB:
        是一个基于分布式文件存储、面向文档的NoSQL数据库,由C++编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系型数据库的,它支持的数据结构非常松散,是一种类似json的BSON格式。