redis分布式

Redis学习

空扰寡人 提交于 2020-03-30 22:15:34
学习自《Redis开发与运维(付磊)》 目录 简介 特性 使用原因 高性能 高并发 典型使用场景 缓存 排行榜 计数器 社交网络 消息队列 API使用 全局命令 支持的数据结构 String Hash List Set Sorted Set (ZSet) 简介 Redis是一种基于键值对(key-value)的NoSQL数据库。 特性 速度快 Redis的数据都存放在内存中,代码通过C语言实现,使用了单线程的IO多路复用机制,这些都使得redis的读写速度非常快。 基于键值对的数据结构服务器 Redis全称是remote dictionary server,即远程字典服务器。很多编程语言都提供了字典的功能,即基于键值对的方式存储数据。Redis中的值不仅可以是字符串,而且还可以是具体的数据结构,这样不仅能便于在许多应用场景的开发,同时也能够提高开发效率。 功能丰富 Redis提供的功能如下: 提供了键过期功能,可以用来实现缓存。 提供了发布订阅功能,可以用来实现消息系统。 支持Lua脚本功能,可以利用Lua创造出新的Redis命令。 提供了简单的事务功能,能在一定程度上保证事务特性。 提供了流水线功能,这样客户端能将一批命令一次性传到Redis,减少了网络的开销。 简单稳定 Redis的简单主要体现在三个方面: Redis的源码很少,早期版本的代码只有2万行左右,3

详解Session分布式共享(.NET CORE版)

感情迁移 提交于 2020-03-29 00:56:06
一、前言&回顾 在上篇文章 Session分布式共享 = Session + Redis + Nginx 中,好多同学留言问了我好多问题,其中印象深刻的有:nginx挂了怎么办?采用Redis的Session方案与微软Session方案相比,有什么优势呢?Cookie也可以取代Session的,采用Redis的Session方案优势在哪里?Nginx的iphash方式到底是什么?MachineKey有啥用?Net Core怎样实现? 那会儿看到大家的提问,我的回答也只是从应用层面回答,基本上的回答可以总结为:“别人这么做了,解决了这个问题,我用这个方法也解决了这个问题,原理请看链接。”很惭愧的说,那时的我并没有完全理解他真正的优势在哪里,只是凭着直觉和经验知道这样做比较好,知道当一部分东西不可控时候,将其解耦、可视化、集群就可以让一个系统更加健壮,但没有一个理论支撑。经过最近一段时间的查阅资料和阅读书籍,对此有了深刻理解,本文将从网站架构的可用性角度对这种Session共享进行分析和讲解,并用.net core再次实现这种架构模式。(Session分布式共享的net core版,因为工作没有机会应用到生产环境,过往经验就更别提了,所以只是研究性的,请大家注意,但园子里早有大牛写出了相关文章,本文结束会将相关文章贴出) 二、网站可用性--Session管理

《吐血整理》Redis 性能优化的 13 条军规!史上最全

六月ゝ 毕业季﹏ 提交于 2020-03-27 23:04:31
Redis 是基于单线程模型实现的,也就是 Redis 是使用一个线程来处理所有的客户端请求的,尽管 Redis 使用了非阻塞式 IO,并且对各种命令都做了优化(大部分命令操作时间复杂度都是 O(1)),但由于 Redis 是单线程执行的特点,因此它对性能的要求更加苛刻,本文我们将通过一些优化手段,让 Redis 更加高效的运行。 本文我们将使用以下手段,来提升 Redis 的运行速度: 缩短键值对的存储长度; 使用 lazy free(延迟删除)特性; 设置键值的过期时间; 禁用长耗时的查询命令; 使用 slowlog 优化耗时命令; 使用 Pipeline 批量操作数据; 避免大量数据同时失效; 客户端使用优化; 限制 Redis 内存大小; 使用物理机而非虚拟机安装 Redis 服务; 检查数据持久化策略; 禁用 THP 特性; 使用分布式架构来增加读写速度。 1.缩短键值对的存储长度 键值对的长度是和性能成反比的,比如我们来做一组写入数据的性能测试,执行结果如下: 从以上数据可以看出,在 key 不变的情况下,value 值越大操作效率越慢,因为 Redis 对于同一种数据类型会使用不同的内部编码进行存储,比如字符串的内部编码就有三种:int(整数编码)、raw(优化内存分配的字符串编码)、embstr(动态字符串编码),这是因为 Redis

