redis分布式锁

redis常见问题(转)

感情迁移 提交于 2019-12-05 19:14:28
常见问题: 1、为什么使用redis (一)性能 我们在碰到需要执行耗时特别久,且结果不频繁变动的SQL,就特别适合将运行结果放入缓存。这样,后面的请求就去缓存中读取,使得请求能够迅速响应。 (二)并发 在大并发的情况下,所有的请求直接访问数据库,数据库会出现连接异常。这个时候,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问数据库。 2.使用redis有什么缺点 (一)缓存和数据库双写一致性问题 (二)缓存雪崩问题 (三)缓存击穿问题 (四)缓存的并发竞争问题 3、单线程的redis为什么这么快 (一)纯内存操作 (二)单线程操作,避免了频繁的上下文切换 (三)采用了非阻塞I/O多路复用机制     参照上图,简单来说,就是。我们的redis-client在操作的时候,会产生具有不同事件类型的socket。在服务端,有一段I/0多路复用程序,将其置入队列之中。然后,文件事件分派器,依次去队列中取,转发到不同的事件处理器中。 4、redis的数据类型,以及每种数据类型的使用场景 回答:一共五种 (一)String 这个其实没啥好说的,最常规的set/get操作,value可以是String也可以是数字。一般做一些复杂的计数功能的缓存。 (二)hash 这里value存放的是结构化的对象,比较方便的就是操作其中的某个字段。博主在做单点登录的时候

CentOS 7安装/卸载Redis,配置service服务管理

≡放荡痞女 提交于 2019-12-05 19:01:12
Redis介绍   Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 相比于传统的关系型数据库,Redis的存储方式是key-value型的,说到key-value,我们肯定能想到JSON,但是JSON中value是不区分数据类型的,Redis支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询,能够更好的帮助我们进行数据的存储检索。此外Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。 正是由于这些特点,Redis广泛的应用于对性能和并发要求高的业务场景中,以下是常见的场景: String:缓存、计数器、分布式锁等。 List:链表、队列、微博关注人时间轴列表等。 Hash:用户信息、Hash 表等。 Set:去重、赞

Redis基础类型常用操作命令

不羁岁月 提交于 2019-12-05 16:47:40
Redis基础类型常用操作命令 概念:Redis是用C语言开发的一个开源的高性能键值对数据库。 特征: 数据间没有必然的联系 内部采用单线程机制进行工作 高性能 多数据类型支持 字符串类型 String 列表类型 List 散列类型 Map 集合类型 Set 有序集合类型 SortedSet 持久化支持 应用场景 为热点数据加速查询;如:热点商品、热点新闻、热点资讯等高访问量信息。 任务队列;如:秒杀、抢购、购票等。 即时信息查询;如:排行榜等。 时效性信息控制;如:验证码、投票控制等。 分布式数据共享;如:分布式架构中的session等。 消息队列 分布式锁 基础数据类型之: String 单个string类型的存储空间为512MB string基本操作 添加或修改数据 set key value 获取数据 get key 删除数据 del key 设置过期时间(默认单位为秒) expire key second 追加信息到初始value后边 append key value 添加/修改多个数据 mset key1 value1 key2 value2... 获取多个数据 mget key1 key2 ... 获取字符串长度 strlen key 设置key的生命周期 控制生命周期 setex key seconds value (秒) psetex key

【转】Redis相关

China☆狼群 提交于 2019-12-05 16:27:16
1. 什么是redis? Redis 是一个使用 C 语言写成的,开源的基于内存的高性能key-value数据库。 Redis的值可以是由string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)等多种数据结构组成。 回到顶部 2. Redis的特性 速度快 速度快的原因: - Redis所有数据都放在内存中 - Redis是C语言实现 - Redis使用了单线程的架构,预防了多线程可能产生的竞争问题 基于键值对的数据结构服务器 Redis中的值不仅可以是字符串,Redis的值可以是由string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)等多种数据结构组成,便于许多应用场景的开发并且提高了开发效率。 丰富的共鞥 提供了键过期功能,可以用来实现缓存 提供了发布/订阅功能,可以用来实现消息系统 支持Lua脚本功能,可以利用Lua创造出新的Redis命令 提供了简单的事务功能,能在一定程度上保证事务特性 提供了流水线(Pipeline)功能,减少了网络开销 简单稳定 客户端语言多 持久化 RDB(快照) AOF(日志的形式) 4.0版本开始支持RDB和AOF混用的方式聊进行持久化 主从复制 高可用和分布式 高可用实现:Redis Sentinel 分布式实现

【转】Redis面试题

