redis分布式

Redis系列-第一篇Redis介绍

三世轮回 提交于 2020-01-13 11:30:05
1.Redis介绍 1.1什么Redis Redis是用C语言开发的一个开源的高性能键值对(key-value)内存数据库。 它提供五种数据类型来存储值:字符串类型、散列类型、列表类型、集合类型、有序集合类型 它是一种NoSQL数据库。 1.2 什么是NoSQL NoSQL,即Not-Only SQL(不仅仅是SQL),泛指非关系型的数据库。 什么是关系型数据库?数据结构是一种有行有列的数据库 NoSQL数据库是为了解决高并发、高可用、高可扩展、大数据存储问题而产生的数据库解决方案。 NoSQL可以作为关系型数据库的良好补充,但是不能替代关系型数据库。 1.3NoSQL数据库分类 键值(Key-Value)存储数据库 相关产品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB 典型应用: 内容缓存,主要用于处理大量数据的高访问负载。 数据模型: 一系列键值对 优势: 快速查询 劣势: 存储的数据缺少结构化 列存储数据库 相关产品:Cassandra, HBase, Riak 典型应用:分布式的文件系统 数据模型:以列簇式存储,将同一列数据存在一起 优势:查找速度快,可扩展性强,更容易进行分布式扩展 劣势:功能相对局限 文档型数据库 相关产品:CouchDB、MongoDB 典型应用:Web应用(与Key-Value类似

Java开发连Redis都不会还想年后跳槽?先把Redis的知识点吃透再说

大兔子大兔子 提交于 2020-01-13 03:23:37
写在前面 Redis 是如今互联网技术架构中,使用最广泛的缓存。支持 复杂的数据结构 ,支持 持久化 ,支持 主从集群 ,支持 高可用 ,支持 较大的value存储 ... 同时, Redis 也是中高级后端工程师技术面试中,面试官最喜欢问的问题之一。特别是那些优秀的、竞争激烈的大型互联网公司(比如 Twitter、新浪微博、阿里云、腾讯云、淘宝、知乎等),通常要求面试者不仅仅掌握 Redis 基础使用,更要求深层理解 Redis 内部实现的细节原理。毫不夸张地说,能把 Redis 的知识点全部吃透,你的半只脚就已经踏进心仪大公司的技术研发部。 然而,绝大部分开发者只会拿 Redis 做数据缓存,使用最简单的 get/set 方法,除此之外几乎一片茫然,对 Redis 内部实现的细节原理知之甚少。例如: 有同学知道 Redis 的分布式锁,但完全不清楚其内部实现机制 有同学知道 Redis 是单线程结构,但完全不理解 Redis 缘何单线程还可以支持高并发 有同学知道 Redis 支持主从,但完全不晓得内部的实现机制 于是,一位有着十年经验的互联网分布式高并发技术老兵,梳理自己多年 Redis 实践经验,写了这本书【Redis深度历险:核心原理与应用实战】,以帮助更多工程师更快,更深入的了解 Redis 。 作者在掌阅维护着上千个 Redis 实例的集群,他在 Redis 持久化

redis学习笔记

最后都变了- 提交于 2020-01-12 22:33:43
安装 osx brew install redis brew services start redis redis-cli #进去cli客户端 Centos wget http://download.redis.io/releases/redis-5.0.2.tar.gz tar zxf redis-5.0.2.tar.gz make PREFIX=/usr/local/redis install ln -s /usr/local/redis/bin/redis-cli /usr/local/bin/redis-cli # 建立软连接 解决错误 make cd src && make all make[1]: Entering directory `/usr/local/redis-5.0.2/src' CC adlist.o In file included from adlist.c:34:0: zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory #include <jemalloc/jemalloc.h> ^ compilation terminated. make[1]: *** [adlist.o] Error 1 make[1]: Leaving directory `

Redis面试题(含答案):哨兵+复制+事务+集群+持久化等

二次信任 提交于 2020-01-12 04:48:21
Redis主要有哪些功能? 哨兵(Sentinel)和复制(Replication) Redis服务器毫无征兆的罢工是个麻烦事,如何保证备份的机器是原始服务器的完整备份呢?这时候就需要哨兵和复制。 Sentinel可以管理多个Redis服务器,它提供了监控,提醒以及自动的故障转移的功能,Replication则是负责让一个Redis服务器可以配备多个备份的服务器。 Redis也是利用这两个功能来保证Redis的高可用的 事务 很多情况下我们需要一次执行不止一个命令,而且需要其同时成功或者失败。redis对事务的支持也是源自于这部分需求,即支持一次性按顺序执行多个命令的能力,并保证其原子性。 LUA脚本 在事务的基础上,如果我们需要在服务端一次性的执行更复杂的操作(包含一些逻辑判断),则lua就可以排上用场了 持久化 redis的持久化指的是redis会把内存的中的数据写入到硬盘中,在redis重新启动的时候加载这些数据,从而最大限度的降低缓存丢失带来的影响。 集群(Cluster) 单台服务器资源的总是有上限的,CPU资源和IO资源我们可以通过主从复制,进行读写分离,把一部分CPU和IO的压力转移到从服务器上,这也有点类似mysql数据库的主从同步。 在Redis官方的分布式方案出来之前,有twemproxy和codis两种方案,这两个方案总体上来说都是依赖proxy来进行分布式的

redis 之RDB和AOF

坚强是说给别人听的谎言 提交于 2020-01-11 16:07:58
1、RDB和AOF两种持久化机制的介绍 RDB持久化机制,对redis中的数据执行周期性的持久化 AOF机制对每条写入命令作为日志,以append-only的模式写入一个日志文件中,在redis重启的时候,可以通过回放AOF日志中的写入指令来重新构建整个数据集 如果我们想要redis仅仅作为纯内存的缓存来用,那么可以禁止RDB和AOF所有的持久化机制 通过RDB或AOF,都可以将redis内存中的数据给持久化到磁盘上面来,然后可以将这些数据备份到别的地方去,比如说阿里云,云服务, 如果redis挂了,服务器上的内存和磁盘上的数据都丢了,可以从云服务上拷贝回来之前的数据,放到指定的目录中,然后重新启动redis,redis就会自动根据持久化数据文件中的数据,去恢复内存中的数据,继续对外提供服务,这样增加了高可用 如果同时使用RDB和AOF两种持久化机制,那么在redis重启的时候,会使用AOF来重新构建数据,因为AOF中的数据更加完整 2、RDB持久化机制的优点 (1)RDB会生成多个数据文件,每个数据文件都代表了某一个时刻中redis的数据,这种多个数据文件的方式,非常适合做冷备,可以将这种完整的数据文件发送到一些远程的安全存储上去,比如说Amazon的S3云服务上去,在国内可以是阿里云的ODPS分布式存储上,以预定好的备份策略来定期备份redis中的数据 (2

数据库和redis的一致性

守給你的承諾、 提交于 2020-01-11 15:06:15
之前的讲解,主要是在讲解redis如何支撑海量数据、高并发读写、高可用服务的架构 从这一讲开始,正式开始做业务系统的开发 商品详情页,缓存架构,90%是大量的业务(没有什么级数含量),10%最有级数含量的就是架构 1、上亿流量的商品详情页的多级缓存架构 采用三级缓存:nginx本地缓存+redis分布式缓存+tomcat 堆缓存的多级缓存架构           nginx 本地缓存 redis分布式缓存 tomcat web应用 堆缓存 实时性要求非常高的数据:库存(希望当库存变化的时候,尽可能更快将库存显示到页面上去,而不是等了很长时间,库存才反应到页面上去) 实时性要求不高的数据:商品的基本信息(名称、颜色、版本、规格参数、等等) 对于实时性较高的数据来说,采用MYSQL和redis缓存双写的方案,这样缓存的时效性最高 nginx+lua脚本 lua脚本作为代码,部署到nginx本地,做第一层的业务逻辑 2、多级缓存架构中每一层的意义 1)nginx本地缓存,扛的是热数据的高并发访问,大量的热数据的访问,即经常会访问的那些数据,就会被保留在nginx本地缓存内。 2)redis分布式缓存,扛的是很高的离散访问,支撑海量的数据,高并发的访问,高可用的服务 3)tomcat 堆缓存主要是扛redis大规模灾难的 3、最经典的缓存+数据库读写的模式:cache aside

