NOSQL数据库-Redis简介

276 阅读5分钟

NOSQL的必要性:

  • High performance - 对数据库高并发读写的需求

  • Huge Storage - 对海量数据的高效率存储和访问的需求

  • High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求

NOSQL的特点:

  • 易扩展 :一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。

  • 大数据量,高性能:大数据量和高并发的读写快速

  • 灵活的数据模型:无需为存储的数据建立字段,灵活组建,降低增删字段的难度。

  • 高可用

什么是redis

  • redis是一种高级的key-value的存储系统,redis底层使用C语言编写, 存储数据是放在内存中, 速度非常快.

  • 支持五种数据类型

    • 字符串类型 string

    • 散列类型 hash

    • 列表类型 list

    • 集合类型 set

    • 有序集合类型 sortedset

  • 整个redis就相当于一个大的hashmap

    • key value

      value的格式分为string, hash, list, set, zset这五大类型

      如果value是hash类型, 那么value也相当于一个HashMap

    • testkey1 field value

      001 张三

      002 李四

    • testkey2

      001 青龙

      002 白虎

  • String:在Redis中字符串类型的Value最多可以容纳的数据长度是512M

    • set key value:给key赋特定的value,会覆盖

    • get key:只能用于获取String类型

    • del key:删除指定key

  • Hash:Redis中的Hash类型可以看成具有String Key和String Value的map容器,每一个Hash可以存储4294967295个键值对。key是相当于一个鱼缸,其中的field-value键值对,就是鱼。

    • hset key field value:例:hset myhash username haohao,此中key是myhash,username haohao是field和value的“键值对”,这两个联合组成key的value。

    • hget key field:返回指定的key中的field的值

    • hdel key field [field … ] :可以删除一个或多个字段,返回值是被删除的字段个数

    • hgetall key:可以获取该键的所有数据

  • 列表类型list:List类型是按照插入顺序排序的字符串链表。我们可以在其头部(left)和尾部(right)添加新的元素。在插入时,如果该键不存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。list中头部数据就是最后一个被存入的数据,相当于桶装薯片盒拆开最靠前的一块薯片。

    • lpush key values[value1 value2…] :在key头部插入

    • lpop key:弹出指定的key关联的链表中的第一个元素

    • rpop key:从尾部弹出元素

    • lrange key 索引 索引:便理数据,若是0 -1则遍历所有数据

  • 集合类型set:与List类型不同的是,

    Set集合中不允许出现重复的元素

    • sadd key values[value1、value2…]:向set中添加数据,如果该key的值已有则不会重复添加

    • smembers key:获取set中所有的成员

    • srem key members[member1、member2…]:删除set中指定的成员

  • 有序集合类型sortset:可以保证不重复的元素,仍然可以进行排序

    • zadd key values[value1、value2…]:向set中添加成员

    • zrem key value:移除set中的成员

    • zrange key 索引 索引:通过索引区间返回有序集合成指定区间内的成员

redis通用指令

  • keys pattern

    获取所有与pattern匹配的key,返回所有与该key匹配的keys。*表示任意一个或多个字符,?表示任意一个字符

  • del key1 key2…

    删除指定的key

  • exists key

    判断该key是否存在,1代表存在,0代表不存在

  • type key

    获取指定key的类型

redis主要作用:分布式缓存

redis持久化

  • Redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式,可单独可结合。

    • RDB持久化(默认支持,无需配置)

      该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘。

      优点:

      • Redis数据库将只包含一个文件,方便备份

      • 在Redis的服务进程中,在开始持久化时,会fork出子进程,进行持久化操作,这样就可以极大的避免服务进程执行IO操作了

      • 数据集很大,RDB的启动效率会更高

      缺点:

      • 若在时间间隔内宕机,则不能恢复。

      • 在持久化时,由于会分出子进程,数据量较大时可能会导致服务器停止几百毫秒,甚至是1秒钟。

    • AOF持久化

      该机制将以日志的形式记录服务器所处理的每一个写操作,在Redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的

      优点:

      • 更高的数据安全性

      • 每秒同步、每修改同步和不同步:每修改同步效率最低

      • 对日志文件的写入操作采用的是append模式,不会破坏之前的日志

      • 通过redis-check-aof工具来帮助我们解决数据一致性的问题

      • 日志过大,Redis可以自动启用rewrite机制。即Redis以append模式不断的将修改数据写入到老的磁盘文件中,同时Redis还会创建一个新的文件用于记录此期间有哪些修改命令被执行

      缺点:

      • AOF文件通常要大于RDB文件

mongodb和redis区别:

  • mongodb也是一个nosql数据库, 存储的数据是非结构化的, 但是mongdb和redis不能放在一起对比,因为完全没有可比性, 使用场景完全不同

  • redis: 主要使用内存, 有两种持久化方案, 速度非常快, 一般做分布式缓存使用

  • mongodb: 主要使用硬盘存储, 所以不会担心数据丢失, 速度介于redis和传统数据库之间.

  • 但是mongodb更擅长存储大文本数据, 以及一些非结构化数据, mongodb比redis的数据类型更加丰富. 例如: 存储小说网站的小说, 存储电商网站的评论等这些数据