余生长醉 提交于 2019-12-05 16:26:44
1、谈谈Redis的主从复制流程 有几个重点: 主节点负责写,从节点负责读,slave node 主要用来进行横向扩容,做读写分离,扩容的 slave node 可以提高读的吞吐量。 必须开启 master node 的持久化,不建议用 slave node 作为 master node 的数据热备,因为那样的话,如果你关掉 master 的持久化,可能在 master 宕机重启的时候数据是空的,然后可能一经过复制, slave node 的数据也丢了。 当启动一个 slave node 的时候,它会发送一个 PSYNC 命令给 master node。 slave node 初次连接到 master node,那么会触发一次 full resynchronization 全量复制。此时 master 会启动一个后台线程,开始生成一份 RDB 快照文件,同时还会将从客户端 client 新收到的所有写命令缓存在内存中。 断点续传是通过offset机制。 如果 master node 重启或者数据出现了变化,那么 slave node 应该根据不同的 run id 区分。 更详细见:https://github.com/doocs/advanced-java/blob/master/docs/high-concurrency/redis-master-slave.md 2

【转】Redis常见面试题

狂风中的少年 提交于 2019-12-05 16:26:10
介绍:Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API的非关系型数据库。 传统数据库遵循 ACID 规则。而 Nosql(Not Only SQL 的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称) 一般为分布式而分布式一般遵循 CAP 定理。 Github 源码:https://github.com/antirez/redis Redis 官网:https://redis.io/ Redis支持的数据类型? String字符串: 格式: set key value string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。 string类型是Redis最基本的数据类型,一个键最大能存储512MB。 Hash(哈希) 格式: hmset name key1 value1 key2 value2 Redis hash 是一个键值(key=>value)对集合。 Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。 List(列表) Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边) 格式:

面试还搞不懂redis,快看看这40道面试题(含答案和思维导图)

时间秒杀一切 提交于 2019-12-05 14:55:30
Redis 面试题 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 集群的主从复制模型是怎样的? 22、Redis 集群会有写操作丢失吗?为什么? 23、Redis 集群之间是如何复制的? 24、Redis 集群最大节点个数是多少? 25、Redis 集群如何选择数据库? 26

面试-redis题目

我们两清 提交于 2019-12-05 11:37:29
作者:TD李 链接:https://zhuanlan.zhihu.com/p/57473266 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 1、什么是Redis? Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。 Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。 Redis支持数据的备份,即master-slave模式的数据备份。 Redis 优势 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

redis分布式锁方案

时光怂恿深爱的人放手 提交于 2019-12-05 10:08:56
目录: 1.pipeline 2.跨jvm的id生成器 3.跨jvm的锁实现(watch multi) 4.redis分布式 1. Pipeline 官方的说明是:starts a pipeline,which is a very efficient way to send lots of command and read all the responses when you finish sending them。简单点说pipeline适用于批处理。当有大量的操作需要一次性执行的时候,可以用管道。 示例: Jedis jedis = new Jedis(String, int); Pipeline p = jedis.pipelined(); p.set(key,value);//每个操作都发送请求给redis-server p.get(key,value); p.sync();//这段代码获取所有的response 这里我进行了20w次连续操作(10w读,10w写),不用pipeline耗时:187242ms,用pipeline耗时:1188ms,可见使用管道后的性能上了一个台阶。看了代码了解到,管道通过一次性写入请求,然后一次性读取响应。也就是说jedis是:request response,request response,...;pipeline则是:request

Redis(四):独立功能的实现

这一生的挚爱 提交于 2019-12-05 07:29:54
发布与订阅 Redis 的发布与订阅功能有 PUBLISH 命令, SUBSCRIBE 命令, PSUBSCRIBE 命令, PUBSUB 命令等组成。 客户端可以通过 SUBSCRIBE 命令订阅一个或多个频道,当其它客户端向被订阅的频道发送消息时,频道所有的订阅者都会收到这消息。 频道的订阅与退订 Redis会在 redisServer 中用 pubsub_channels 字典来记录订阅的客户端和频道的关系。其中字典的键是被订阅的频道,而字典的值是一个客户端链表,保存了订阅这个频道的所有客户端。 比如有一个客户端执行了 SUBSCRIBE HEllO ,另一个客户端执行 SUBSCRIBE HELLO WORLD ,那么此时 redisServer 中 pubsub_channels 的结构如下: 订阅频道 当客户端执行 SUBSCRIBE <channel1> <channel2...> 命令时,服务器会现在 pubsub_channels 字典中查询是否有对应的键,如果存在,则将客户端添加到键对应的链表的末端,如果不存在,则在字典中添加键,并关联新的链表,然后将客户端加入链表。 退订频道 当客户端执行 UNSUBSCRIBE 命令时,服务器会在 pubsub_channels 的字典中找到对应的键,然后遍历链表,找到客户端未自身的节点移除。如果移除完节点后,链表为空