Redis

windows-redis 集群搭建

无人久伴 提交于 2020-12-24 09:06:04
Windows 配置Reids集群 Redis Cluster 1. 下载安装Redis Redis官方不支持Windows,但是Microsoft Open Tech group在 GitHub上开发了一个Win64的版本,下载地址为: https://github.com/MSOpenTech/redis/releases 解压之后,拷贝到自定义的Redis目录下,例如D:\dev\Redis 打开cmd,切换到Redis目录下,执行 redis-server redis.windows.conf 1 2 窗口不要关闭,再重新打开一个cmd窗口,连接Redis执行 redis-cli.exe -h 127.0.0.1 -p 6379 1 2 2. 安装Ruby并配置环境 安装Ruby,Windows可以安装RubyInstaller,下载地址: http://railsinstaller.org/en 一直下一步安装完成会自动弹出一个cmd的黑色窗口,需要对Ruby进行配置 执行 gem install redis 出现 SSL Connect error时,是因为ruby 没有包含 SSL 证书,所以 https 的链接被服务器拒绝。 解决方法很简单,首先在这里下载证书 http://curl.haxx.se/ca/cacert.pem , 然后再环境变量里设置 SSL

Shiro+Redis实现Tomcat集群Session共享

一个人想着一个人 提交于 2020-12-24 09:04:09
一、背景   当我们使用了nginx做项目集群以后,就会出现一个很严重的问题亟待解决,那就是:tomcat集群之间如何实现session共享的问题,如果这个问题不解决,就会出现登陆过后再次请求资源依旧需要登陆的问题。这篇文章我们就解决这个问题。 二、实现步骤 说明:本篇是在spring+shiro集成的基础上进行改进的,如果不知道spring和shiro怎么集成,请移步:spring集成shiro做登陆认证 1.在pom.xml中添加shiro-redis和jedis的依赖 2.首先我们需要对redis进行集成,在resources下新建config.properties 3.在resources/spring文件夹下新建spring-redis.xml来集成redis操作客户端 4.添加redisClient.java作为访问redis的客户端 5.接着,我们对spring-shiro.xml做如下修改(红色标记的部分) 6.spring.xml做如下修改 到此我们就完了shiro+redis实现session共享的问题,其实也很简单,其中的实现逻辑也很简单,就是shiro的拦截器会首先去redis里面获取session,作为当本次请求的session. 其他代码以及简单测试代码不再贴出,给出github地址: https://github.com/hafizzhang

基于netty手写Tomcat

回眸只為那壹抹淺笑 提交于 2020-12-24 06:05:19
作者: MovW 原文:http://suo.im/5Ar7t8 netty 简介 Netty一个基于NIO的客户、服务器端的编程框架 1.环境准备 maven依赖 <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.42.Final</version> </dependency> 12345 RequestMethodEnum 请求方式 public enum RequestMethodEnum { GET( "GET" ), POST( "POST" ); public String code; RequestMethodEnum(String code) { this.code=code; }}12345678 ParentServlet 父类servlet public abstract class ParentServlet { public void service(ParentRequest request, ParentResponse response) throws Exception { //service 方法决定调用doGet、doPost; if (RequestMethodEnum.GET.code

laravel5.*安装使用Redis以及解决Class 'Predis\Client' not found和Fatal error: Non-static method Red...

痴心易碎 提交于 2020-12-24 01:53:10
https://phpartisan.cn/news/35.html laravel 中我们可以很简单的使用 Redis ,如何在服务器安装Redis以及原创访问你们可以访问Ubuntu 设置Redis密码以及允许远程访问和在ubuntu 安装redis的简单方法就可以了,很多人在使用的时候常常出现Class 'Predis\Client' not found的错误,那是因为我们laravel没有安装Redis拓展包,好的,我们接下来安装使用Redis 在 composer.json 的 require 里输入 "predis/predis": "^1.0" 然后更新一下 composer update 好的我们接下来在.env里配置一下我们的Redis路径 REDIS_HOST= 你的IP REDIS_PASSWORD = 密码 REDIS_PORT =6379 好的,配置好了,接下来我们就是使用了 Redis::set('name', 'Taylor' ); $test = Redis::get('name' ); dd( $test ); 如果没问题,应该会输出"Taylor",如果出现如下报错,代表你的Redis链接错了 Connection refused [tcp: // 123.1.1.1:6379] 好的,现在我们就搞定了Redis的安装和使用

