资讯专栏INFORMATION COLUMN

HotFrameLearning Redis_01_简介

sanyang / 955人阅读

摘要:收到后则会调用指令一个子进程来持久化存储的数据,在的持久化的这个短短期间内,的指令则存储到内存中。经过官网的测试性能结果达到的。

HotFrameLearning Redis_01_简介

-

一、大致介绍
1、介绍Redis之前,我有一堆的疑问,Redis是什么?有什么用?它能干什么?有什么特性?能解决我们日常的哪些问题?
   为什么要用Redis?Redis好在哪里?除了Redis外还有其他替代方案么?
2、对于还没了解过Redis的童鞋,可以带着这些疑问往下看,而对于了解过Redis的童鞋那就走过路过不要错过^_^。
3、另外目前讨论的版本也是比较新的版本3.x版本;
二、简单认识Redis 2.1 何为Redis?
   Redis 是一个开源的基于内存的数据结构化存储媒介,多用于数据库、缓存以及消息代理。
   再简言之,Redis 是一个基于内存的 key-value 数据库。
2.2 原滋原味解释
原文地址:https://redis.io/topics/introduction

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs and geospatial indexes with radius queries. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.

You can run atomic operations on these types, like appending to a string; incrementing the value in a hash; pushing an element to a list; computing set intersection, union and difference; or getting the member with highest ranking in a sorted set.

In order to achieve its outstanding performance, Redis works with an in-memory dataset. Depending on your use case, you can persist it either by dumping the dataset to disk every once in a while, or by appending each command to a log. Persistence can be optionally disabled, if you just need a feature-rich, networked, in-memory cache.

Redis also supports trivial-to-setup master-slave asynchronous replication, with very fast non-blocking first synchronization, auto-reconnection with partial resynchronization on net split.

Other features include:

Transactions
 - Pub/Sub
 - Lua scripting
 - Keys with a limited time-to-live
 - LRU eviction of keys
 - Automatic failover
You can use Redis from most programming languages out there.

Redis is written in ANSI C and works in most POSIX systems like Linux, *BSD, OS X without external dependencies. Linux and OS X are the two operating systems where Redis is developed and more tested, and we recommend using Linux for deploying. Redis may work in Solaris-derived systems like SmartOS, but the support is best effort. There is no official support for Windows builds, but Microsoft develops and maintains a Win-64 port of Redis.
三、Redis的一些特性 3.1 数据类型
   Redis支持多种数据结构,这也是它的亮点所在,除外Redis的单个Value最大限制为1GB,已经远远超过memcached的
1MB的大小限制。下面我们看看它有哪些数据类型,能干什么用,内部结构是怎么样的。

    • strings:字符串类型,最基本的数据类型,通常来存储基本的字段值;
    • hash:是一个string类型的Field和Value之间的映射表,通常用来存储一个对象中各个Key与Value信息的映射;
    • lists:元素都是string类型的双向链表,通常用来存储好友列表,粉丝列表,前十首热门歌曲,最新消息排行等;
    • set:是一个无序的string类型数据的集合,其内部用的是HashMap实现,只是Value都是空的而已,通常用来对数据
      做交集、并集、差集等操作,因此就有类似共同好友,共同兴趣等业务数据应运而生;
    • sortset:有序set,其内部仅仅只是在set基础上新增了一个排序score字段,通常用于具有排序功能的业务数据展示;
3.2 持久化
   Redis 提供了两种持久化方式,一个是RDB(Redis DataBase),另一个是AOF(Append Only File),至于说谁好谁差
呢?应该说各有所长,然而官网却建议我们两者结合使用,双保险嘛。   

    • RDB:就是在不同的时间点生成的快照文件并存储到硬盘上;
    • AOF:就是将redis的那些写指令记录下来,目的就是为了下次redis重启时可以快速执行这些指令恢复数据;
    
   不过既然用到Redis存储,个人建议如果大家没有什么特殊的持久化需求的话,完全不用理会这两种持久化的方式,直接
关闭即可,因为redis本来擅长的领域就是内存数据库,对于持久化存储方面不擅长。   
3.3 主从同步
   Redis 所谓的主从一方面可是一主有多从,但是另外一方面每个从节点也可以有多个从节点。而这样做的目的其实很简
