redis分布式锁

Redis数据类型及使用场景

…衆ロ難τιáo~ 提交于 2019-12-24 02:58:11
摘要:Redis相比其它的KV数据库,其一大特点是支持丰富的数据类型.它一共支持5种数据类型,下面逐一介绍这5种数据类型及其使用场景... Redis相比其它的KV数据库,其一大特点是支持丰富的数据类型。它一共支持5种数据类型,下面逐一介绍这5种数据类型及其使用场景和内部实现方式。 string 简介:Strings数据类型是最常用、简单的key-value类型,普通的key/ value 存储都可以归为此类。value不仅可以是字符串,也可以是数字。因为是二进制安全的,所以你完全可以把一个图片文件的内容作为string来存储。Redis的string可以完全实现目前 memcache d的功能,并且效率更高。除了提供与 Memcached 一样的get、set、incr、decr 等操作外,Redis还额外提供了下面一些操作: 获取字符串长度 往字符串append内容 设置和获取字符串的某一段内容 设置及获取字符串的某一位(bit) 批量设置一系列字符串的内容 常用命令: set,get,decr,incr,mget 等。 应用场景: 应用 Memcached和CKV的所有场景。字符串和数字直接存取。结构化数据需要先序列化,再set到value;相应的,get到value后需要反序列化。 可以利用redis的INCR、INCRBY、DECR、DECRBY等指令来实现原子计数的效果

同步中的四种锁synchronized、ReentrantLock、ReadWriteLock、StampedLock

巧了我就是萌 提交于 2019-12-23 17:48:33
1.前言 锁就像一把钥匙,需要加锁的代码就像一个房间。出现互斥操作的典型场景:多人同时想进同一个房间争抢这个房间的钥匙(只有一把),一人抢到钥匙,其他人都等待这个人出来归还钥匙,此时大家再次争抢钥匙循环下去。 作为终极实战系列,本篇用java语言分析锁的原理(源码剖析)和应用(详细代码),根据锁的作用范围分为:JVM锁和分布式锁。如理解有误之处,还请指出。 2.单JVM锁(进程级别) 程序部署在一台服务器上,当容器启动时(例如tomcat),一台JVM就运行起来了。本节分析的锁均只能在单JVM下生效。因为最终锁定的是某个对象,这个对象生存在JVM中,自然锁只能锁单JVM。这一点很重要。如果你的服务只部署一个实例,那么恭喜你,用以下几种锁就可以了。 1.synchronized同步锁 2.ReentrantLock重入锁 3.ReadWriteLock读写锁 4.StampedLock戳锁 由于之前已经详细分析过原理+使用,各位直接坐飞机吧: 同步中的四种锁synchronized、ReentrantLock、ReadWriteLock、StampedLock 3.分布式锁(多服务节点,多进程) 3.1基于数据库锁实现 场景举例: 卖商品,先查询库存>0,更新库存-1。 1.悲观锁: select for update(一致性锁定读) 查询官方文档如上图,事务内起作用的行锁

redis缓存

牧云@^-^@ 提交于 2019-12-22 11:39:50
1、为什么使用redis 2、使用redis有什么缺点 3、单线程的redis为什么这么快 4、redis的数据类型,以及每种数据类型的使用场景 5、redis的过期策略以及内存淘汰机制 6、redis和数据库双写一致性问题 7、如何应对缓存穿透和缓存雪崩问题 8、如何解决redis的并发竞争问题 正文 1、为什么使用redis 分析:博主觉得在项目中使用redis,主要是从两个角度去考虑:性能和并发。当然,redis还具备可以做分布式锁等其他功能,但是如果只是为了分布式锁这些其他功能,完全还有其他中间件(如zookpeer等)代替,并不是非要使用redis。因此,这个问题主要从性能和并发两个角度去答。 回答:如下所示,分为两点 (一)性能 如下图所示,我们在碰到需要执行耗时特别久,且结果不频繁变动的SQL,就特别适合将运行结果放入缓存。这样,后面的请求就去缓存中读取,使得请求能够迅速响应。 题外话:忽然想聊一下这个迅速响应的标准。其实根据交互效果的不同,这个响应时间没有固定标准。不过曾经有人这么告诉我:”在理想状态下,我们的页面跳转需要在瞬间解决,对于页内操作则需要在刹那间解决。另外,超过一弹指的耗时操作要有进度提示,并且可以随时中止或取消,这样才能给用户最好的体验。” 那么瞬间、刹那、一弹指具体是多少时间呢? 根据《摩诃僧祗律》记载 一刹那者为一念,二十念为一瞬,二十瞬为一弹指

