redis分布式

memcache、redis原理对比

情到浓时终转凉″ 提交于 2019-11-29 08:06:13
一、问题: 数据库表数据量极大(千万条),要求让服务器更加快速地响应用户的需求。 二、解决方案: 1.通过高速服务器Cache缓存数据库数据 2.内存数据库 (这里仅从数据缓存方面考虑,当然,后期可以采用Hadoop+HBase+Hive等分布式存储分析平台) 三、主流解Cache和数据库对比: 上述技术基本上代表了当今在数据存储方面所有的实现方案,其中主要涉及到了普通关系型数据库(MySQL/PostgreSQL),NoSQL数据库(MongoDB),内存数据库(Redis),内存Cache(Memcached),我们现在需要的是对大数据表仍保持高效的查询速度,普通关系型数据库是无法满足的。而MongoDB其实只是一种非关系型数据库,其优势在于可以存储海量数据,具备强大的查询功能,因此不宜用于缓存数据的场景。 从以上各数据可知,对于我们产品最可行的技术方案有两种: 1.Memcached 内存Key-Value Cache 2.Redis 内存数据库 四、下面重点分析Memcached和Redis两种方案: 4.1 Memcached介绍 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度,现在已被LiveJournal、hatena、Facebook

redis总结及常用命令

血红的双手。 提交于 2019-11-29 05:53:04
1. 什么是redis redis是一个nosql(not only sql不仅仅只有sql)数据库.翻译成中文叫做非关系型型数据库. 关系型数据库:以二维表形式存储数据 非关系型数据库: 以键值对形式存储数据(key, value形式) 是一家意大利的创业公司出的,后来这家公司被VMware赞助. redis底层用C语句编写. redis是将数据存放到内存中,由于内容存取速度快所以redis被广泛应用在互联网项目中, redis优点:存取速度快,官方称读取会达到30万次每秒,写在10万次每秒,具体限制于硬件. 缺点:对持久化支持不够良好, 所以redis一般不作为数据的主数据库存储,一般配合传统的关系型数据库使用. 2. redis应用领域 分布式缓存 分布式session 论坛、评论首页或前几页 秒杀,抢购. 总之是用在数据访问量大,并发量高的情况下 3. 怎么用 redis主要就是使用命令来进行操作,java端在代码中可以使用Jedis来操作redis服务器 redis数据类型 字符串String 列表list redis中使用的是双向循环链表来实现的list,在redis中更像栈 散列Hash 一般应用于将redis作为分布式缓存,存储数据库中的数据对象 集合set set中数据是无序的并且不允许重复 有序集合zset redis会根据分数自动排序

Redis简介

半腔热情 提交于 2019-11-29 05:40:45
1. 使用Redis有哪些好处? (1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1) (2) 支持丰富数据类型,支持string,list,set,sorted set,hash (3) 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行 (4) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除 2. redis相比memcached有哪些优势? (1) memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型 (2) redis的速度比memcached快很多 (3) redis可以持久化其数据 3. redis常见性能问题和解决方案: (1) Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件 (2) 如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次 (3) 为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内 (4) 尽量避免在压力很大的主库上增加从库 (5) 主从复制不要用图状结构,用单向链表结构更为稳定,即:Master <- Slave1 <- Slave2 <- Slave3… 这样的结构方便解决单点故障问题,实现Slave对Master的替换

Redis的高级特性一览

橙三吉。 提交于 2019-11-29 05:35:40
更多内容,欢迎关注微信公众号:全菜工程师小辉。公众号回复关键词,领取免费学习资料。 应用场景 缓存系统:用于缓解数据库的高并发压力 计数器:使用Redis原子操作,用于社交网络的转发数,评论数,粉丝数,关注数等 排行榜:使用zset数据结构,进行排行榜计算 实时系统:使用Redis位图的功能实现布隆过滤器,进而实现垃圾邮件处理系统 消息队列:使用list数据结构,消息发布者push数据,多个消息订阅者通过阻塞线程pop数据,以此提供简单的消息队列能力 之所以说简单,是因为Redis官方不提供可靠消费/发布的机制;需要自行实现故障转移、队列持久化、队列监控和流量控制等mq具备的功能; 高级功能 慢查询 慢查询只记录Redis在处理存储的时间计数(图中的3步骤),并不包含网络通信时间和排队时间,所以客户端超时分析时要综合每个因素。 注意: 慢查询保存数量参数不要设置过小,同时最好能定期持久化慢查询记录,方便历史问题排查。 pipline pipline用于异步处理大量Redis请求。 注意: 大量任务需要划分出多个pipline进行操作(否则,网络和等待时间都承受压力)。 pipline每次只能作用在一个Redis节点上。 M操作(mget,mset类似的指令)相比pipline,前者是原子操作,后者并不是。Redis会把一个携带很多命令的pipeline拆分成几个子命令。 发布订阅

