Redis数据库初步学习1 - redis基础

NOSQL和关系型数据库,什么是Redis

  • redis 基础 - 初步学习1
    • 内容来自 黑马程序员 教程
    • 1. 概念
      • 1.1 什么是NoSQL
        • 1.1.1 NoSQL 和 关系型数据库比较
        • 1.1.2 非关系型数据库的优势
        • 1.1.3 关系型数据库的优势
        • 1.1.4 总结
        • 1.1.5 一张图看懂关系型数据库和 NoSQL数据:
      • 1.2 主流的NoSQL产品
      • 1.3 什么是radis
    • 2. 下载安装
    • 3. 命令操作
      • 3.1 redis 的数据结构:
      • 3.2 命令操作 - 教程 https://www.redis.net.cn/tutorial/3501.html
      • 3.3 通用命令
    • 4. 持久化操作
      • 4.1 持久化的含义
      • 4.2 redis 持久化机制
        • 4.2.1 RDB
        • 4.2.2 AOF

redis 基础 - 初步学习1

内容来自 黑马程序员 教程

1. 概念

​ redis 是一款高性能的 NOSQL 系列的非关系型数据库。NoSQL = Not only SQL

1.1 什么是NoSQL

​ NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS(社交网络)类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。

1.1.1 NoSQL 和 关系型数据库比较

优点:

  1. 成本:NoSql数据库简单易部署,基本都是开源软件,不需要像 oracle 那样花费大量成本购买使用,相比较关系型数据库价格便宜。
  2. 查询速度:NoSQL 数据库将数据存储与缓存之中,关系型数据库将数据存储于硬盘之中,NoSQL 数据库的查询速度自然更快。
  3. 存储格式:NoSQL 的存储格式是 key,value 形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而关系型数据库只支持基础类型。
  4. 扩展性:关系型数据库有类似 join 这样的多表查询机制的限制导致扩展很艰难。

缺点

  1. 维护的工具和资料有限,因为 NoSQL 是属于新的技术,不能和关系型数据 10 几年的技术相比。
  2. 不提供对 sql 的支持,如果不支持 sql 这样的工业标准,将产生一定的学习和使用成本。比如如果我们学习了 redis,然后再去学习 hbase, 会发现两者之间天差地别。(我的妈耶。。)而关系型数据并不会这样,不同的数据库之间只会有细微的差别。
  3. 不提供关系型数据库对事务的处理能力。(有些支持,有些不支持。比如 redis 支持事务处理)

1.1.2 非关系型数据库的优势

  1. 性能:NoSQL 是基于键值对的,可以想象成表中的逐渐和值的对应关系,而且不需要经过 SQL 层的解析,所以性能非常高。
  2. 可扩展性:可扩展性也同样是因为基于键值对,数据之前没有耦合性,所以非常容易水平扩展

1.1.3 关系型数据库的优势

  1. 复杂查询可以用 SQL 语句方便的在一个表以及多个表之间做非常复杂的数据查询。
  2. 事务支持使得对于安全性很高的数据访问要求得以实现。对于这两个数据库,对方的优势就是自己的劣势,反之亦然。

1.1.4 总结

​ 关系型数据与 NoSQL 数据并非对立而是互补的关系,即通常情况下使用关系型数据,在适合使用 NoSQL 的时候使用 NoSQL 数据库,让 NoSQL 数据库对关系型数据库的不足进行弥补。

​ 一般将数据存储在关系型数据中,在 NoSQL 数据库中去备份存储关系型数据库的数据

1.1.5 一张图看懂关系型数据库和 NoSQL数据:

Redis数据库初步学习1 - redis基础_第1张图片

1.2 主流的NoSQL产品

  • 键值(key-value)存储数据库
    • 相关产品:Tokyo Cabinet / Tyrant、Redis、Voldemort、Berkeley DB
    • 典型应用:内容缓存,主要用于处理大量数据的高访问负载。
    • 数据模型:一系列键值对
    • 优势:快速查询
    • 劣势:内存的数据缺少结构化
  • 列存储数据库
    • 相关产品:Cassandra,HBase,Riak
    • 典型应用:分布式的文件系统
    • 数据模型:以列簇式存储,将同一列数据村在一起
    • 优势:查找速度快,可扩展性强,更容易进行分布式扩展
    • 劣势:功能相对局限
  • 文档型数据库
    • 相关产品:CouchDB、MongoDB
    • 典型应用:Web应用(与 key-Value 类似,Value 是结构化的)
    • 数据模型:一系列键值对
    • 优势:数据结构要求不严格
    • 劣势:查询性能不高,而且缺乏统一的查询语法
  • 图形(Graph)数据库
    • 相关数据库:Neo4J、InfoGrid、Infinite Graph
    • 典型应用:社交网络
    • 数据模型:图结构
    • 优势:利用图结构相关算法。
    • 劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案。

1.3 什么是radis