《吐血整理》Redis 性能优化的 13 条军规!史上最全

烂漫一生 提交于 2020-03-27 23:04:20
Redis 是基于单线程模型实现的,也就是 Redis 是使用一个线程来处理所有的客户端请求的,尽管 Redis 使用了非阻塞式 IO,并且对各种命令都做了优化(大部分命令操作时间复杂度都是 O(1)),但由于 Redis 是单线程执行的特点,因此它对性能的要求更加苛刻,本文我们将通过一些优化手段,让 Redis 更加高效的运行。 本文我们将使用以下手段,来提升 Redis 的运行速度: 缩短键值对的存储长度; 使用 lazy free(延迟删除)特性; 设置键值的过期时间; 禁用长耗时的查询命令; 使用 slowlog 优化耗时命令; 使用 Pipeline 批量操作数据; 避免大量数据同时失效; 客户端使用优化; 限制 Redis 内存大小; 使用物理机而非虚拟机安装 Redis 服务; 检查数据持久化策略; 禁用 THP 特性; 使用分布式架构来增加读写速度。 1.缩短键值对的存储长度 键值对的长度是和性能成反比的,比如我们来做一组写入数据的性能测试,执行结果如下: 从以上数据可以看出,在 key 不变的情况下,value 值越大操作效率越慢,因为 Redis 对于同一种数据类型会使用不同的内部编码进行存储,比如字符串的内部编码就有三种:int(整数编码)、raw(优化内存分配的字符串编码)、embstr(动态字符串编码),这是因为 Redis

Redis存储方式及缓存淘汰策略

故事扮演 提交于 2020-03-27 20:44:54
一. Redis Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件 。 中文官方地址: http://www.redis.cn/ Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合) String (字符串) string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value 。 string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如 jpg 图片或者序列化的对象。 string 类型是 Redis 最基本的数据类型, string 类型的值最大能存储 512MB 。 Hash (哈希) Redis hash 是一个键值 (key=>value) 对集合。 Redis hash 是一个 string 类型的 field 和 value 的映射表, hash 特别适合用于存储对象。 List (列表) Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边) Set (集合) Redis 的 Set 是 string 类型的无序集合。 集合是通过哈希表实现的,所以添加,删除

Redis哨兵机制

我只是一个虾纸丫 提交于 2020-03-26 11:34:18
3 月,跳不动了?>>> 如果master异常,则会进行master-slave切换,将其中一个slave作为master,将之前的master作为slave。 哨兵作用 哨兵是Redis集群架构中非常重要的一个组件,主要功能如下: 集群监控:负责监控redis master和slave进程是否正常 消息通知:如果某个redis实例有故障,那么哨兵负责发送消息作为报警通知给管理员 故障转移:如果master节点挂掉了,会自动转移到slave节点上 配置中心:如果故障转移发生了,通知client客户端新的master地址 哨兵的核心知识 故障转移时,判断一个master节点是否宕机了,需要大部分的哨兵都同意才行,涉及到了分布式选举的问题 哨兵至少需要3个实例,来保证自己的健壮性 哨兵+redis主从的部署架构,是不会保证数据零丢失的,只能保证redis集群的高可用性 sdown和odown sdown和odown两种失败的状态 sdown是主观宕机,就一个哨兵如果自己觉得一个master宕机了,那么就是主观宕机 odown是客观宕机,如果quorum数量的哨兵都觉得一个master宕机了,那么就是客观宕机 sdown达成的条件:如果一个哨兵ping一个master,超过了is-master-down-after-milliseconds指定的毫秒数之后,就认为master宕机

JAVA架构师必备词汇和知识点

江枫思渺然 提交于 2020-03-26 08:00:50
01 高可用 负载均衡(负载均衡算法) 反向代理 服务隔离 服务限流 服务降级(自动优雅降级) 失效转移 超时重试(代理超时、容器超时、前端超时、中间件超时、数据库超时、NoSql超时) 回滚机制(上线回滚、数据库版本回滚、事务回滚) 02 高并发 应用缓存 HTTP 缓存 多级缓存 分布式缓存 连接池 异步并发 03 分布式事务 二阶段提交(强一致) 三阶段提交(强一致) 消息中间件(最终一致性),推荐阿里的 RocketMQ。 04 队列 任务队列 消息队列 请求队列 05扩容 单体垂直扩容 单体水平扩容 应用拆分 数据库拆分 数据库分库分表 数据异构 分布式任务 06 网络安全 SQL 注入 XSS 攻击 CSRF 攻击 拒绝服务(DoS,Denial of Service)攻击 架构师必备工具 01 操作系统 Linux(必备)、某软的 02 负载均衡 DNS、F5、LVS、Nginx、OpenResty、HAproxy、负载均衡SLB 03 分布式框架 Dubbo、Motan、Spring-Could 04 数据库中间件 DRDS 、Mycat、360 Atlas、Cobar (不维护了) 05 消息队列 RabbitMQ、ZeroMQ、Redis、ActiveMQ、Kafka 06 注册中心 Zookeeper、Redis 07 缓存 Redis、Oscache