redis学习日记(第二天)

萝らか妹 提交于 2019-11-29 05:03:17
传统数据库与Nosql nosql的聚合模型:K-v,Bson,列族,图形 k-v:redis 文档型数据库:MonDB 列存储数据库:HBase,分部署文件系统 图关系数据库:社交网络,推荐系统 数据库的事务管理:ACID A:原子性(Atomicity) C:一致性(Consistency) I:独立性(Isolation) D:持久性(Darability) 分布式系统的三大特性: (Consistency)强一致性:保持数据的同步更新,即发布一条信息,同时用户也能马上看到发布的消息 (Availability)可用性:在多并发情形下,让用户能正常使用软件,系统不会崩溃 (Partition tolerance)分区容错性:在多个地区的用户请求下,保持每个地区的访问时对应的当下地区的服务器, 但是在Nosql的分布式系统下最多只能满足其中两个,其中分区容错性必须要实现——AP 大多数网站实现:可用性+分区容错性,对于实时性的要求不算高 BASE:为了解决关系型数据库强一致性引起的问题而引起的可用性降低提出的解决方案 基本可用(Basically Available) 软状态(Soft State) 最终一致(Eventually consistent) 分布式与集群的区别 分布式:不同服务器上部署不同的工程,通过Rpc远程通信 集群:不同服务器上部署相同服务模块

Springboot2.0下通过redis实现支持分布式的mybatis二级缓存

北城余情 提交于 2019-11-29 04:41:22
最近领导要求在项目中加下mybatis二级缓存,由于当前项目是分布式微服务,且是多节点部署的,而司内缓存中间件使用的redis,那很自然的要用redis做分布式缓存支持,避免出现直接使用原生mybatis二级缓存造成缓存数据不一致等问题。下面会对基于redis的mybatis二级缓存实现做下简单介绍,涉及一些概念,同时一些坑点做下整理。 1. 一级缓存 一级缓存是在SqlSession级别的缓存,MyBatis默认开启一级缓存。即同一个SqlSession对象,相同参数多次调用同一个Mapper方法时,只执行一次SQL,第一次查询后数据被缓存起来,之后的调用在没有缓存刷新、超时情况下都是直接先从缓存中取数据,不再去查数据库。不同SqlSession间,缓存是隔离的。 此外实际项目开发中,一级缓存存在很大的局限性,我们的项目一般是Spring+Mybatis集成开发,而Spring的事务管理在逻辑层,每个service对应不同的SqlSession(这是通过MapperScannerConfigurer类创建SqlSession自动注入到service中的), 每次查询之后都会关闭SqlSession,缓存数据就会被清空。所以Spring整合之后,如果没有事务,一级缓存是没有实际意义的。 2. 二级缓存 二级缓存是Mapper级别的缓存,Mybatis默认不开启二级缓存

redis 小弟入门

我的梦境 提交于 2019-11-29 04:20:54
概念背景: 传统数据酷MySQL,采用遵循 ACID规则 事务的原子性(Atomicity) :是指一个事务要么全部执行,要么不执行,也就是说一个事务不可能只执行了一半就停止。 事务的一致性(Consistency) :是指事务的运行并不改变数据库中数据的一致性。 独立性(Isolation) :事务的独立性也有称作隔离性,是指两个以上的事务不会出现交错执行的状态。 持久性(Durability) :事务的持久性是指事务执行成功以后,该事务对数据库所作的更改便是持久的保存在数据库之中,不会无缘无故回滚。 Redis 非关系型数据库,遵循的是 CAP原理 、 Availability(可用性)、Partition tolerance(分区容错性) 一致性(C):在 分布式系统 中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本) 可用性(A):在 集群中 一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备 高可用性 ) 分区容错性(P):以 实际效果 而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。 Redis 类型不多,也很奇葩,也很好用 String set key value string类型是二进制安全的