API访问频率限制的解决方案

喜夏-厌秋 提交于 2020-12-23 19:39:50
有时候我们需要限制一个API访问的频率,例如单用户一分钟之内只能访问多少次。 类似于这样的需求很容易用Redis来实现。 <?php require('predis/src/Autoloader.php'); $redis = new Predis\Client(array( 'scheme' => 'tcp', 'host' => '127.0.0.1', 'port' => '6379' )); $redis->auth('123456'); //这个key记录该用户1的访问次数 $key = 'user:1:api_count'; //限制次数为10 $limit = 10; $check = $redis->exists($key); if($check){ $count = $redis->incr($key); if($count > 10){ exit('your have too many request'); } }else{ $redis->incr($key); //限制时间为60秒 $redis->expire($key,60); } $count = $redis->get($key); echo 'You have '.$count.' request'; //...... //API业务逻辑 echo '<br/>'; echo 'Hello

BATJ的常见java面试题

冷暖自知 提交于 2020-12-23 19:39:22
JAVA基础 JAVA中的几种基本数据类型是什么,各自占用多少字节。 String类能被继承吗,为什么。 不可以,因为String类有final修饰符,而final修饰的类是不能被继承的,实现细节不允许改变。 String,Stringbuffer,StringBuilder的区别。 String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) ArrayList和LinkedList有什么区别。 讲讲类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,当new的时候,他们的执行顺序。 用过哪些Map类,都有什么区别,HashMap是线程安全的吗,并发下使用的Map是什么,他们内部原理分别是什么,比如存储方式,hashcode,扩容,默认容量等。 JAVA8的ConcurrentHashMap为什么放弃了分段锁,有什么问题吗,如果你来设计,你如何设计。 有没有有顺序的Map实现类,如果有,他们是怎么保证有序的。 抽象类和接口的区别,类可以继承多个类么,接口可以继承多个接口么,类可以实现多个接口么。 继承和聚合的区别在哪。 IO模型有哪些,讲讲你理解的nio ,他和bio,aio的区别是啥,谈谈reactor模型。 反射的原理,反射创建类实例的三种方式是什么。 反射中,Class

MSHA x Chaos 容灾高可用实践

我是研究僧i 提交于 2020-12-23 18:36:53
前言 由于外部环境的复杂以及硬件的不可靠,互联网服务的高可用面临着巨大的挑战,由于断网、断电等事故导致的各大互联网公司服务不可用的案例也不在少数。业务不可用,小到带来经济损失影响企业口碑,大到微信、支付宝这些国民级应用,影响国计民生。面对难以避免的天灾人祸,容灾架构的建设就成为了数字化企业的迫切诉求。 2020 年 12 月份,阿里云应用高可用产品 AHAS(Application High Availability Service)发布了新的功能模块 AHAS-MSHA,它是在阿⾥巴巴电商业务环境演进出来的多活容灾架构解决⽅案。本篇文章我们首先介绍容灾领域的几个重要概念,然后将结合一个的电商微服务案例,分享一下如何基于 AHAS 的异地多活能力(AHAS-MSHA)和混沌工程能力(AHAS-Chaos)帮助业务实现容灾架构的高可用实践。 容灾与评价指标 1. 什么是容灾? 容灾(Disaster Tolerance)是指在相隔较远的异地,建立两套或多套功能相同的系统,系统之间可以相互进行健康状态监视和功能切换,当一处系统因意外(如火灾、洪水、地震、人为蓄意破坏等)停止工作时,整个应用系统可以切换到另一处,使得该系统功能可以继续正常工作。 2. 容灾能力如何评估? 容灾系统主要为了在灾难发生时业务不发生中断,那么容灾能力如何评估和量化呢

使用redis防止商品超发

