redis分布式锁

Redis 为什么这么快?

穿精又带淫゛_ 提交于 2020-02-26 22:33:55
1. 纯内存操作,肯定快 数据存储在内存中,读取的时候不需要进行磁盘的 IO 2. 单线程,无锁竞争损耗 单线程保证了系统没有线程的上下文切换 使用单线程,可以避免不必要的上下文切换和竞争条件,没有多进程或多线程引起的切换和 CPU 的消耗,不必考虑各种锁的问题,没有锁释放或锁定操作,不会因死锁而降低性能; 3. C 语言实现,更接近底层操作 Redis 是用 C 语言开发完成的 4. 多路 I/O 复用模型,非阻塞 IO 采用多路 I/O 复用技术可以让单个线程高效的处理多个网络连接请求(尽量减少网络 IO 的时间消耗) 非阻塞 IO 内部实现采用 epoll,采用了 epoll+自己实现的简单的事件框架。epoll 中的读、写、关闭、连接都转化成了事件,然后利用 epoll 的多路复用特性,绝不在 io 上浪费一点时间。 5. 数据结构简单,底层又做了优化 数据结构简单,对数据操作也简单,Redis 中的数据结构是专门进行设计的; 6. 源码精湛、简短 扩展: 在 Redis 中,常用的 5 种数据结构和应用场景 String: 缓存、计数器、分布式锁等。 List: 链表、队列、微博关注人时间轴列表等。 Hash: 用户信息、Hash 表等。 Set: 去重、赞、踩、共同好友等。 Zset: 访问量排行榜、点击量排行榜等。 多路 I/O 复用模型 多路 I/O 复用模型是利用

Redis杂记

送分小仙女□ 提交于 2020-02-26 05:55:38
一、Redis基础 1、安装启动Redis 1.1 去pkgs.org下载rpm包 [root@node1 ~]# wget http://www6.atomicorp.com/channels/atomic/centos/6/i386/RPMS/redis-3.0.7-4.el6.art.i686.rpm 1.2 yum本地安装 [root@node1 ~]# yum localinstall redis-3.0.7-4.el6.art.i686.rpm 查看redis安装生成的文件: [root@node1 ~]# rpm -ql redis 备份原始配置: [root@node1 ~]# cp -p /etc/redis.conf{,.orgi} 1.3 配置 [root@node1 ~]# vim /etc/redis.conf #监听多个地址: bind 127.0.0.1 10.201.106.21 启动: [root@node1 ~]# service redis start Starting redis-server: [ OK ] [root@node1 ~]# ss -tnlp | grep redis LISTEN 0 128 10.201.106.21:6379 *:* users:(("redis-server",16155,5)) LISTEN 0

怎么找115资源

余生颓废 提交于 2020-02-26 02:06:15
【T55B66】【十伟】【永久保存】 Redis 知识点整理 JavaTimo Chat 作者 一个节操泛滥,一身凛然正气,刚正不阿的Java程序员 附上了高清知识图谱 当前内容版权归码字科技所有并授权显示,盗版必究。 文章正文 1、什么是 Redis?. 2、Redis 的数据类型? 3、使用 Redis 有哪些好处? 4、Redis 相比 Memcached 有哪些优势? 5、Memcache 与 Redis 的区别都有哪些? 6、Redis 是单进程单线程的? 7、一个字符串类型的值能存储最大容量是多少? 8、Redis 的持久化机制是什么?各自的优缺点? 9、Redis 常见性能问题和解决方案: 10、redis 过期键的删除策略? 11、Redis 的回收策略(淘汰策略)? 12、为什么 edis 需要把所有数据放到内存中? 13、Redis 的同步机制了解么? 14、Pipeline 有什么好处,为什么要用 pipeline? 15、是否使用过 Redis 集群,集群的原理是什么? 16、Redis 集群方案什么情况下会导致整个集群不可用? 17、Redis 支持的 Java 客户端都有哪些?官方推荐用哪个? 18、Jedis 与 Redisson 对比有什么优缺点? 19、Redis 如何设置密码及验证密码? 20、说说 Redis 哈希槽的概念? 21、Redis

不想搞Java了,4年经验去面试10分钟结束,现在Java面试为何这么难