【重要】Nginx模块Lua-Nginx-Module学习笔记(三)Nginx + Lua + Redis 已安装成功(非openresty 方式安装)

主宰稳场 提交于 2019-11-29 03:36:33
源码地址:https://github.com/Tinywan/Lua-Nginx-Redis 一、 目标    使用Redis做分布式缓存;使用lua API来访问redis缓存;使用nginx向客户端提供服务,ngx_lua将lua嵌入到nginx,让nginx执行lua脚本,高并发,非阻塞的处理各种请求。url请求nginx服务器,然后lua查询redis,返回json数据。 二、准备工作   系统环境:Ubuntu 14.0 (64位)   Redis服务安装:apt-get install redis-server   安装Git:apt-get install git   安装Lua: # apt-get install lua5.1 # apt-get install liblua5.1-dev # apt-get install liblua5.1-socket2 # apt-get install -y lua5.1 liblua5.1-0 liblua5.1-0-dev 补充:安装模块: stream-lua-nginx-module 出现的错误信息: make[1]: *** [objs/addon/src/ngx_stream_lua_socket_tcp.o] Error 1 解决办法: apt-get install lua-socket 三、下载库 1

redis 深入学习笔记

元气小坏坏 提交于 2019-11-29 03:30:47
速度快-内存 多种数据结构 bitMaps 比如布隆过滤器, HyperLogLog 精确性不够, 常用配置 默认不是守护进程, 实际一般都是 设置为 守护进程 daemonize yes 通用命令 keys 命令一般在生产环境不使用,生产环境key 太多了,比较慢,而且会阻塞其他命令。最后不用,否则容易出现影响使用的问题。 keys* 可以在 从节点使用或者 scan dbsize 可以在生产环境随便使用 redis 是单线程的 字符串 key 和value 都是 字节存储的,一般都是 限制在 100K左右大小 中文里面一个 文字就是 2个长度 hash 小心使用 hgetall 特别是 内容特别多时候 list 有序,可以重复,左右两边插入与弹出 灵活运行实现不同功能 set 无序,无重复,集合间操作(交集,并级等) smembers 无序,小心使用,内容太多了就不好 spop从集合弹出,且弹出一个。 srandmember 不会破坏集合 sadd 可以用于 标签 业务需求, sadd + sinter 可以用于 社交类 业务 zset 有序集合 Jedis jedis 连接池配置 建议false 是因为 特别在高并发下,也影响性能,而且 可以通过 redis 配置来达到 连接基本永远活性 合适maxTotal 比较难确定 常见问题 4. 网络或者DNS异常等原因 redis

Redis提供的持久化机制(RDB和AOF)

 ̄綄美尐妖づ 提交于 2019-11-29 02:10:47
Redis提供的持久化机制     Redis是一种面向“key-value”类型数据的分布式NoSQL数据库系统,具有高性能、持久存储、适应高并发应用场景等优势。它虽然起步较晚,但发展却十分迅速。 近日,Redis的作者在博客中写到, 他看到的所有针对Redis的讨论中,对Redis持久化的误解是最大的 ,于是他写了一篇长文来对Redis的持久化进行了系统性的论述。 文章主要包含三个方面: Redis持久化是如何工作的、这一性能是否可靠以及和其它类型的数据库比较 。以下为文章内容: 一、Redis持久化是如何工作的?   什么是持久化?简单来讲就是将数据放到断电后数据不会丢失的设备中,也就是我们通常理解的硬盘上。 首先我们来看一下数据库在进行写操作时到底做了哪些事,主要有下面五个过程 : 客户端向服务端发送写操作(数据在客户端的内存中)。 数据库服务端接收到写请求的数据(数据在服务端的内存中)。 服务端调用write这个系统调用,将数据往磁盘上写(数据在系统内存的缓冲区中)。 操作系统将缓冲区中的数据转移到磁盘控制器上(数据在磁盘缓存中)。 磁盘控制器将数据写到磁盘的物理介质中(数据真正落到磁盘上)。 故障分析 写操作大致有上面5个流程, 下面我们结合上面的5个流程看一下各种级别的故障 : 当数据库系统故障时,这时候系统内核还是完好的。那么此时只要我们执行完了第3步