Redis学习整理

1. 什么是NoSQL

  • NoSQL简介
    • NoSQL(Not Only SQL ),意即“不仅仅是SQL”,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。
    • NoSQL是为了解决高并发、高可用、高性能,大数据存储等一系列问题而产生的数据库解决方案!
      小常识:
      • 大数据时代的3V:海量(Volume)、多样(Variety)、实时(Velocity)
      • 互联网需求的3高:高并发、高可用、高性能
  • NoSQL数据库的分类
    nosql数据库分类

    最常用的NoSQL数据库有Redis、MongoDB、HBase等…

  • 根据不同的NoSQL数据库满足不同的需求场景:
    • Redis:用于缓存,读写速度极快(内存中,在做缓存时要注意,只有热点、高频的数据才放到Redis中;
    • HBase:离线分析,大数据;
    • MongoDB:适合文档化格式的存储及查询(JSON结构存储)
    • Neo4j:专注于社交网络、推荐系统,方便构建关系图谱(高级功能收费)
  • 有了NoSQL是否就不需要SQL了?
    • NoSQL数据库不能替代关系型数据库,只能作为关系型数据库的一个良好补充;
    • 经典的数据库应用组合是SQL + NoSQL(如:MySQL + Redis)
      • 由于大部分NoSQL数据库对事务支持相对较差,大量关键性的业务数据还是需要放到关系数据库存储
      • 由于缓存数据需要很高的查询性能,每次直接从内存中获取的速度是最快的,再加上缓存数据的格式往往都不一致,因此放到Redis中是最适合的

2. 认识Redis

  • Redis 是一个基于内存的高性能key-value数据库,在部分场合可以对关系数据库起到很好的补充作用,它提供了Java、Python,Ruby,Erlang,PHP等客户端,使用很方便。
    • Redis异常快,因为它是单进程、单线程、内存操作。
  • Redis是目前业界使用最广泛的内存数据存储。相比Memcached,Redis支持更丰富的数据结构,例如hash, list, set等,同时支持数据持久化。除此之外,Redis还提供一些类数据库的特性,比如事务,HA,主从库。可以说Redis兼具了缓存系统和数据库的一些特性,因此有着丰富的应用场景。
  • Redis支持的数据类型:String(字符串)、Hash(哈希类型)、List(链表)、Set(不重复集合)、Zset(Sorted Set-有序集合)及HyperLogLog(基数提取)等。
  • Redis的应用场景
    • 数据缓存(分类信息、数据列表、数据详情等等)
    • 任务队列(秒杀、抢购等等)
    • 分布式集群架构中的session分离
    • 数据过期处理(可以精确到毫秒)
    • 排行榜

3. Redis的数据类型

  • Redis是Key-Value数据库,这里所说的数据类型都指的是Value的类型,Key永远都是字符串;
  • Redis支持的数据类型:String(字符串)、hash(哈希类型 重点)、List(链表)、Set(不重复集合)、Zset(Sorted Set-有序集合)及HyperLogLog(基数提取)等。
  • 所有类型的操作命令参考:https://redis.io/commands、http://doc.redisfans.com/。

4. Redis事务

  • 定义
    Redis 事务可以一次执行多个命令,本质是一组命令的集合,一个事务中所有的命令将按顺序执行而不会被其他命令插入 。

  • 一个事务从开始到执行会经历以下三个阶段

    • 开始事务
    • 命令入队
    • 执行事务
  • 事务操作相关命令

    • MULTI 开启事务
      EXEC 执行事务
      DISCARD 取消事务

    • WATCH key [key …] 监听某个 key的值是否发生变化,如果发生变化,事务会中断
      利用WATCH可以很方便解决更新丢失的问题,达到数据一致性!

      扩展阅读,在关系型数据库中解决更新丢失问题:

      1. 悲观锁和乐观锁
      2. 在高并发的分布式环境下,巧用CAS解决数据一致性问题:https://mp.weixin.qq.com/s?__biz=MjM5ODYxMDA5OQ==&mid=400556481&idx=1&sn=42bc187b45e4e53aece4b8c1f43e8019&scene=0#rd
    • UNWATCH 取消 WATCH 命令对所有 key 的监视。

  • 注意:

    • Redis事务隔离性仍然存在,如果事务不提交,其它客户端操作是看不到相关记录
    • Redis事务不保证原子性, 在传统的关系型数据中,只要有任意一条指令失败,则整个事务都会被撤销回滚,而在Redis中,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做,也因此得出 Redis 事务的执行并不是原子性的!

5. Redis持久化

  • Redis是支持持久化的内存数据库,也就是说Redis需要经常将内存中的数据同步到硬盘来保证持久化。
  • Redis持久化存储支持两种方式:RDB(默认方式)和AOF。RDB一定时间去存储文件,AOF默认每秒去存储历史命令,官方建议两种方式同时使用。

5.1. RDB

  • 介绍
    RDB方式的持久化是通过快照完成的,当符合一定条件时,Redis会自动将内存中的所有数据执行快照操作并存储到硬盘上。
  • 修改redis.conf ,设置持久化快照的条件
  • RDB的持久化与恢复
    • 持久化过程
      当满足save的条件时,比如更改了1个key,900s后会将数据写入临时文件,持久化完成后将临时文件替换旧的dump.rdb。
    • 恢复过程
      自动的持久化数据存储到dump.rdb后。实际只要重启Redis服务即可完成(启动Redis的server时会从dump.rdb中先同步数据)。
  • RDB的优缺点
    • 优点
      使用单独子进程来进行持久化,主进程不会进行任何IO操作,保证了Redis的高性能
    • 缺点
      一旦Redis非法关闭,那么会丢失最后一次持久化之后的数据。
      • 如果数据不重要(比如:仅仅是做缓存,如果缓存丢失大不了重新查询),则不必要关心。
      • 如果不允许有数据的大量丢失,那么要使用AOF方式。

5.2. AOF

  • 介绍
    AOF(append-only file)是将执行过的指令记录下来,数据恢复时按照从前到后的顺序再将指令执行一遍,实现数据恢复。

  • 修改redis.conf,打开AOF持久化

    • 配置完成需要重启Redis,会发现在bin目录下多出一个appendonly.aof文件
    • 开启AOF后,RDB模式就会失效,且之前的数据会被清空,如果redis重启,则数据从AOF文件加载。
  • AOF的优缺点

    • 优点
      可以保持更高的数据完整性,如果设置追加file的时间是1s,若Redis发生故障,最多会丢失1s的数据。
    • 缺点
      AOF文件比RDB文件大,且恢复速度慢。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值