摘要: 简单介绍使用Spring+Shiro搭建基于Redis的分布式权限系统。 这篇主要介绍Shiro如何与redis结合搭建分布式权限系统,至于如何使用和配置Shiro就不多说了。完整实例下载地址:https://git.oschina.net/zhmlvft/spring_shiro_redis 要实现分布式,主要需要解决2个大问题。 第一个解决shiro session共享的问题。这个可以通过自定义sessionDao实现。继承 CachingSessionDao。public class RedisSessionDao extends CachingSessio...
老套路 1、什么是Redis 2、为什么要用Redis 3、怎么用Redis 4、使用Redis过程中遇到的问题1、什么是Redis介绍Redis之前先了解一下Nosql(非关系型数据库)我们都知道MySql是一种关系型数据库,那什么是非关系型数据库呢?它又是做什么呢?为了解决高并发、高可用、高可扩展,大数据存储等一系列问题而产生的数据库解决方案,就是NoSql。它不能替代关系型数据库,只能作为关系型数据库的一个良好补充。Redis是使用c语言开发的一个高...
都说大厂面试难,一点也没有错,一线大厂的面试究竟怎么样还得自己亲身经历了才知道。小白面试阿里,就被面试官吊打,一问分布式就被“搞懵”了,Redis、MongoDB、Memcached都没答好,很多没有答上来。 下面分享了这次阿里面试关于分布式的一些题目,之后还整理了一些关于分布式的学习资料 01 分布式之 Redis篇 (1)阿里 redis面试题怎么理解 Redis 事务? Redis 如何做内存优化? Redis 回收进程如何工作的? watch dog 自动延期...
转自https://www.jianshu.com/p/d0caf5d99e56redis分布式锁的实现主要是基于redis的setnx 命令(setnx命令解释见:http://doc.redisfans.com/string/setnx.html),我们来看一下setnx命令的作用: ? redis-setnx.png 1、redis分布式锁的基本实现 redis加锁命令:SETNX resource_name my_random_value PX 30000 这个命令的作用是在只有这个key不存在的时候才会设置这个key的值(NX选项的作用),超时时间设为30000毫秒(PX选项的作...
前言 本人的工程实践为金融文本的数据挖掘,这其中金融文本类的数据的获取就很关键,而这些数据是通过爬虫来获取的。 我们使用了scrapy-redis这个开源的分布式爬虫架构。而scrapy-redis这种框架的搭建恰好是使用了模板方法模式来完成的,真的是无巧不成书。 模板方法模式 《设计模式之禅》中关于模板方法的定义为:定义一个操作中的算法框架,而将一些步骤延迟到子类中。使子类可以不改变一个算法的结构即可重定义该算法的某些步骤...
redis系列:分布式锁1 介绍 这篇博文讲介绍如何一步步构建一个基于Redis的分布式锁。会从最原始的版本开始,然后根据问题进行调整,最后完成一个较为合理的分布式锁。 本篇文章会将分布式锁的实现分为两部分,一个是单机环境,另一个是集群环境下的Redis锁实现。在介绍分布式锁的实现之前,先来了解下分布式锁的一些信息。 2 分布式锁 2.1 什么是分布式锁? 分布式锁是控制分布式系统或不同系统之间共同访问共享资源的一种锁实现,...
1 <?php2 /**3 * Class redis_lock4 *5 * 单机redis 分布式锁6 */7 8 class redis_lock9 {10 public $redis;11 12 public function __construct() //连接Redis服务器13 {14 $this->redis = new \redis();15 $this->redis->connect(127.0.0.1, 6379);16 // $this->redis->auth(123456);17 // $this->redis->select(12);18 }19 20 /**21 * 单台Redis设置锁22 *23 ...
前言近两年来微服务变得越来越热门,越来越多的应用部署在分布式环境中,在分布式环境中,数据一致性是一直以来需要关注并且去解决的问题,分布式锁也就成为了一种广泛使用的技术,常用的分布式实现方式为Redis,Zookeeper,其中基于Redis的分布式锁的使用更加广泛。但是在工作和网络上看到过各个版本的Redis分布式锁实现,每种实现都有一些不严谨的地方,甚至有可能是错误的实现,包括在代码中,如果不能正确的使用分布式锁,可能...
再上次篇章中汇集了相关的分布式锁的概念进行控制,接下来我们采用的是注解声明式开发服务方案,进行声明式开发代替编程式开发方案。?1.利用aop实现分布式锁2.只用在方法上加个注解,同时加上了重试机制1.前提我们可以个性化定制一些注解例如:RedisLock注解操作@RedisLock(lockPrefix = AbstractRedisContants.DIST_LOCK_FUND, lockParameter = "fundId") public void handle(FundAmountOptTypeEnum optType, Long fundId, Big...
在很多场景中,我们为了保证数据的最终一致性,需要很多的技术方案来支持,比如分布式事务、分布式锁等。那具体什么是分布式锁,分布式锁应用在哪些业务场景、如何来实现分布式锁呢?今天来探讨分布式锁这个话题。什么是分布式锁要介绍分布式锁,首先要提到与分布式锁相对应的是线程锁、进程锁。1.线程锁主要用来给方法、代码块加锁。当某个方法或代码使用锁,在同一时刻仅有一个线程执行该方法或该代码段。线程锁只在同一JVM中有效...
近来,分布式的问题被广泛提及,比如分布式事务、分布式框架、ZooKeeper、SpringCloud等等。本文先回顾锁的概念,再介绍分布式锁,以及如何用Redis来实现分布式锁。一、锁的基本了解首先,回顾一下我们工作学习中的锁的概念。为什么要先讲锁再讲分布式锁呢?我们都清楚,锁的作用是要解决多线程对共享资源的访问而产生的线程安全问题,而在平时生活中用到锁的情况其实并不多,可能有些朋友对锁的概念和一些基本的使用不是很清楚,所...
一、key pattern 查询相应的key1)redis允许模糊查询key 有3个通配符 、?、[]: 通配任意多个字符?: 通配单个字符[]: 通配括号内的某1个字符2)randomkey:返回随机key3)type key:返回key存储的类型4)exists key:判断某个key是否存在1:存在 0:不存在5)del key:删除key6)rename key newkey:改名7)renamenx key newkey:如果newkey不存在则修改成功8)move key 1:将key移动到1数据库9)ttl key:查询key的生命周期(秒...
“分布式锁”是用来解决分布式应用中“并发冲突”的一种常用手段,实现方式一般有基于zookeeper及基于redis二种。具体到业务场景中,我们要考虑二种情况: 一、抢不到锁的请求,允许丢弃(即:忽略) 比如:一些不是很重要的场景,比如“监控数据持续上报”,某一篇文章的“已读/未读”标识位更新,对于同一个id,如果并发的请求同时到达,只要有一个请求处理成功,就算成功。 用活动图表示如下:二、并发请求,不论哪一条都必须要处...
客户端C2使用SETNX命令获取锁假设客户端C1已经崩溃但是仍然持有锁,所以Redis返回false给客户端C2客户端C2使用GET命令获取锁并检查锁是否已经过期,如果没有过期,则继续等待一段时间并重新重试如果锁已经过期,客户端C2尝试 GETSET lock.name <current Unix timestamp + lock timeout + 1>利用GETSET语法,客户端C2可以检查key的旧值(锁的旧时间)是否仍然是过期时间,如果是,则获取锁如果另一个客户端C3率先获取到锁,客户端C2执...
我们知道分布式锁的特性是排他、避免死锁、高可用。分布式锁的实现可以通过数据库的乐观锁(通过版本号)或者悲观锁(通过for update)、Redis的setnx()命令、Zookeeper(在某个持久节点添加临时有序节点,判断当前节点是否是序列中最小的节点,如果不是则监听比当前节点还要小的节点。如果是,获取锁成功。当被监听的节点释放了锁(也就是被删除),会通知当前节点。然后当前节点再尝试获取锁,如此反复)? redis.png本篇文章,主要讲如何...