redis分布式锁

Redis深度历险,全面解析Redis14个核心知识点

拥有回忆 提交于 2019-12-01 19:04:32
本人免费整理了Java高级资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G,需要自己领取。 传送门: https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q 一、概述 二、数据类型STRING LIST SET HASH ZSET 三、数据结构字典 跳跃表 四、使用场景计数器 缓存 查找表 消息队列 会话缓存 分布式锁实现 其它 五、Redis 与 Memcached数据类型 数据持久化 分布式 内存管理机制 六、键的过期时间 七、数据淘汰策略 八、持久化RDB 持久化 AOF 持久化 九、事务 十、事件文件事件 时间事件 事件的调度与执行 十一、复制连接过程 主从链 十二、Sentinel 十三、分片 十四、一个简单的论坛系统分析文章信息 点赞功能 对文章进行排序 一、概述 Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。 键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。 Redis 支持很多特性,例如将内存中的数据持久化到硬盘中,使用复制来扩展读性能,使用分片来扩展写性能。 二、数据类型 What Redis data structures look

redis介绍

我是研究僧i 提交于 2019-12-01 15:46:53
概念 关系型数据库/sql: mysql,oracle 非关系型数据库/nosql: redis(存在内存中),mongodb(存在硬盘上) 1.redis是以key-value形式存储 2.redis支持持久化 redis用途 1.做缓存 2.存储session 3.游戏排行榜 4.对速度要求比较高的数据存储 5.做消息队列 redis 五大数据类型 1. 字符串 格式:set [key] [value] string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。 string类型是Redis最基本的数据类型,一个键最大能存储512MB。 2. 列表 redis列表是简单的字符串列表,按照插入顺序排序,你可以添加一个元素列表的头部(左边)或者尾部(右边) 格式:lpush [name] [value] # 在key对应list的尾部添加字符串元素 格式:rpush [name] [value] # 在key对应list的头部添加字符串元素 格式:lrem [name] [index] # key对应list中删除count个和value相同的元素 格式:llen [name] # 返回对应list长度 3. 哈希(字典) 格式: hmset [name] [key1] [value1] [key2] [value2]

常见的Redis面试\"刁难\"问题,值得一读

和自甴很熟 提交于 2019-12-01 15:12:20
Redis有哪些数据结构? 字符串String、字典Hash、列表List、集合Set、有序集合SortedSet。 如果你是Redis中高级用户,还需要加上下面几种数据结构HyperLogLog、Geo、Pub/Sub。 如果你说还玩过Redis Module,像BloomFilter,RedisSearch,Redis-ML,面试官得眼睛就开始发亮了。 使用过Redis分布式锁么,它是什么回事? 先拿setnx来争抢锁,抢到之后,再用expire给锁加一个过期时间防止锁忘记了释放。 这时候对方会告诉你说你回答得不错,然后接着问如果在setnx之后执行expire之前进程意外crash或者要重启维护了,那会怎么样? 这时候你要给予惊讶的反馈:唉,是喔,这个锁就永远得不到释放了。紧接着你需要抓一抓自己得脑袋,故作思考片刻,好像接下来的结果是你主动思考出来的,然后回答:我记得set指令有非常复杂的参数,这个应该是可以同时把setnx和expire合成一条指令来用的!对方这时会显露笑容,心里开始默念:摁,这小子还不错。 假如Redis里面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如果将它们全部找出来? 使用keys指令可以扫出指定模式的key列表。 对方接着追问:如果这个redis正在给线上的业务提供服务,那使用keys指令会有什么问题?

redis的安装与五种结构的使用