Redis基础

為{幸葍}努か 提交于 2019-12-22 10:52:35
Redis基础 1 概要 1.1 简介 1.2 特性 1.3 应用场景 1.4 启动、配置 1.5 全局指令 1.6 数据库管理 2 5种数据结构 2.1 字符串String类型 2.2 哈希Hash类型 2.3 列表List类型 2.4 集合Set 2.5 有序集合ZSet 3 使用场景 3.1 String应用 3.2 Set应用~用户标签、喜好、社交 3.2.1 用户标签 3.2.2 微信抽奖活动 3.2.3 朋友圈点赞 3.3 Hash应用 3.4 List应用 3.5 Zset应用 3.6 Hash与List应用~订单场景 4 使用String Hash 序列化三种方式存储用户信息比较 5 持久化机制 5.1 RDB 5.2 AOF 6 分布式锁 1 概要 1.1 简介 Redis 是使用 ANSI C 语言编写、支持网络、基于内存、可持久化的日志型、 Key-Value 数据库。 安装在磁盘 数据存储在内存 1.2 特性 速度快 键值对格式存储 功能丰富 简单稳定 持久化 主从复制 高可用分布式转移 客户端语言多 1.3 应用场景 缓存数据库 排行耪 计数器 社交网络 消息队列 1.4 启动、配置 1.5 全局指令 指令 说明 备注 keys * 查看所有键 dbsize 键总数 如果存在大量键,线上禁止使用 exists key 检查键是否存在 del key 删除键

redis面试题

断了今生、忘了曾经 提交于 2019-12-21 03:55:06
1.Redis 的数据类型? 2.使用 Redis 有哪些好处? 3.Redis 是单进程单线程的? 4.Redis 的持久化机制是什么?各自的优缺点? 1、什么是 Redis? Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key-value 数据库。 Redis 与其他 key - value 缓存产品有以下三个特点: (1)Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 (2)Redis 不仅仅支持简单的 key-value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。 (3)Redis 支持数据的备份,即 master-slave 模式的数据备份。 Redis 优势 (1)性能极高 – Redis 能读的速度是 110000 次/s,写的速度是 81000 次/s 。 (2)丰富的数据类型 – Redis 支持二进制案例的 Strings, Lists, Hashes, Sets 及Ordered Sets 数据类型操作。 (3)原子 – Redis 的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过 MULTI 和 EXEC指令包起来。 (4)丰富的特性 – Redis 还支持 publish

Redis常见面试题解析(二)

你。 提交于 2019-12-21 03:21:59
文章目录 一、Redis 集群结构以及设计理念 1. Redis 集群架构模式有哪几种? 2. Redis 集群最大节点个数是多少? 3. Redis 集群的主从复制模型是怎样的? 4. 请介绍一下 Redis 集群实现方案 5. Redis 集群会有写操作丢失吗?为什么? 6. Redis 慢查询是什么?通过什么配置? 7. Redis 的慢查询修复经验有哪些?怎么修复的? 8. 如何优化 Redis 服务的性能? 9. Redis 的主从复制模式有什么优缺点? 10. Redis sentinel(哨兵)模式优缺点有哪些? 11. 如何设置 Redis 的最大连接数?查看 Redis 的最大连接数?查看 Redis 的当前连接数? 12. 介绍一些 Redis 常用的安全设置? 二、Redis 缓存管理与持久化机制 1. Redis 持久化机制有哪些? 2. Redis 持久化机制 AOF 和 RDB 有哪些不同之处? 3. 请介绍一下 RDB 持久化机制的优缺点 4. 请介绍一下 AOF 持久化机制的优缺点 5. 如果 AOF 文件的数据出现异常, Redis 服务怎么处理? 6. 常见的淘汰算法有哪些? 7. Redis 淘汰策略有哪些? 8. Redis 缓存失效策略有哪些? 9. Redis 如何做内存优化? 10. 什么是 bigkey? 有什么影响? 11.

redis 缓存优化

