Redis 简介和redis 的特性

发布时间:2019-08-09

reids是一种基于键值对(key-value)的NoSQL数据库, 与很对键值对数据库不同的是 ,Redis中的值可以是由string、hash、list、set、zset、Bitmaps、HyperLogLog、GEO等多种数据结构和算法构成, 因此Redis可以满足多种应用场景, 而且因为Redis会将所有数据都存在内存中,所以他的读写性能非常惊人。 不仅如此, redis还可以将内存中的数据利用快照和日志的形式保存到硬盘上,这样在发生类似断电或者机器故障的时候,内存中的数据也不会丢失。

redis 的特性

  1. 速度快

    官方给出读写性能可以达到 10万/S;

    所有数据存在内存;

    C语言实现;

    源代码优秀;

    单线程架构。

  2. 基于键值对的数据结构服务器

    值不仅可以是字符串, 还可以是具体的数据结构,适应多种应用场景。 主要提供5种数据类型。

  3. 丰富的功能

    除了5种主要的数据类型, Redis还提供了许多额外的功能:

    提供了键过期功能,可以用来实现缓存; 提供了发布订阅功能,可以用来实现消息系统;

    支持Lua脚本功能,可以利用Lua创造出新的Redis命令;

    提供了简单的事务功能,在一定程度上保证事务特性;

    提供了流水线(Pipeline)功能,客户端能将一批命令一次传到Redis,减少了网络开销。

  4. 简单稳定

    源码早期只有2万行左右,3.0版本以后,增至5万行;

    单线程模型,服务端处理以及客户端开发都变得简单;

    不需要依赖操作系统中的类库,Redis自己实现了事件处理的相关功能。

  5. 客户端语言多

    几乎涵盖所有编程语言, 例如PHP等

  6. 持久化

    Redis提供了两种持久化方式:RDB和AOF,保证了数据的可持久性。

  7. 主从复制

    实现分布式Redis。一主多从,从也可以作为另一个的主。

  8. 高可用和分布式

    自2.8版本提供了高可用实现 Redis Sentinel ,保证Redis 节点的故障发现和故障自动转移 。 自3.0版本正式提供了分布式实现 Redis Cluster ,提供了高可用、读写和容量的扩展性。

单线程架构

一条命令从客户端到达服务端不会立刻执行,所有命令会进入一个队列,然后逐个执行。 高并发场景下, 同一时间多个命令执行顺序可能是不一样的, 但是绝对不会有两条命令同时执行。

单线程会有一个问题,对于每个命令的执行时间是有要求的。 如果某个命令执行时间过长, 会造成其他命令的阻塞,对于Redis这种高性能的服务来说是致命的。

image

适用的场景

缓存
排行榜系统
计数器
社交网络
消息队列系统

不适用的场景

海量冷数据存储