Redis数据库 :《Redis实战》(Redis in Action)学习笔记 第一章 初识Redis

写在前面:

我是一名全栈工程师,在工作中也经常涉及后台架构的设计,但由于业务背景对性能要求一般,并无机会也无需要使用分布式后台及Redis等业内广为流行的技术。这个系列将会按照章节记录并归纳我在书中读到的关键知识,并在每篇文章后面加上自己的理解,力求只将干货保留在博文中。一来巩固知识,二来互相交流。

本章内容:

  • Redis与其他软件的相同之处和不同之处。
  • 与Redis进行简单的互动

正文:

1.1 Redis简介:

    Redis是一个速度非常快的非关系型数据库,她可以存储键值的映射,如同Json一样,也可以将内存中的数据持久化到硬盘。


    1.1.1 Redis与其他数据库和软件的对比:
    Redis属于非关系型数据库(NoSQL), 不使用表,也不会预定义或者强制用户对Redis存储的不同数据进行关联
    常用来与Redis对比的是高性能键值缓存服务器memcached,他们的性能相差无几,也都是用KV的方式存储数据,但是Redis能够自动以两种不同的方式将数据写入硬盘,并且 Redis除了普通的字符串键以外,还可以存储其他4种数据结构 ,而memcached只能存储字符串键。所以Redis可以解决更为广泛的问题,既可以用作主数据库也可以用作辅助数据库。

    一般性能或者功能必要的情况才会将数据存储到Redis,如果程序对性能要求不高,或者将大量数据存在内存里面太贵。可能还是会选择关系型数据库或者其他NoSQL数据库,如何选择和设计将会在之后的文章中提及。


    1.1.2 附加特性:

    Redis是个内存数据库,我们要考虑如何将内存中的数据持久化到硬盘中,Redis提供两种持久化方法:第一种为时间点转储,转储操作既可以在“指定的时间段内有制定数量的写操作执行”这一条件被满足时执行,又可以通过两条转储到硬盘命令中的任何一条来执行;第二种持久化方法将所有修改了数据库的命令都写入一个只追加文件里面,用户可以根据数据的重要程度,将只追加写入设置为从不同步、每秒同步一次或者每写入一个命令就同步一次,深入的讨论将在第四章进行。 

    尽管Redis的性能良好,但是受限于内存存储设计,一台Redis服务器可能没办法处理所有请求。为了扩展Redis的读性能,并为Redis提供故障转移支持,Redis实现了主从复制特性:主服务器的写命令,从服务器也会执行一遍进行更新,所以客户端可以向任意一个服务器发送读请求

1.2 Redis数据结构介绍:

    Redis可以存储键与物种不同数据结构类型之间的映射: STRING(字符串)、LIST(列表)、SET(集合)、HASH(散列)和ZSET(有序集合),接下来介绍一下各种数据结构的一些基本操作。


    1.2.1 Redis中的字符串:
    命令 行为
GET  获取存储在给定键中的值
SET 设置存储在给定键中的值
DEL 删除存储在给定键中的值

安装好Redis和redis-cli后,用redis-cli命令启动:   

Redis数据库 :《Redis实战》(Redis in Action)学习笔记 第一章 初识Redis_第1张图片


    1.2.2 Redis中的列表:

命令 行为
RPUSH/LPUSH 将给定值推入列表的右/左端
LRANGE 获取列表在给定范围上的所有值
LINDEX 获取列表在给定位置上的单个元素
RPOP/LPOP 从列表的右/左端弹出一个值,并返回被弹出的值

Redis数据库 :《Redis实战》(Redis in Action)学习笔记 第一章 初识Redis_第2张图片

    1.2.3 Redis中的集合:

        Redis的集合和列表都可以存储多个字符串,但是集合只能存储各不相同的字符串作为键(和大多数语言中的Set一样),且集合的存储是无序的,所以也不能像列表一样在某一端推入和推出。

命令 行为
SADD 将给定元素添加到集合
SMEMBERS 返回集合包含的所有元素(如何集合很大会很慢,慎用)
SISMEMBER 检查给定元素是否存在于集合中
SREM 如果给定的元素存在于这个集合中,移除这个元素
Redis数据库 :《Redis实战》(Redis in Action)学习笔记 第一章 初识Redis_第3张图片

    1.2.4 Redis中的散列:

    Redis的散列可以存储多个键值对之间的映射,很像大部分语言中的Map。散列在很多方面像是一个微缩版的Redis,熟悉文档数据库的童鞋可以将散列看作文档数据库里面的文档,熟悉关系数据库的童鞋可以将散列看作是关系型数据库里面的行,因为散列、文档和行这三者都允许用户同时访问或者修改一个或多个域。不少字符串命令都有相应的散列版本,在这里先简单介绍一下散列的部分命令。

命令 行为
HSET 在散列里面关联起给定的键值对
HGET 获取制定散列键的值
HGETALL 获取散列包含的所有键值对
HDEL 如果给定键存在于散列里面,那么移除这个键
Redis数据库 :《Redis实战》(Redis in Action)学习笔记 第一章 初识Redis_第4张图片

    1.2.5 Redis中的有序集合:

    有序集合和散列一样,都用于存储键值对:有序集合的键被成为成员(member),每个成员都是各不相同的;而有序集合的值则被称为分值,分值必须为浮点数。有序集合是Redis里面唯一一个既可以根据成员访问元素,有可以根据分值以及分值的排列顺序来访问元素的结构。

命令 下行为
ZADD 将一个带有给定分值的成员添加到有序集合里面
ZRANGE 根据元素在有序排列中所处的位置,从有序集合里面获取多个元素
ZRANGEBYSCORE 获取有序集合在给定分值范围内的所有元素
ZREM 如果给定成员存在与有序集合,那么移除这个成员
Redis数据库 :《Redis实战》(Redis in Action)学习笔记 第一章 初识Redis_第5张图片

   

总结:

在安装好Redis后,启动Redis Server的操作(Ubuntu 16.04,Python 3.6):


运行redis-cli:


对于Redis的理解:

Redis是一个内存型数据库。一个使用关系型数据库的后台服务器,在每次接到请求以后就会去调用数据库请求,而数据库的数据存储在硬盘中,需要去硬盘中不断的查找符合条件的数据并加载到内存中来。而Redis的数据存储在内存中就可以省去从硬盘中查找的步骤,且数据在内存中的寻找是非常快的,这就使得Redis能够使后台服务器的响应速度有巨大的提升。



你可能感兴趣的:(数据库,后端,Redis)