Spring集成jedis简单实例

浪尽此生 提交于 2020-01-11 10:09:34
jedis是redis的java客户端,spring将redis连接池作为一个bean配置。 redis连接池分为两种,一种是“redis.clients.jedis.ShardedJedisPool”,这是基于hash算法的一种分布式集群redis客户端连接池。 另一种是“redis.clients.jedis.JedisPool”,这是单机环境适用的redis连接池。 maven导入相关包: <!-- redis依赖包 --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> ShardedJedisPool 是redis集群客户端的对象池,可以通过他来操作ShardedJedis,下面是ShardedJedisPool的xml配置,spring-jedis.xml: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context=

redis概念及安装部署

亡梦爱人 提交于 2020-01-11 01:07:05
第1章 Redis介绍 1.1 Redis是什么 Redis是一种基于键值对的NoSQL数据库,与很多键值对数据库不同,redis中的值可以有string,hash,list,set,zset,geo等多种数据结构和算法组成. 因为Redis会将所有的数据都放在内存中,所以他的读写性能非常惊人. 不仅如此,Redis还可以将内存中的数据利用快照和日志的形式保存到硬盘上 Redis还提供了键过期,发布订阅,事务,流水线等附加功能. 1.2 Redis重要特性 1.速度快 Redis所有的数据都存放在内存中 Redis使用C语言实现 Redis使用单线程架构 2.基于键值对的数据结构服务器 5中数据结构:字符串,哈希,列表,集合,有序集合 3.丰富的功能 提供了键过期功能,可以实现缓存 提供了发布订阅功能,可以实现消息系统 提供了pipeline功能,客户端可以将一批命令一次性传到Redis,减少了网络开销 4.简单稳定 源码很少,3.0版本以后5万行左右. 使用单线程模型法,是的Redis服务端处理模型变得简单. 不依赖操作系统的中的类库 5.客户端语言多 java,PHP,python,C,C++,Nodejs等 6.持久化 RDB和AOF 7.主从复制 8.高可用和分布式 哨兵 集群 1.3 Redis应用场景 1.缓存-键过期时间 缓存session会话 缓存用户信息