空扰寡人 提交于 2019-12-20 21:03:33
一. 缓存穿透 常见的解决方案有两个 1.数据库不存在的值,在缓存存进一个空值,并添加过期时间。这样的缺点就是会浪费比较多的空间。 2.用布隆过滤器,在访问缓存层和存储层之前,将存在的key用布隆过滤 器提前保存起来,做第一层拦截。如果布隆过滤器判断该key不存在,就不会访问持久层,从而保护了持久层。 二. 热点key重建优化 1.设置分布式锁 2.不设置过期时间 三 雪崩问题 1.服务端降级 2.redis高可用 四.无底洞问题 集群的节点越多,数据越分散。可能会导致一个查询,需要数十个节点的配合,背后可能是数十次网络连接的消耗,大大影响了性能。 解决方案:有四种批量操作方式:串行命令、串行IO、并行IO、hash_tag 来源: CSDN 作者: 码虫码农 链接: https://blog.csdn.net/a6686039/article/details/103602170

网易云课堂(5)网易内部Redis高性能架构分析

旧巷老猫 提交于 2019-12-20 08:47:18
Redis高可用集群实战: map:JVM堆栈 redis:物理内存 之前的5种数据格式(String /hash/ list/ set/ sorted set(Zset)) + 地理位置信息查询等新的数据格式 范围查询:bitmap 地理空间:geospatial 索引半径查询 高级特性: 单副本:1个Redis服务端 多副本:主从模式 高可用:哨兵Sentinel、集群Cluster 没有太多的,做缓存使用 新浪微博:使用Redis量很高。点赞和评论很重要,只要不是大量的丢失就能够接受。 限制Redis性能:CPU、网络 单点故障:缓存击穿和缓存雪崩。 解决方法:数据备份。备份多少合理?比较安全的 备份3份 。主也算1+2=3. 2n+1= 拜占庭问题:实现最少资源的公平选举, 故障数据<存活的节点数据 选举的机制:2n+1. 多副本: 主主不支持备份, 解决方案:将从服务器在主挂掉之后,提升成主服务。(本身不能主动支持,要手动将从----变成主服务) 微博之前发生这种问题,临时性手动解决这种问题。 -------自动? 哨兵模式解决这种问题: 可靠性要求高的场景:分布式锁、 常见架构: 哨兵方式: toC大多数是读多写少的场景。不能够写多。 主挂掉:立即进行选举。TCP/ip心跳实现检查。 服务直接连接哨兵的端口, 1、不用直接连接主Redis节点。 2

redis相关

旧街凉风 提交于 2019-12-20 01:28:53
redis结构: String,Hash,List,Set,Zet 持久化: RDB 快照形式 AOF 追加 1,redis既然是单线程的,为啥处理速度很快 redis每秒处理100000+的QPS,基于内存操作,只是我们在处理网络请求的时候,是单线程处理,redis Server在运行的时候肯定不止一个线程,单线程省去了很多上下文切换的时间,redis使用多路复用技术,可以处理并发的连接。非阻塞IO 内部实现采用epoll,采用了epoll+自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转化成了事件,然后利用epoll的多路复用特性,绝不在io上浪费一点时间。 2.分布式锁 加锁使用setnx(); key可以为当前线程id,value随便,当执行完后返回1,表明没有加锁,可以使用,当返回0的时候,表明当key已经存在,加锁失败,解锁的话del(key), 锁超时:当线程获取锁之后,挂掉了,那么锁就无法释放,这个时候需要设置expire()超时时间,保证到期释放锁 问题一: setnx 和expire操作非原子性,解决:redis高版本有set()方法设置超时时间 问题二: 线程执行时间太长,超时时间过了,其他线程获取锁执行,redis误删其他的锁,解决:删除锁时校验是否为当前线程 校验和删除非原子性操作,可以通过LUA脚本来操作, String luaS

压箱底的干货!干货!——Redis面试系列(一)

浪尽此生 提交于 2019-12-19 07:59:54
一、什么是 Redis? Redis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库,可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。 与传统数据库不同的是 Redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。另外,Redis 也经常用来做分布式锁。除此之外,Redis 支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案。 Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key-value 数据库。 二、Redis 与其他 key - value 缓存产品有以下三个特点: (1)Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 (2)Redis 不仅仅支持简单的 key-value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。 (3)Redis 支持数据的备份,即 master-slave 模式的数据备份。 三、Redis有哪些优缺点 优点 (1)性能极高 – Redis 能读的速度是