redis是一个开源的、遵循BSD协议的、基于内存的而且目前比较流行的键值数据库(key-value database),它属于非关系型数据库,是能提供将内存通过网络远程共享的一种服务,提供类似功能的还有上周作业中提到的memcached,但相比memcached,redis还提供了易扩展、高性能、具备数据持久性等功能。

  1. redis特点

    redis的特点包括以下几方面:

    ①速度快:redis是基于C语言实现的,所有数据是放在内存中,因而查询速度非常快,每秒的查询次数可以达到10W;

    ②单线程:单线程主要是在redis6.0之前的版本中,由于redis的数据是纯内存的,单线程可以起到非阻塞、避免线程切换和竞态消耗的效果;

    ③持久化:redis虽然是基于内存的,其数据也具有磁盘存储功能,即使是出现断电等情况也不会导致数据丢失的现象,可做到数据的持久化;

    ④支持多种数据结构:redis支持hash、集合、有序集合等多种数据结构;

    ⑤支持多种编程语言:基本上主流的编程语言都可访问redis数据;

    ⑥功能丰富:支持lua脚本、发布订阅、事务、pipeline等功能;

    ⑦简单:redis的代码短小精悍(单机核心代码只有23000行左右),单线程开发容易,不依赖外部库,使用简单;

    ⑧主从复制:redis也可做到类似于MySQL数据库的主从复制;

    ⑨支持高可用和分布式

    在以上的redis特点中,我们需要特别注意单线程这点,做到一次性只执行一条命令,另外要拒绝使用长(慢)命令,如keys、flushall、flushdb和slow lua script等。此外,在redis6.0之前的版本中,只有3.0之前的版本是单进程单线程,而在3.0-6.0之间的版本中还有其他的线程去实现特定功能,例如实现文件描述符的同步和关闭文件描述符。


  1. redis典型应用场景

    redis可以在多种场景中使用,例如以下几个典型应用场景:

    ①session共享:常见于web集群中的Tomcat或者php中多web服务器session共享;

    ②缓存:数据查询、电商网站商品信息和新闻内容等;

    ③计数器:访问排行榜、商品浏览数这些与次数相关的数值统计场景;

    ④微博/微信社交场合:共同好友、粉丝数、点赞、关注和评论等;

    ⑤消息队列:ELK的日志缓存、部分业务的订阅发布系统;

    ⑥地理位置:基于GEO(地理信息定位),实现摇一摇、附近的人和外卖等功能。