​ redis是一个key-value存储系统。和Memcached类似,它支持存储的 value 类型相对更多,包括 string (字符串)、list (链表)、set (集合)、zset (sorted set --有序集合)和 hash(哈希类型)。这些数据类型都支持 push/pop、add/remove 及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis 支持各种不同方式的排序。与 memcached一样,为了保证效率,数据都是缓存在内存中。区别的是 redis 会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了 master-slave (主从)同步。

​ Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了 memcached 这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了 Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang 等客户端,使用很方便。

​ Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。

radis 的应用场景:

  1. 缓存(数据查询、短连接、新闻内容、商品内容等等)
  2. 聊天室的在线好友列表
  3. 任务队列。(秒杀,抢购等)
  4. 应用排行
  5. 网站访问统计
  6. 数据过期处理
  7. 分布式集群架构中的 session 分隔

2. 下载安装

​ 官网:https://redis.io/

​ 中文网:https://www.redis.net.cn/

​ 安装的话,由于 Redis 并没有微软版本,也就是只有源代码,需要自己去编译运行的。但是微软自己做了安装包(微软牛逼!),网址:https://github.com/microsoftarchive/redis/releases

Redis数据库初步学习1 - redis基础_第2张图片

​ 下载 3.2.100 中的 msi 就行了。

​ 安装完成之后,目录文件如下:

Redis数据库初步学习1 - redis基础_第3张图片

​ 其中:

  1. redis.windows.conf : 配置文件
  2. redis-cli.exe : redis 的客户端
  3. redis-server.exe : redis服务器端

3. 命令操作

3.1 redis 的数据结构:

  • redis存储的是:key、value格式的数据,其中 key 是字符串,value 有5种不同的数据结构。
    • value的数据结构:
      1. 字符串类型 string
      2. 哈希类型 hash (Map格式)
      3. 列表类型 list (LinkedList格式)
      4. 集合类型 set (HashSet格式, 不允许重复)
      5. 有序集合类型 sortedset (有点像 TreeMap,不允许重复+自动排序)
  • 一幅图解释

Redis数据库初步学习1 - redis基础_第4张图片

3.2 命令操作 - 教程 https://www.redis.net.cn/tutorial/3501.html

  • 字符串类型
    1. 存储:set key value
    2. 获取: get key
    3. 删除:del key
  • 哈希类型
    1. 存储:
      • hset key field value:存储一对 filed value
      • hmset key field1 “value1” field2 “value2”…:存储任意数量的 field value 对
    2. 获取:
      • hget key field : 获取指定 field 对应的值
      • hgetall key:获取所有的 field 和 value
    3. 删除:hdel key field
  • 列表类型 - 简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)
    1. 添加:
      • lpush key value:将元素加入列表左边
      • rpush key value:将元素加入列表右边
    2. 获取:
      • lrange key start end : 范围获取
    3. 删除:
      • lpop:删除列表最左边的元素,并将元素返回
      • rpop:删除列表最右边的元素,并将元素返回
  • 集合类型
    1. 存储:sadd key value
    2. 获取:smembers key : 获取 set 集合中所有的元素
    3. 删除:srem key value:删除 set 结合中的某个元素
  • 有序集合类型:不允许元素重复,且保证元素有序
    1. 存储:zadd key score value : 按照分数,给 value 排序
    2. 获取:zrange key start end
    3. 删除:zrem key value

3.3 通用命令

  • keys * :查询所有键
  • type key : 获取键对应的 value 类型
  • del key: 删除指定的 key value

4. 持久化操作

4.1 持久化的含义

​ redis 是一个内存数据库,而内存的特点是数据是临时的,不能被持久化地写入。当 redis 服务器重启,数据会丢失。我们可以将 redis 的数据持久化保存到硬盘的文件中。

4.2 redis 持久化机制

4.2.1 RDB

​ 默认方式,不需要进行配置,默认就使用这种机制

​ 在一定的间隔时间中,检测 key 的变化情况,然后去持久化数据,默认情况下也是推荐的。对性能的影响较小。

​ 怎么使用?

  1. 编辑 redis.windows.conf 文件

    save 900 1:在15分钟之后,如果至少一个 键 被改变,就会持久化一次

    save 300 10:在5分钟之后,如果至少有10个键被改变,就持久化一次

    save 60 10000:在1分钟之后,如果至少有10000个键被改变,就持久化一次

  2. 重新启动 redis 服务器,并指定配置文件名称

4.2.2 AOF

​ 日志记录的方式,可以记录每一条命令的操作。可以每一次操作后,持久化数据

  1. 编辑 redis.windows.conf 文件

    appendonly no(关闭) – > appendonly yes(开启AOF)

    appendfsync always: 每隔一秒操作一次持久化

    appendfsync everysec : 每次操作进行一次持久化

    appendfsync no : 不进行持久化

  2. 重新启动 redis 服务器,并指定配置文件名称

你可能感兴趣的