Redis原理(一)】的更多相关文章

Redis原理与实践总结 本文主要对Redis的设计和实现原理做了一个介绍很总结,有些东西我也介绍的不是很详细准确,尽量在自己的理解范围内把一些知识点和关键性技术做一个描述.如有错误,还望见谅,欢迎指出. 这篇文章主要还是参考我之前的技术专栏总结而来的.欢迎查看: 重新学习Redis https://blog.csdn.net/column/details/21877.html 使用和基础数据结构(外观) redis的基本使用方式是建立在redis提供的数据结构上的. 字符串 REDIS_STR…
Redis原理篇 1.发布 订阅模式 1.1列表 的局限 ​ 前面我们说通过队列的 rpush 和 lpop 可以实现消息队列(队尾进队头出),但是消费者需要不停地调用 lpop 查看 List 中是否有等待处理的消息(比如写一个 while 循环).为了减少通信的消耗,可以 sleep()一段时间再消费,但是会有两个问题: 1.如果生产者生产消息的速度远大于消费者消费消息的速度,List 会占用大量的内存. 2.消息的实时性降低. list 还提供了一个阻塞的命令:blpop,没有任何元素可以…
目录 Redis 系列(04-2)Redis原理 - 内存回收 Redis 系列目录 1. 过期策略 1.1 定时过期(主动淘汰) 1.2 惰性过期(被动淘汰) 1.3 定期过期 2. 淘汰策略 2.1 最大内存设置 2.2 淘汰策略 2.4 LFU Redis 系列(04-2)Redis原理 - 内存回收 Redis 系列目录 相关文档推荐: Redis - LRU Reids 所有的数据都是存储在内存中的,在某些情况下需要对占用的内存空间进行回收.内存回收主要分为两类,一类是 key 过期,…
Redis原理详解 数据类型 Redis最为常用的数据类型主要有以下五种: String Hash List Set Sorted set 在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部内存管理中是如何描述这些不同数据类型的: 首先Redis内部使用一个redisObject对象来表示所有的key和value,redisObject最主要的信息如上图所示:type 代表一个value对象具体是何种数据类型,encoding是不同数据类型在redis内部的存储方式,比如:typ…
小张兴冲冲去面试,结果被面试官吊打! 小张: 面试官,你好.我是来参加面试的. 面试官: 你好,小张.我看了你的简历,熟练掌握Redis,那么我就随便问你几个Redis相关的问题吧.首先我的问题是,Redis是单线程还是多线程呢? 小张: Redis不同版本之间采用的线程模型是不一样的,在Redis4.0版本之前使用的是单线程模型,在4.0版本之后增加了多线程的支持. 在4.0之前虽然我们说Redis是单线程,也只是说它的网络I/O线程以及Set 和 Get操作是由一个线程完成的.但是Redis…
基本全是参考http://blog.csdn.net/a600423444/article/details/8944601     redis的使用大家都很熟悉,可能除了watch 锁,pipeline,订阅发布用的少点,不过网上也有大量的教材和例子,这里想聊聊redis中的一些原理.   1.redis 提供了两种持久化方式,一种是RDB,一种是AOF: RDB 是指在制定的时间间隔生成数据集的快照, AOF持久化记录服务器执行的所有写命令,并在服务器重启时,重新执行这些命令来恢复数据   2…
一:原理介绍 1:什么是redis?  Redis 是一个基于内存的高性能key-value数据库. 2:Reids的特点Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存.因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB.Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此…
一.Redis介绍 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工作由VMware主持. Redis能运行在大多数POSIX(Linux, *BSD, OS X 和Solaris等)系统上,官方没有支持Windows的版本.目前最新的版本是2.2.11,这个版本主要是修复了一个2.2.7版本中遍历方式优化带来的一个bug.和普通的Key-Value结构不同,Re…
1 什么是redis redis是nosql(也是个巨大的map) 单线程,但是可处理1秒10w的并发(数据都在内存中) 使用java对redis进行操作类似jdbc接口标准对mysql,有各类实现他的实现类,我们常用的是druid 其中对redis,我们通常用Jedis(也为我们提供了连接池JedisPool) 在redis中,key就是byte[](string) redis的数据结构(value): String,list,set,orderset,hash 2 redis的使用 先安装好…
读书笔记 <Redis开发与运维 > Redis使用场景 作为缓存层 减少对Mysql的压力 计数功能 比如使用原子命令incr 共享Session 设置过期时间 可以限制短信接口等调用 使用hash类型存储一些关系型数据库表中的数据 如用户信息 可以通过表名+id的方式 列表类型的数据 可以用来模拟队列或者栈 或者最新的新闻信息等 实现发布.订阅 命令执行过程 Redis使用了单线程架构和IO多路复用模型来实现高性能内存数据库服务 1.发送命令 2.排队 3.执行命令 4.返回命令执行结果…
基础和应用 1.Redis是远程调用技术的首字母缩写. 2.Redis可以用来做什么? Redis可以用来做缓存. 分布式锁 3.Redis的应用举例 记录帖子的点赞数.评论数和点击数.(使用HASH) 记录用户的帖子ID列表,便于快速显示用户的帖子列表.(ZSET) 记录帖子的标题.摘要.作者和封面信息,用于展示.(hash) 记录帖子的点怎用户ID和列表ID,用于显示和去重计数.(zset) 缓存近期热帖内容,减少数据库压力.(hash) 记录帖子相关文章ID,根据内容推荐相关帖子.(lis…
背景 redis功能强大,几乎已经成了现代大中型服务必备的缓存技术了. 除了十分给力的缓存功能,redis当做消息队列,数据库也有着不错的表现. 我们都知道,redis 有五种数据类型,string,list, hash, set 和zset. 其中 最基本的,同时也是最常用的 就是string了. 本文就来谈谈 redis内部,string 的实现原理:SDS(simple dynamic string). redis简单动态字符窜:SDS 在redis里,C语言的字符窜只用来放字符串字面量,…
过期时间设置 在Redis中提供了Expire命令设置一个键的过期时间,到期以后Redis会自动删除它.这个在我们实际使用过程中用得非常多.EXPIRE命令的使用方法为EXPIRE key seconds其中seconds 参数表示键的过期时间,单位为秒.EXPIRE 返回值为1表示设置成功,0表示设置失败或者键不存在如果向知道一个键还有多久时间被删除,可以使用TTL命令TTL key当键不存在时,TTL命令会返回-2,而对于没有给指定键设置过期时间的,通过TTL命令会返回-1如果向取消键的过期…
Redis是单线程程序.单线程的Redis为何还能这么快? 1.所有的数据都在内存中,所有的运算都是内存级别的运算(因此时间复杂度为O(n)的指令要谨慎使用) 2.单线程操作,避免了频繁的上下文切换 3.多路复用(非阻塞IO多路复用),NIO来处理客户端的并发连接 非阻塞IO,Non-block IO, NIO,非阻塞模式,使一个线程从某通道发送请求数据读取数据,如果目前没有数据可读时,就什么都 不会获取,而不是保持线程阻塞,直到有数据可读之前,该线程可以继续做别的事情,非阻塞写也是如此,能写多…
线程IO模型 Redis 是个单线程程序!(对外网络请求服务) 对于那些时间复杂度为 O(n) 级别的指令,一定要谨慎使用,一不小心就可能会导致 Redis 卡顿. 使用缓冲区,事件轮询 API(Linux操作系统提供的select,poll,epoll),非阻塞 IO(能读多少读多少,能写多少写多少,读方法和写方法都会通过返回值来告知程序实际读写了多少字节). 注:epoll无须遍历整个被侦听的描述符集(fd),只要遍历那些被内核IO事件异步唤醒的描述符集合,select与poll是全轮询.…
RESP协议 支持tcp协议.基本数据类型,比如数组,字符串等,也可支持其他的通信场景. 模拟redis接收传输过来的set数据 //ServerSocket监听6379端口模拟redis public static void jasonWriteSocketServer() { ServerSocket serverSocket = null; Socket socket = null; InputStream inputStream = null; try { serverSocket =…
一.问题:     数据库表数据量极大(千万条),要求让服务器更加快速地响应用户的需求.   二.解决方案:      1.通过高速服务器Cache缓存数据库数据      2.内存数据库     (这里仅从数据缓存方面考虑,当然,后期可以采用Hadoop+HBase+Hive等分布式存储分析平台) 三.主流解Cache和数据库对比:        上述技术基本上代表了当今在数据存储方面所有的实现方案,其中主要涉及到了普通关系型数据库(MySQL/PostgreSQL),NoSQL数据库(Mon…
运维 快照使用子进程是通过一个子进程完成, 它会比较的浪费资源的操作. 1.遍历整个内存,会增加系统负担. 2.io操作,降低redis性能. 一般都是主备,备用的进行持久化. Redis 4.0混合持久化 rdb快照,一般不用,数据丢失太严重.但是aof数据大的时候它的操作慢. Redis 4.0处理方法 将rdb和aof日志放在一起,aof不是全量,仅仅是在持久化这一段时间的增量. ​ 重启的时候先将rdb的数据读取出来,然后在将aof的全量文件重放. 管道 Redis中的管道是由客户端提供…
一.简介 存储系统背景 存储系统有三类: RDBMS oracle,dh2,postgresql,mysql,sql server NoSQL: KV NoSQL:redis,memcached 列式Column Family NoSQL: HBase,每一行每一字段可以保留n份,也是按照字段存储 文档Documentation NoSQL: MongoDB 图式Graph NoSQL: Neo4j NewSQL aerospike,foundationDB,rethinkDB... 1.什么是…
一.问题:     数据库表数据量极大(千万条),要求让服务器更加快速地响应用户的需求. 二.解决方案:      1.通过高速服务器Cache缓存数据库数据      2.内存数据库     (这里仅从数据缓存方面考虑,当然,后期可以采用Hadoop+HBase+Hive等分布式存储分析平台) 三.主流解Cache和数据库对比:        上述技术基本上代表了当今在数据存储方面所有的实现方案,其中主要涉及到了普通关系型数据库(MySQL/PostgreSQL),NoSQL数据库(Mongo…
1.Redis有哪些数据结构? 字符串String.字典Hash.列表List.集合Set.有序集合SortedSet. 高级数据结构 HyperLogLog:基数统计 GEO:地理位置 PUB/SUB:订阅发布 2.Redis是单进程单线程的吗? 是的.Redis是基于内存的单进程单线程KV数据库,基于C语言编写,不比单进程多线程的Memcached差.快的原因: (1)完全基于内存.(2)数据结构简单.对数据的操作也简单. (3)使用多路复用I/O模型(多个网络连接复用同一个线程).利用se…
哈希函数简介 哈希函数(hash function),又叫散列函数,哈希算法.散列函数把数据"压缩"成摘要,有的也叫"指纹",它使数据量变小且数据格式大小也固定. 哈希函数将数据打乱混合,重新创建一个散列值. 我们经常用到的对用户登录密码加密,比如 md5 算法,其实就是一个散列函数. value = hash_function(input_data),value 这个计算出来的值是大小固定的. md5("hashmd5") = 46BD4AA9…
intset介绍 intset 整数集合,当一个集合只有整数元素,且元素数量不多时,Redis 就会用整数集合作为集合键的底层实现. redis> SADD numbers 1 3 5 7 9 (integer 5) redis> OBJECT ENCODING numbers (inset) 为什么要用 intset? 集合键的另外一种实现是值为空的散列表(hash table),当元素比较少时,用hash table 存就比较浪费内存,而用 intset 就比较节约内存. 整数集合实现 i…
Redis cluster集群:原理及搭建 2018年03月19日 16:00:55 阅读数:6120 1.为什么使用redis? redis是一种典型的no-sql 即非关系数据库 像python的字典一样 存储key-value键值对 工作在memory中 所以很适合用来充当整个互联网架构中各级之间的cache 比如lvs的4层转发层 nginx的7层代理层 尤其是lnmp架构应用层如php-fpm或者是Tomcat到mysql之间 做一个cache 以减轻db的压力 因为有相当一部分的数据…
一.简介 1.国际惯例什么是puppet puppet是一种Linux.Unix.windows平台的集中配置管理系统,使用自有的puppet描述语言,可管理配置文件.用户.cron任务.软件包.系统服务等.puppet把这些系统实体称之为资源,puppet的设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系. puppet采用C/S星状的结构,所有的客户端和一个或几个服务器交互.每个客户端周期的(默认半个小时)向服务器发送请求,获得其最新的配置信息,保证和该配置信息同步.每个puppe…
redis集群: redis集群是高可用的一种体现,让整个redis圈更加稳定,不易出现宕机的情况, redis原理: redis3.0之前是不支持集群的,实现集群要自己去配置实现,很麻烦,在3.0之后就支持了 原理图:借助网上很火的一张图 这个图中,每一个蓝色的圈都代表着一个redis的服务器节点.它们任何两个节点之间都是相互连通的.客户端可以与任何一个节点相连接,然后就可以访问集群中的任何一个节点.对其进行存取和其他操作. 那么redis是怎么做到的呢?首先,在redis的每一个节点上,都有…
1 数据库事务处理 一个数据库事务通常包含对数据库进行读或写的一个操作序列 . 当一个事务被提交给了DBMS(数据库管理系统),则DBMS需要确保该事务中的所有操作都成功完成且其结果被永久保存在数据库中,如果事务中有的操作没有成功完成,则事务中的所有操作都需要被回滚. 1 为数据库提供了一个从失败恢复到正常状态的方法 , 同时提供了数据库在异常状态下仍然能保持一致性方法 2 当多个应用程序并发访问数据库时,可以在这些应用程序之间提供隔离方法,以防止彼此的操作互相干扰 事务具有的特性: 原子性(A…
Redis在Linux中的运用 一.Redis安装部署 下载: wget http://download.redis.io/releases/redis-3.2.12.tar.gz 解压: 上传至 /data tar xzf redis-3.2.12.tar.gz mv redis-3.2.12 redis 安装: cd redis make 启动: src/redis-server & 环境变量: vim /etc/profile export PATH=/data/redis/src:$PA…
memcache原理.内存模型: http://www.csdn.net/article/2016-03-16/2826609 redis原理: http://baike.baidu.com/link?url=2Q88GlO3_-JPZE_RhZ6j8UsSZ7WBYSY6J4voqEd7guvcE4oyrEeQfnAdp77tiFILBmGLy1MePFt5Lswdhl3gKa redis两种持久化方式及原理: http://zhengdl126.iteye.com/blog/2191834…
Hadoop 原理总结   一.Hadoop技术原理 Hdfs主要模块:NameNode.DataNode Yarn主要模块:ResourceManager.NodeManager 常用命令: 1)用hadoop fs 操作hdfs网盘,使用Uri的格式访问(URI格式:secheme://authority/path ,默认是hdfs://namenode:namenode port /parent path / child  , 简写为/parent path / child) 2)使用st…