Spring 极速集成注解 redis 实践

隐身守侯 提交于 2020-01-10 13:58:00
Redis 做为基于内存的 Key-Value 数据库,用来做缓存服务器性价比相当高。 官方推出的面向 Java 的 Client Jedis,提供了很多接口和方法,可以让 Java 操作使用 Redis。 Spring 团队对 Jedis 进行了封装,独立为 spring-data-redis 项目,配合 spring 特性并集成 Jedis 的一些命令和方法。 本文重点描述集成过程,能让你迅速的通过 spring-data-redis 将 redis 集成到 spring 项目中,毕竟大家都忙的。 1. 添加项目依赖 <!--redis 缓存--> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.8.4.RELEASE</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> 2. 添加 spring-redis-context 配置 <?xml version="1.0"

redis测试题

[亡魂溺海] 提交于 2020-01-10 10:06:36
1、什么是Redis? Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。 Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,不像 memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能,比方说用他的List来做FIFO双向链表,实现一个轻量级的高性 能消息队列服务,用他的Set可以做高性能的tag系统等等。另外Redis也可以对存入的Key-Value设置expire时间,因此也可以被当作一 个功能加强版的memcached来用。 Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。 2、Redis相比memcached有哪些优势? (1) memcached所有的值均是简单的字符串,redis作为其替代者, 支持更为丰富的数据类型 (2) redis的速度比memcached快很多 (3) redis可以持久化其数据 3、Redis支持哪几种数据类型