Redis初学者指南:基础概念与操作

发表时间: 2020-09-17 15:00

《redis开发与运维》

http://www.ruanyifeng.com/blog/2018/07/cap.html

Redis是基于键值对(key-value)的NoSQL数据库,国内外大量公司都在使用Redis。

Redis受到如此多公司的青睐,主要有几个特性:

1.速度快

官方给出的性能10w/s,主要有几个原因:

  • 所有数据都是存放在内存中的
  • C语言实现的,距离操作系统更近的语言
  • 单线程架构(Reactor事件处理机制的编程模型)
  • 优秀的源码设计,比如内部数据结构的设计

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

几乎所有的编程语言都提供了类似字典的功能,例如Java里的map、Python里的dict,类似于这种组织数据的方式叫作基于键值的方式,与很多键值对数据库不同的是,Redis中的值不仅可以是字符串,而且还可以是具体的数据结构:字符串、哈希、列表、集合、有序集合

3.丰富的功能

  • 提供了键过期功能,可以用来实现缓存。(也是redis最常用的功能,比如电商中缓存商品信息,库存信息,促销信息等)。

6种内存淘汰策略,当内存满的时候才会选取策略删除key

    1. volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰
    2. volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰
    3. volatile-random:从已设置过期时间的数据集中任意选择数据淘汰
    4. allkeys-lru:从数据集中挑选最近最少使用的数据淘汰
    5. allkeys-random:从数据集中任意选择数据淘汰
    6. no-enviction(驱逐):禁止驱逐数据

对于缓存来说,键过期需要删除,目前常用的有3种删除过期键策略

    1. 定时删除:为每一个设置过期的key创建一个定时器,如果key过多,将有大量定时器产生,严重影响性能。
    2. 惰性删除:删除操作发生在每次读取key的时候,而且只删除当前读取的key。如果很长时间没有读取,会造成数据积压,发生内存泄露。
    3. 定期删除:定期扫描key,检查是否过期和删除。

目前,Redis采用的是惰性删除+定期删除的方案;

内存淘汰策略用于处理内存不足时的需要申请额外空间的数据;过期策略用于处理过期的缓存数据。

  • 提供了发布订阅功能,可以用来实现消息系统。
  • 支持Lua脚本功能(常用的有分布式锁)
  • 简单的事务功能
  • Pipeline,批处理redis命令,减少了网络的开销。

4.稳定

5.客户端语言多

6.持久化:AOF和RDB两种方式

7.主从复制

8.高可用和分布式

分布式系统(distributed system)正变得越来越重要,大型网站几乎都是分布式的。1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标。

  • Consistency 一致性
  • Availability 可用性
  • Partition tolerance 分区容错性

Eric Brewer 说,这三个指标不可能同时做到。这个结论就叫做 CAP 定理。

通常说zookeeper是CP, redis是AP