元气小坏坏 提交于 2019-12-01 11:40:44
  这次我们来说说我们的redis,在我们的redis的认知里,最熟悉的就是用redis作为缓存使用,还有我们的分布式session,其实还有很多redis的使用,还有redis的哨兵模式等等。   Redis(全称:Remote Dictionary Server 远程字典服务)是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。(百度百科) 安装 (linux为例讲解) :    1.先安装一下C语言的包,redis的底层是用C来写的,如果不安装可能安装的时候会报错的。输入$ yum install gcc   2.获得redis资源,输入 $ wget http://download.redis.io/releases/redis-5.0.5.tar.gz   3.开始安装,输入以下命令即可    $ tar -zxvf redis-5.0.5.tar.gz;    $ cd redis-5.0.5;    $ make   4.修改配置,直接输入vim redis.conf,然后跳转到136行(差不多就是136行,版本不同文件可能存在差异), daemonize

Python后端技术栈(六)--数据库

天涯浪子 提交于 2019-12-01 10:19:46
每日分享 What makes you different or weird—that’s your strength. 那些让你与众不同或怪异的,就是你的力量所在。 1.6数据库 上篇文章对网络编程中的一些经典问题做了总结,比如各种网络协议、IO 多路复用模型、并发库等等。 本篇文章将开始数据库的相关内容,开始咯~ 1.6.1 MySQL 1.6.1.1 MySQL 基础知识点 1.事务的原理,特性,事务并发控制 2.常用的字段、含义和区别 3.常用数据库引擎之间区别 1.6.1.2事务 Transaction 1.事务是数据库并发控制的基本单位 2.事务可以看做是一系列 SQL 语句的集合 3.事务的特性就是要么全部执行成功,要么全部执行失败(回滚) 我们最常见的就是转账操作这样一个使用案例。比如 A 给 B 转账,第一步是从 A 的账户查询一下余额还够不够,然后扣款。第二步是 B 的账户里面增加对应的金额。 从代码的层面来说,下面举一个 SQLAlchemy 框架执行回滚操作的例子: session.begin() try: item1 = session.query(Item).get(1) item2 = session.query(Item).get(2) item1.foo = 'bar' item2.bar = 'foo' session.commit()

Redis的那些最常见面试问题

不想你离开。 提交于 2019-12-01 09:48:18
 随笔:经过长达一周的奔波和面试,电话面试,回首今天终于成功的入职了,总共面试了大概10家公司,包括阿里,京东,IBM等等,京东技术过了,学历因为非统招就被pass了,阿里面了2次电话面试就没下文了,估计是我当时最后提问题的时候减分了吧,其他的也有一些offer,不是不想去,就是了无音讯了,眼看年关将近,也由不得我挑挑拣拣了,就直接进了我现在这家公司,主要是感觉公司人不错,薪水这方面也就没有计较太多。好了,书归正文,今天小编就大家送上我精心准备的关于Redis方面的面试题,希望可以帮到还在求职路上的你们。         1.什么是redis?    Redis 是一个基于内存的高性能key-value数据库。    2.Reids的特点      Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性      能最快的Key-Value DB。    Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,不像 memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能

Redis

南笙酒味 提交于 2019-12-01 09:37:13
简介 开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件 数据结构 字符串(strings) 散列(hashes) 列表(lists) 集合(sets) 有序集合(sorted sets) https://www.cnblogs.com/jasontec/p/9699242.html redis是键值对的数据库,常用的五种数据类型为字符串类型(string),散列类型(hash),列表类型(list),集合类型(set),有序集合类型(zset)。 Redis用作缓存,主要两个用途:高性能,高并发,因为内存天然支持高并发。 应用场景 分布式锁(string) setnx key value,当key不存在时,将 key 的值设为 value ,返回1。若给定的 key 已经存在,则setnx不做任何动作,返回0。 当setnx返回1时,表示获取锁,做完操作以后del key,表示释放锁,如果setnx返回0表示获取锁失败,整体思路大概就是这样,细节还是比较多的,有时间单开一篇来讲解。 计数器(string) 如知乎每个问题的被浏览器次数: 分布式全局唯一id(string) 分布式全局唯一id的实现方式有很多,这里只介绍用redis实现。 每次获取userId的时候,对userId加1再获取,可以改进为如下形式: 直接获取一段userId的最大值

4年Java经验面试总结(转)

