Redis安装与配置
Redis 简介
Redis 是完全开源免费的,遵守BSD协议,是一个高性能(NOSQL)的key-value数据库,Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。(Vmware在资助着redis项目的开发和维护)BSD是”Berkeley Software Distribution”的缩写,意思是”伯克利软件发行版”。SD开源协议是一个给于使用者很大自由的协议。可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。BSD代码鼓励代码共享,但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售,因此是对商业集成很友好的协议。
1.1什么是NoSQLNoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的 ...
OpenResty+Lua+redis实现缓存
学习目标
了解Lua语言的基本语法
使用OpenResty+Lua+redis实现广告缓存
掌握OpenResty限流的基本使用方法
1. Lua介绍1.1 lua是什么 Lua 是一个小巧的脚本语言。它是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo三人所组成的研究小组于1993年开发的。 其设计目的是为 了通过灵活嵌入应用程序中从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编 写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这 是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。Lua 有一个同时进 行的JIT项目,提供在特定平台上的即时编译功能。简单来说: Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计 ...
JWT令牌 JWT概述和简单使用
1. JWT介绍在介绍JWT之前先看一下传统校验令牌的方法,如下图:
问题:传统授权方法的问题是用户每次请求资源服务,资源服务都需要携带令牌访问认证服务去校验令牌的合法性,并根据令牌获取用户的相关信息,性能低下。
解决:使用JWT的思路是,用户认证通过会得到一个JWT令牌,JWT令牌中已经包括了用户相关的信息,客户端只需要携带JWT访问资源服务,资源服务根据事先约定的算法自行完成令牌校验,无需每次都请求认证服务完成授权。
JWT令牌授权过程如下图:
什么是JWT?JSON Web Token(JWT)是一个开放的行业标准(RFC 7519),它定义了一种简介的、自包含的协议格式,用于在通信双方传递json对象,传递的信息经过数字签名可以被验证和信任。JWT可以使用HMAC算法或使用RSA的公 钥/私钥对来签名,防止被篡改。
JWT令牌的优点:
jwt基于json,非常方便解析。
可以在令牌中自定义丰富的内容,易扩展。
通过非对称加密算法及数字签名技术,JWT防止篡改,安全性高。
资源服务使用JWT可不依赖认证服务即可完成授权。
缺点:
JWT令牌较长,占存储空间比较 ...
如何保证分布式唯一全局Id生成
集群高并发情况下如何保证分布式唯一全局Id生成问题为什么需要分布式全局唯一ID以及分布式ID的业务需求在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识,如在美团点评的金融、支付、餐饮、酒店
猫眼电影等产品的系统中数据逐渐增长,对数据库分库分表后需要有一个唯一ID来标识一条数据或信息;
特别Ian的订单、骑手、优惠券都需要有唯一ID做标识
此时一个能够生成全局唯一ID的系统是非常必要的
ID生成规则部分硬性要求
全局唯一
趋势递增
在MySQL的InnoDB引擎中使用的是聚集索引,由于多数RDBMS使用Btree的数据结构来存储索引,在主键的选择上面我们应该尽量使用有序的主键保证写入性能
单调递增
保证下一个ID一定大于上一个ID,例如事务版本号、IM增量消息、排序等特殊需求
信息安全
如果ID是连续,恶意用户的爬取工作就非常容易做了,直接按照顺序下载指定URL即可,如果是订单号就危险了,竞争对手可以直接知道我们一天的单量,所以在一些应用场景下,需要ID无规则不规则,让竞争对手不好猜
含时间戳
一样能够快速在开发中了解这个分布式ID什么时候生成的
ID号生成 ...
数据同步解决方案-canal
常用场景1、讲用户信息导出eccel表格
2、将excel表中的信息录入到网站数据库
开发中经常会涉及到excel的处理,如导出excel,导入excel到数据库。
1234567891011121314151617181920<!--xls--><dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.9</version></dependency><!--xlsx--><dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.9</version></dependency><!--日期格式 ...
数据同步解决方案-canal
1.canal1.1 canal简介canal可以用来监控数据库数据的变化,从而获得新增数据,或者修改的数据。canal是应阿里巴巴存在杭州和美国的双机房部署,存在跨机房同步的业务需求而提出的。阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅& 消费的业务。
原理相对比较简单:
canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议
mysql master收到dump请求,开始推送binary log给slave(也就是canal)
canal解析binary log对象(原始为byte流)
1.2 环境部署1.2.1 mysql开启binlog模式(1)查看当前mysql是否开启binlog模式。
1SHOW VARIABLES LIKE '%log_bin%'
如果log_bin的值为OFF是未开启,为ON是已开启.
(2)修改/etc/my.cnf 需要开启binlog模式.
12345[mysqld] log-bin ...
Redis缓存设计与性能优化
05-Redis缓存设计与性能优化5.1 多级缓存架构
5.2 缓存设计5.2.1 缓存穿透缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储层查不到数据则不写入缓存层。
缓存穿透将导致不存在的数据每次请求都要到存储层去查询, 失去了缓存保护后端存储的意义。
造成缓存穿透的基本原因有两个:
第一, 自身业务代码或者数据出现问题。
第二, 一些恶意攻击、 爬虫等造成大量空命中。
缓存穿透问题解决方案:
1、缓存空对象
123456789101112131415161718String get(String key) { // 从缓存中获取数据 String cacheValue = cache.get(key); // 缓存为空 if (StringUtils.isBlank(cacheValue)) { // 从存储中获取 String storageValue = storage.get(key); cache.set(key, storageVal ...
Redis缓存高可用集群
03-Redis缓存高可用集群3.1 Redis集群方案比较
哨兵模式
在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可用性等各方面表现一般,特别是在主从切换的瞬间存在访问瞬断的情况,而且哨兵模式只有一个主节点对外提供服务,没法支持很高的并发,且单个主节点内存也不宜设置得过大,否则会导致持久化文件过大,影响数据恢复或主从同步的效率
高可用集群模式
redis集群是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片特性。Redis集群不需要sentinel哨兵也能完成节点移除和故障转移的功能。需要将每个节点设置成集群模式,这种集群模式没有中心节点,可水平扩展,据官方文档称可以线性扩展到上万个节点(官方推荐不超过1000个节点)。redis集群的性能和高可用性均优于之前版本的哨兵模式,且集群配置非常简单
3.2 Redis高可用集群搭建
redis安装
12345678910111213141516 ...
Redis核心原理与持久化、主从与哨兵架构
01-Redis安装核心原理1.1 Redis安装123456789101112131415161718192021222324252627282930(个人博客写过Redis详细各种安装 www.lovekhh.xyz/blog/65)下载地址:http://redis.io/download安装步骤:# 安装gccyum install gcc# 把下载好的redis-5.0.3.tar.gz放在/usr/local文件夹下,并解压wget http://download.redis.io/releases/redis-5.0.3.tar.gztar xzf redis-5.0.3.tar.gzcd redis-5.0.3# 进入到解压好的redis-5.0.3目录下,进行编译与安装make# 启动并指定配置文件src/redis-server redis.conf(注意要使用后台启动,所以修改redis.conf里的daemonize改为yes)# 验证启动是否成功 ps -ef | grep redis # 进入redis客户端 src/redis-cli # 退出客户端qui ...
Docker搭建RabbitMq集群
Windows安装RabbitMq
由于其基于Erlang语言编写,所以先安装Erlang,下载地址
双击安装,安装路径不要与中文与空格
配置环境变量
path中添加
cmd中测试
安装RabbitMQ,下载地址
下载后双击安装
RabbitMQ Server安装完成之后,会自动注册为服务,并以默认配置进行启动
可能的问题:启动失败,通常是由于用户名为中文,导致默认的db和log目录访问出现问题。解决方法,写在RabbitMQ,配置环境变量RABBITMQ_BASE为一个不含中文的路径,如E:\rabbitmq,然后重新安装
Rabbit管理
进入rabbitMQ安装目录下的sbin目录,执行如下命令开启WEB管理插件,rabbitmq-plugins.bat enable rabbitmq_management
1234567891011121314C:\software\RabbitMQ\rabbitmq_server-3.7.18\sbin>rabbitmq-plugins.bat enable rabbitmq_managementEnabling ...