戏子无情 提交于 2020-02-26 01:47:46
作为一名优秀的程序员,技术面试都是不可避免的一个环节,一般技术面试官都会通过自己的方式去考察程序员的技术功底与基础理论知识。 如果你参加过一些大厂面试,肯定会遇到一些这样的问题: 1、看你项目都用的框架,熟悉Spring、mybatis等框架实现原理吗? 2、 看你上面有接触过消息中间件,负载均衡、RPC框架等技术吗,MySQL分库分表有做过吗? 3、 分布式架构设计,Redis分布式锁呢? 是不是看上去很难,是不是和自己准备的“题库”中的问题不一样?不知道从何处下手?如果你有这种感觉,那么说明你的技术还需要继续修炼。 面对如此多的技术面试,怎么样才能说自己的技术已经过关了呢? 只有问题没有参考答案,但是,请允许我说但是,对于下面这些问题,我这里还是有一份参考学习笔记文档和面经试题解析的在文末分享,需要各位小伙伴下来逐一学习! 一、开场白 自我介绍,项目经验(介绍下自己最满意的,有技术亮点的项目或平台,重点介绍下自己负责那部分的技术细节;这一块主要考察应聘者对自己做过的事情是否有清晰的描述,判断做的事情的复杂度) 2、JVM 垃圾回收算法有几种类型? 他们对应的优缺点又是什么? 类的加载过程是什么?简单描述一下每个步骤 JVM 预定义的类加载器有哪几种?分别什么作用? 什么是双亲委派模式?有什么作用? 什么是内存溢出, 内存泄露? 他们的区别是什么? 引起类加载操作的行为有哪些?

大厂面试题:集群部署时的分布式 session 如何实现?

自作多情 提交于 2020-02-25 23:26:02
面试官心理分析 面试官问了你一堆 dubbo 是怎么玩儿的,你会玩儿 dubbo 就可以把单块系统弄成分布式系统,然后分布式之后接踵而来的就是一堆问题,最大的问题就是分布式事务、接口幂等性、分布式锁,还有最后一个就是分布式 session。 当然了,分布式系统中的问题何止这么一点,非常之多,复杂度很高,这里只是说一下常见的几个问题,也是面试的时候常问的几个。 面试题剖析 session 是啥?浏览器有个 cookie,在一段时间内这个 cookie 都存在,然后每次发请求过来都带上一个特殊的 jsessionid cookie,就根据这个东西,在服务端可以维护一个对应的 session 域,里面可以放点数据。 一般的话只要你没关掉浏览器,cookie 还在,那么对应的那个 session 就在,但是如果 cookie 没了,session 也就没了。常见于什么购物车之类的东西,还有登录状态保存之类的。 这个不多说了,懂 Java 的都该知道这个。 单块系统的时候这么玩儿 session 没问题,但是你要是分布式系统呢,那么多的服务,session 状态在哪儿维护啊? 其实方法很多,但是常见常用的是以下几种: 完全不用 session 使用 JWT Token 储存用户身份,然后再从数据库或者 cache 中获取其他的信息。这样无论请求分配到哪个服务器都无所谓。 tomcat +

Redis的“假事务”与分布式锁

怎甘沉沦 提交于 2020-02-25 22:24:39
关注公众号:CoderBuff,回复“redis”获取《Redis5.x入门教程》完整版PDF。 《Redis5.x入门教程》目录 第一章 · 准备工作 第二章 · 数据类型 第三章 · ​命令 第四章 ​· 配置 第五章 · Java客户端(上) 第六章 · 事务 第七章 · 分布式锁 第八章 · Java客户端(下) 第六章 · 事务 我们在学习MySQL的存储殷勤时知道,MySQL中innodb支持事务而myisam不支持事务。而事务具有四个特性: 一致性 原子性 隔离性 持久性 在redis尽管提供了事务相关的命令,但实际上它是一个“假事务”,因为它并不支持回滚,也就是说在redis中一个事务有多个命令执行,并不能保证原子性。所以要使用redis的事务,一定要 慎重 。 Redis中的“假事务”(不保证原子性) 在redis中事务相关的命令一共有以下几个: watch [key1] [key2] :监视一个或多个key,在事务开始之前如果被监视的key有改动,则事务被打断。 multi :标记一个事务的开始。 exec :执行事务。 discard :取消事务的执行。 unwatch :取消监视的key。 正常执行事务 127.0.0.1:6379> multi OK 127.0.0.1:6379> set name kevin QUEUED 127.0.0.1:6379>

《吊打面试官》系列-Redis基础