好久不见. 提交于 2019-12-01 08:34:30
前言 由于个人发展的原因和工作上的变动,产生了想出来看看机会的想法。经过了一段时间的准备,5 月下旬开始出来面试,面到了 7 月上旬,如愿拿到了自己心仪公司的 offer。按照自己的习惯,将这次面试过程中的一些经验总结、心得体会记录下来,自己留个记录,也希望可以帮助到一些同学。 另外,在两年前第一次跳槽的时候也将当时的心得体会记录了下来,这边放个传送门: 两年Java开发工作经验面试总结 个人情况 坐标魔都,15 年本科毕业于普通一本,毕业后就职于一家传统电信公司,17 年后就职于美团点评。 面试情况 相比于 17 年,由于有了美团的背景,今年在简历这关顺利了很多,不得不感叹大厂背景真香🙈。 本着尽量少请假的原因,所以面试的公司比较少,只面了 3 家:阿里、网易、拼多多。 3 家公司都走完了面试流程,最后拿到了阿里和拼多多的 offer,自己还是比较满意的。 至于网易挂掉的原因,具体原因不是很清楚,面试发挥的还行,BOSS 面的时候可以看出对我还是比较满意,但最终没有收到 offer。 如果对于这三家公司的面试流程有问题的,可以在公众号上留言,能解答的我会第一时间解答。 4 年经验应该具备哪些技能 首先,简单的聊一下我认为的 4 年经验左右、优秀的 Java 程序员应该具备的技能有哪些,按“专业技能”和“项目”两块,包括但不限于以下内容。 专业节能方面 基础:JDK 常用类的原理

Redis从入门到踩坑

你说的曾经没有我的故事 提交于 2019-12-01 06:58:30
背景 Redis在互联网项目的使用也是非常普遍的,作为最常用的NO-SQL数据库,对Redis的了解已经成为了后端开发的必备技能。小编对Redis的使用时间不长,但是项目中确两次踩中了Redis的坑,今天特意从基础知识层面到实战层面对Redis知识进行梳理,能够达到对Redis的知识体系有更全面和深入的理解。 Redis的特点 优点: Key-Value类型的内存数据库,是加强版的Memcached。 整个数据库都是在内存中进行操作的,并且定期异步持久化数据到硬盘上进行保存。 在内存中进行操作,不存在磁盘IO,性能方面是非常出色的,读取操作处理速度可以超过10万次每秒,是已知性能最快的Key-Value 数据库。 Redis还提供丰富的数据结构类型。 Redis利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销。 缺点: 数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。 Redis和Memcached的比较 Redis的常用数据结构及使用场景 String String是Redis最基本的类型,一个key对应一个value,也是最常用的数据结构,在定义每个String的key的时候,记得加上前缀。一个Key最大能存储512MB,一个Value最大能存储1G。 Set

Redis提高

可紊 提交于 2019-12-01 03:34:02
一、与传统数据库区别 传统数据库遵循 ACID 规则。而 Nosql(Not Only SQL 的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称) 一般为分布式而分布式一般遵循 CAP 定理 1 。 二、其他数据类型 位图(一组0|1列表) 使用 //例:设置一个周的闹铃是否响 setbit clock 0 0 //周日 setbit clock 1 1 setbit clock 2 1 setbit clock 3 1 setbit clock 4 1 setbit clock 5 1 setbit clock 6 1 getbit clock 5 基数(hyperlog,只关心集合数量) 使用 pfadd userNum tom pfadd userNum jerry pfadd userNum jhon //统计 pfcount userNum Redis分布式锁是怎么实现的? 先拿setnx来争抢锁,抢到之后,再用expire给锁加一个过期时间防止锁忘记了释放。 如果在setnx之后执行expire之前进程意外crash或者要重启维护了,那会怎么样? set指令有非常复杂的参数,这个应该是可以同时把setnx和expire合成一条指令来用的! Redis做异步队列 一般使用list结构作为队列,rpush生产消息,lpop消费消息。当lpop没有消息的时候