单,一来是为了提升读的性能,二来也是为了去中心化增加数据冗余备份。一旦主节点挂了,从节点就得立马顶上去。
   
   然而主从之间的同步的思路也是挺简单的,都是slave主动向master发出sync指令,意思就是告诉master,slave需要同
步数据啦。master收到sync后则会调用bgsave指令fork一个子进程来持久化存储master的数据,在master的持久化的这个
短短期间内,master的write指令则存储到内存中。待master的子进程持久化完成后则将持久化的这个文件发送给slave节点,
待slave接收完成并将数据加载到slave内存中,然后master节点还会将持久化期间缓存的write指令再次发给slave节点。
3.4 发布订阅
   该发布订阅,和我们常用的MQ发送订阅的模式是一样的,支持订阅单个频道,也支持订阅多个频道,还支持类似正则表
达式一样的模式匹配。
3.5 事务
   Redis 也拥有自己的一套事务机制,只是这个所谓的事务机制没有关系型数据库那么强大,但是还是勉强够用,其实Redis
的事务,就是一组命令的集合,MULTI、EXEC、DISCARD 和 WATCH 是 Redis 事务相关的命令。既然是一组命令的执行,那么
Redis给了我们什么样的保证呢?来保证执行不被其他命令打断或篡改呢?

    • 保证一:事务是一个多带带的隔离操作,所有命令被序列号有序执行;
    • 保证二:事务是一个原子操作,要么全部执行,要么全部不执行;

   然而在实际应用中总是那么差强人意,事务中如果是因为语法错误的话,则是不会提交事务,但是如果是运行时错误的
话,那就完蛋了,所有命令都会被执行,没有回滚机制,难道就没有解救措施了么,这个还真没有,运行时错误是编程时
需要杜绝的,这样的话其实也不存在需要什么回滚操作,一切顺其自然一气呵成。

   当然Redis还提供一个WATCH命令,来防止EXEC执行后发现值被篡改的话,则EXEC也照样返回失败处理;
3.6 Lua脚本
    Lua脚本功能是Reids 2.6版本的最大亮点,通过内嵌对Lua环境的支持,解决了长久以来不能高效地处理CAS命令的缺点, 
并且可以通过组合使用多个命令, 轻松实现以前很难实现或者不能高效实现的模式。
3.7 回收策略
    回收策略,还有一个{{BANNED}}的辅助帮手,就是客户端每执行一个命令,都会检测内存是否超标,如果超标,果断淘汰。
    
    六种回收策略如下:
    • noeviction 不回收;
    • allkeys-lru 从所有键中删除最近最少使用的键;
    • volatile-lru 从设置了过期时间的键中删除最近最少使用的键;
    • allkeys-random 从所有键中随机删除;
    • volatile-random 从设置了过期时间的键中随机删除;
    • volatile-ttl 从设置了过期时间的键中选择存活时间最短的键删除;
3.8 线程模型
    Redis 之所以有着飞一样的读写速度,这还得得益于它的单进程单线程模样的线程模型。经过Redis官网的测试性能结
果达到10W+的QPS。

    优秀的线程模型不但简化了代码逻辑,而且也不用考虑并发,也不用考虑各种锁的问题,更不存在多线程切换消耗CPU
的问题了,一切的一切,就是单线程挨个挨个执行。

    但是这种线程模型架构也带来一定的问题,牺牲了多核CPU性能,视多核CPU如无物,简直暴殄天物,反过来讲,目前
得到大家的方响,也没说redis十分慢,若如果真的遇到了redis十分慢的话,那很有可能是开发者的姿势不对,说不定又
在哪里进行了耗时的操作。
四、Redis优缺点 4.1 优点
    • 速度快,10W+的QPS,而且数据结构类似HashMap查询复杂度低;
    • 数据结构相对比较丰富,而且存储的Value也相对足够大;
    • 支持事务,而且还支持Lua脚本进行CAS操作;
    • 主从复制,支持读写分离,而且还支持RDB与AOF两种持久化方式;
4.2 缺点
    • 不能充分利用多核CPU的硬件优势;
    • 多主多从模式中,如果某一区域独立的主从同时挂掉且造成哈希槽的部分不可用,那么整个集群将会导致不可用;
    • 网络波动会造成主从之间会进行全量数据复制,如果快照文件过大,则会给内存带来非常大的压力;
    • 主从复制如果不在同一局域网,则会给主从复制的性能带来很大的损伤;