Redis基础知识(二)

◇◆丶佛笑我妖孽 提交于 2020-03-25 23:01:57
Redis事务 redis中的事务是一组命令的集合,事务中的命令要么全部执行,要么都不执行,Redis 通过 MULTI 、DISCARD 、EXEC 和 WATCH 四个命令来实现事务功能,multi表示事物的开启,exec表示事物的执行,exec执行后返回事务执行的结果,discard表示放弃事务执行,清空事务队列中已有的所有命令并退出队列,watch用于监视给定的键,如果键被其他客户端修改,将不会执行事务。 127.0.0.1:6379> multi OK 127.0.0.1:6379> set key 1 QUEUED 127.0.0.1:6379> get key QUEUED 127.0.0.1:6379> exec 1) OK 2) "1" 127.0.0.1:6379> multi OK 127.0.0.1:6379> set key1 1 QUEUED 127.0.0.1:6379> discard OK 127.0.0.1:6379> get key1 (nil) 这里我在另一个客户端修改了被监视的key,导致在这个客户端事务没有执行 127.0.0.1:6379> set key 1 OK 127.0.0.1:6379> watch key OK 127.0.0.1:6379> multi OK 127.0.0.1:6379> incr key QUEUED

初识Redis

五迷三道 提交于 2020-03-24 15:48:00
初识Redis NoSQL是什么? 数据库: 用来存储数据的仓库 NoSQL: 不仅仅是SQL,是许多非关系型数据库的统称,但本质上还是存储数据的仓库 为什么需要NoSQL? 解决了高并发的读写问题 解决了海量数据的高效率存储和访问问题 实现了高可用性及高可扩展性 Redis是什么? 是由C语言开发的一款开源的、高性能的键值对存储数据库。 它支持多种键值数据类型。包括字符串、列表、集合、散列、有序集合等。它内置复制、Lua脚本、LRU收回、事务及不同级别磁盘持久化功能,同时通过Redis Sentinel实现高可用,Redis Cluster提供自动分区等相关功能。 Redis的特性 支持多种语言。c、java、c++等 丰富的数据类型 多种数据结构,如哈希、集合、位图(多用于活跃用户数等统计)、HyperLogLog(超小内存唯一值计数,由于只有12kb,因而有误差)、GEO(地理位置信息) 读写速度快,性能高。官方给出的数据是:Redis 能读的速度是 110 000 次/s,写的速度是 81 000 次/s。之所以有这么快的读/写速度,是因为这些数据都存储在内存中。 支持持久化。Redis 的持久化也就是备份数据,它每隔一段时间就将内存中的数据保存在磁盘中,在重启的时候会再次加载到内存中,从而实现数据持久化。Redis 的持久化方式是 RDB 和 AOF。 简单且功能强大

Redis应用场景

試著忘記壹切 提交于 2020-03-23 08:07:15
1、 l iunux系统 redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统。和Memcached类似,但很大程度补偿了memcached的 不足,它支持存储的value类型相对更多,包括string、list、set、zset和hash。这些数据类型都支持push/pop、add /remove及取交集并集和差集及更丰富的操作。在此基础上,redis支持各种不同方式的排序。Redis数据都是缓存在计算机内存中,并且会周期性 的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。 redis官网地址: http://www.redis.io/ 最新版本:2.8.3 在Linux下安装Redis非常简单,具体步骤如下(官网有说明): 1、下载源码,解压缩后编译源码。 $ wget http://download.redis.io/releases/redis-2.8.3.tar.gz $ tar xzf redis-2.8.3.tar.gz $ cd redis-2.8.3 $ make 2、编译完成后,在Src目录下,有四个可执行文件redis-server、redis-benchmark、redis-cli和redis.conf。然后拷贝到一个目录下。 mkdir /usr/redis cp redis-server /usr/redis cp