自古美人都是妖i 提交于 2020-02-25 19:20:42
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 上已经收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前言 作为一个在互联网公司面一次拿一次Offer的面霸,打败了无数竞争对手,每次都只能看到无数落寞的身影失望的离开,略感愧疚( 请允许我使用一下夸张的修辞手法 )。 于是在一个寂寞难耐的夜晚,我痛定思痛,决定开始写互联网技术栈面试相关的文章,希望能帮助各位读者以后面试势如破竹,对面试官进行360°的反击,吊打问你的面试官,让一同面试的同僚瞠目结舌,疯狂收割大厂Offer! 所有文章的名字只是我的噱头,我们应该有一颗谦逊的心,所以希望大家怀着空杯心态好好学,一起进步。 面试开始 一个大腹便便,穿着格子衬衣的中年男子,拿着一个满是划痕的mac向你走来,看着快秃顶的头发,心想着肯定是尼玛顶级架构师吧!但是我们腹有诗书气自华,虚都不虚。 小伙子您好,看你简历上写了你项目里面用到了Redis,你们为啥用Redis? 心里忍不住暗骂,这叫啥问题,大家不都是用的这个嘛,但是你不能说出来。 认真回答道: 帅气迷人的面试官您好 ,因为传统的关系型数据库如Mysql已经不能适用所有的场景了,比如秒杀的库存扣减,APP首页的访问流量高峰等等

#IT明星不是梦#nginx+tomcat集群redis共享session方案实战案例

和自甴很熟 提交于 2020-02-25 18:57:55
一、常见的session一致性方案 在web集群系统中,为了使web能适应大规模的访问,需要实现应用的集群部署. 而实现集群部署首先要解决session的统一,即需要实现session的一致性,目前,实现session一致性主要有两个方案,分别是session复制和session共享。 session复制,是指session信息会在集群节点之间复制,每个节点服务器上都会有相同的session信息。 这种方案的优点是即使一个节点服务器宕机了,只要还有服务器存活,session信息就不会丢失,也就不影响用户使用。而缺点是集群节点之间通信频繁,对应用的响应速度有影响,在高并发、高频操作的情况下性能下降会更厉害。 第二种方案是session共享,也就是将session信息保存在内存数据库中,然后多个节点都可以来访问内存中的session信息,最常见的就是基于Memcache/Redis等数据库的session共享。 tomcat自带集群中,提供了session复制功能,session信息会在各个tomcat中同步,session复制对网络要求较高,session内存的消耗对tomcat影响非常大,对于小集群来说,这种session复制基本够用了,而对于大型集群,还是建议使用redis或者memcache进行session共享。 因此,在构建tomcat集群时

什么是Redis

无人久伴 提交于 2020-02-25 18:43:56
1.1 什么是Redis 1.redis是Nosql数据库中使用较为广泛的非关系型内存数据库,redis内部是一个key-value 存储系统。 2.它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集 合)、zset(sorted set –有序集合)和hash(哈希类型,类似于java中的map)。 3.Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。 Redis基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为数据结构服务器。 1.2 Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。 Redis支持数据的备份,即master-slave模式的数据备份。 1.3 Redis与其他key-value存储有什么不同? Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。

Jedis客户端以及redis中的pipeline批量操作

眉间皱痕 提交于 2020-02-24 21:37:18
关注公众号:CoderBuff,回复“redis”获取《Redis5.x入门教程》完整版PDF。 《Redis5.x入门教程》目录 第一章 · 准备工作 第二章 · 数据类型 第三章 · ​命令 第四章 ​· 配置 第五章 · Java客户端(上) 第六章 · 事务 第七章 · 分布式锁 第八章 · Java客户端(下) 第五章 · Java客户端(上) 有关本章的源码: https://github.com/yu-linfeng/redis5.x_tutorial/tree/master/code/jedis 前面的章节介绍了redis的安装、还有命令配置等内容,我们在实际使用时大部分情况都是利用现成的Java客户端对redis进行操作。当然命令并不是没用,它极有可能在你排查问题时排上用场,因为你有可能会直接连入redis服务端通过命令行来排查是否是redis缓存的问题。 redis的Java客户端最常用的是 jedis 开源库,本章我们也将围绕jedis的对redis进行一些简单的操作,jedis的GitHub地址: https://github.com/xetorthio/jedis 。 package com.coderbuff.jedis.simple; import redis.clients.jedis.Jedis; /** * @author okevin *