4.3 对比memcached
    • 数据类型:Redis不仅支持简单的k/v类型,还支持list,set.zset,hash等数据结构,但memcached支持图片视频缓存;
    • 存储方式:Redis在物理内存用完时还能将很少用的Value进行磁盘存储,有AOF与RDB两种持久化存储方式;
    • 主从模式:Redis支持一主多从,也可以支持多主多从,但memcached利用magent适用于一主多从;
    • 灾难恢复:Redis可以通过从AOF或RDB方式恢复数据,而memcached则不可恢复;
    • 数据大小:Redis的Value最大能支撑1G大小,而memcached最大支撑只有1M;
    • 内存分配:Redis会浪费一定时间去分配内存空间,而memcached则事先就分配好了一定的Page、Slab、Chunk空间;
    • 等等还有很多,就不一一列举了,想了解的更多跟详细,大家可以自行约会度娘问个究竟。
五、下载地址

https://gitee.com/ylimhhmily/HotFrameLearning.git

HotFrameLearning交流QQ群: 235322432

HotFrameLearning交流微信群: 微信沟通群二维码图片链接

欢迎关注,您的肯定是对我最大的支持!!!

-
<上一篇        首页        下一篇>

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/36723.html

相关文章

  • HotFrameLearning Redis_01_简介

    摘要:收到后则会调用指令一个子进程来持久化存储的数据,在的持久化的这个短短期间内,的指令则存储到内存中。经过官网的测试性能结果达到的。 HotFrameLearning Redis_01_简介 - 一、大致介绍 1、介绍Redis之前,我有一堆的疑问,Redis是什么?有什么用?它能干什么?有什么特性?能解决我们日常的哪些问题? 为什么要用Redis?Redis好在哪里?除了Redis...

    focusj 评论0 收藏0
  • HotFrameLearning 热门框架学习(目录)

    摘要:热门框架学习目录项目介绍专辑栏目一简介环境安装配置客户端连接常用命令集群搭建分布式锁二简介环境安装配置基本特性启动过程分析选举过程主从数据同步过程分析集群搭建分布式锁三简介环境安装配置基本特性基本概念和模型收发消息案例架构初识收发消息原 HotFrameLearning 热门框架学习(目录) - I、项目介绍 - II、专辑栏目 一、Redis Redis 简介 Redis 环境安装...

    lakeside 评论0 收藏0
  • HotFrameLearning 热门框架学习(目录)

    摘要:热门框架学习目录项目介绍专辑栏目一简介环境安装配置客户端连接常用命令集群搭建分布式锁二简介环境安装配置基本特性启动过程分析选举过程主从数据同步过程分析集群搭建分布式锁三简介环境安装配置基本特性基本概念和模型收发消息案例架构初识收发消息原 HotFrameLearning 热门框架学习(目录) - I、项目介绍 - II、专辑栏目 一、Redis Redis 简介 Redis 环境安装...

    lolomaco 评论0 收藏0
  • HotFrameLearning 热门框架学习(前言)

    摘要:热门框架学习前言一初衷知识是共享的,知识是大家的,本人也只是尽人事,帮助能帮助的人,将知识取之于民,用之于民。但游戏规则是需要服务于游戏服务于大众的,脱离了这些,游戏规则仅仅只是一堆文字描述而已。 HotFrameLearning 热门框架学习(前言) - 一、初衷 知识是共享的,知识是大家的,本人也只是尽人事,帮助能帮助的人,将知识取之于民,用之于民。 原本...

    lmxdawn 评论0 收藏0
  • HotFrameLearning 热门框架学习(前言)

    摘要:热门框架学习前言一初衷知识是共享的,知识是大家的,本人也只是尽人事,帮助能帮助的人,将知识取之于民,用之于民。但游戏规则是需要服务于游戏服务于大众的,脱离了这些,游戏规则仅仅只是一堆文字描述而已。 HotFrameLearning 热门框架学习(前言) - 一、初衷 知识是共享的,知识是大家的,本人也只是尽人事,帮助能帮助的人,将知识取之于民,用之于民。 原本...

    mykurisu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<