一个人想着一个人 提交于 2020-12-23 14:04:26
redis不仅仅是单纯的缓存,它还有一些特殊的功能,在一些特殊场景上很好用。redis中key的原子自增incrby和判断key不存在再写入的setnx方法,可以有效的防止超发。 下面使用两个不同的方式来说明利用redis做商品购买库存数量限制。 业务场景很简单,就是限制抢购5个商品,模拟并发请求抢购商品,每抢购一次对应redis中的key值增加一次,通过判断限购的数量来限制抢购,抢购成功写入成功日志,失败写入失败的信息记录,通过记录的数量来判断是否超发。 文件index.php <?php require_once './myRedis.php'; require_once './function.php'; class sendAward{ public $conf = []; const V1 = 'way1';//版本一 const V2 = 'way2';//版本二 const AMOUNTLIMIT = 5;//抢购数量限制 const INCRAMOUNT = 1;//redis递增数量值 //初始化调用对应方法执行商品发放 public function __construct($conf,$type){ $this->conf = $conf; if(empty($type)) return ''; if($type==self::V1){ $this->way1

淘宝|蚂蚁|菜鸟|盒马|滴滴|饿了么面经(已拿多个offer)

こ雲淡風輕ζ 提交于 2020-12-23 12:44:29
上一篇的同学拿到了bigo和腾讯的offer,这一次的分享来自两位同学的面试综合,他们分别拿到了菜鸟、嘀嘀、盒马的多个offer,由于面试的时间跨度时间太长,且面试的部门太多,只能回忆到具体的面试题,无法再具体区分出几面了,但是面试真题还是可以拿出来分享一下,且看正文。 菜鸟&滴滴 这些来自第一位同学分享的面试题,由于过于优秀,同时面试几个大厂都已拿到offer,他只能回忆到一些重点的问题。 JVM内存溢出排查? 根据他的描述,JVM内存溢出的排查是个必问点,基本上每个公司都被问到,要知道怎么利用jstat、jmap这些命令结合MAT等工具导出堆栈信息查看分析,如果没有实战的经验,最好平时可以自己模拟一下场景,看看具体怎么处理。 网络编程相关的提问 因为大家Java可能做业务相关的需求比较多,如果不是涉及到比如IOT这种和网络编程相关的话,确实不是很清楚,对于这块问题他直接回复不清楚,问题也不大。 并发包相关问题 JUC下的那些常见问题,ConcurrentHashMap、CountDownLatch等等这些都应该要熟悉掌握,面试必考点。 线程池原理 基本也是必问点,也比较简单。 mysql索引,锁机制,隔离级别 同上,这个也是比较基础,必须掌握的点。 Redis连环炮 Redis连环炮,数据类型、缓存击穿、雪崩、穿透、热key、大key,哨兵、集群,同步机制都应该了然于心。

redis防止抢购商品超卖

廉价感情. 提交于 2020-12-23 11:05:32
前言: redis不仅仅是单纯的缓存,它还有一些特殊的功能,在一些特殊场景上很好用。 本篇博文用来测试下使用redis来防止抢购商品超卖问题。 内容: 使用redis的list进行测试     思路是设置一个redis列表List,假设有十个商品,每次请求先判断List的长度,小于十就能抢到商品,将用户信息存放到List中。代码如下 //进行抢购 protected function way_list(){ $num = $this->redis->lLen(); if($this->redis->lLen()>=self::AMOUNTLIMIT){ $this->writeLog("抢购失败".$num); return; }else{ $this->redis->rPush($num); $this->writeLog("抢购成功".$num); } } 结果:失败! 可以很明显数量不对顺序也不对。 分析了下原因,在代码执行时,多用户并发请求时,第一个用户判断List长度符合条件还未进行List写入时,第二个用户也通过了List长度判断。所以就导致执行失败。 这就没有利用到redis的原子性 所以进行了改良 使用redis 的incrby。incrby将制定key 的值增加指定的增量,并返回增量后的值。是一个原子性操作。所谓的原子性操作就是执行该方法后要嘛成功要嘛失败。