Redis
http://www.redis.io
Flamingo@
这个作者很懒,什么都没留下…
展开
-
1.Redis 介绍
1.Redis介绍Redis是开源的(BSD协议),使用ANSI C编写,基于内存的且支持持久化,高性能的Key-Value的NoSQL数据库,单线程运行,省去了线程上下文切换带来的性能开销,效率更高。**官网:**http://www.redis.cn2.Redis数据类型支持数据结构类型丰富,有字符串(string),散列(hash),列表(list),集合(set),有序集合(sorted set),位图(bitmap),hyperloglogs 和 地理空间(geospatial)索引半径查原创 2021-08-20 09:16:36 · 48 阅读 · 0 评论 -
2.Redis 的应用场景
缓存缓存现在几乎时所有中大型网站都在用的必杀技,合理的利用缓存不仅能够提升网站访问的速度,还能大大降低数据库的压力。Redis 提供了键过期功能,也提供了灵活的键淘汰策略,所以,现在 Redis 用在缓存的场合非常多。排行榜很多网站都有排行榜应用的,如京东的月度销量榜单、商品按时间的上新排行榜等。Redis 提供的有序集合数据类型能实现复杂的排行榜应用。计数器什么是计数器,如电商网站商品的浏览器、视频网站视频的播放数等。为了保证数据实时效每次浏览都得给+1,并发量高时如果每次都要请求数据库操作无.原创 2021-09-07 15:07:33 · 55 阅读 · 0 评论 -
3.Redis 有什么优势
性能高、速度快Redis 命令执行速度非常快,官方给出的读写性能可以达到10w/s。性能高、速度快的原因:1)数据存储在内存中,直接与内存连接;2)由相对底层的C语言实现,离操作系统更近;...原创 2021-09-08 10:34:09 · 100 阅读 · 0 评论 -
4.Redis 所消耗的资源
物理资源Redis 是内存数据库,所以主要消耗的是内存。数据放在内存中的原因因为Redis 定位就是一个内存数据库。内存的读取速度是最快的,如果放到硬盘,磁盘IO的速度势必会严重影响 Redis 的性能,那就和一般的关系数据库相比没有什么优势可言,而是随着现在内存硬件成本的降低,内存已经不是问题,性能才是关键,现在硬盘只是成为了一种持久化方案而已。...原创 2021-09-08 10:59:56 · 1310 阅读 · 0 评论 -
5.Redis 到底是单线程还是多线程?
Redis 是单线程。Redis 单线程到底指什么?Redis 单线程是指的是执行 Redis 命令的核心模块是单线程的,而不是整个 Redis 实例就一个线程,Reids 其它的模块还有各自模块的线程。Redis 基于 Reactor 模式开发了网络事件处理器,这个处理器被称为文件事件处理器。它的组成结构为4部分:多个套接字、IO多路复用程序、文件事件分派器事件处理器。因为文件事件分派器队列的消费是单线程的,所以Redis才叫单线程模型。Redis 不仅仅是单线程一般来说 Redis 的瓶颈原创 2021-09-08 15:31:25 · 227 阅读 · 0 评论 -
6.Redis 和 Memcache 的区别
存储方式Redis 支持数据持久性,可以持久化数据到硬盘上。Memcache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。数据类型Redis 有丰富的数据结构,Memcache 只支持简单的字符串类型。数据大小Redis 单个 value 的最大限制是 1GB,Memcache 最大限制是 1MB。但是 Memcache 在存储 100K 以上的数据,性能稍微好一点。...原创 2021-09-08 16:26:15 · 45 阅读 · 0 评论 -
7.Redis 持久化
作用持久化就是把内存的数据写到磁盘中去,防止服务器宕机了内存数据丢失。持久化方式Redis 提供两种持久化机制:RDB(默认)和 AOF 机制。RDB(Redis DataBase)是 Redis 默认的持久化方式。按照一定的时间将内存的数据以快照的形式保存到硬盘中,对应产生的数据为 dump.rdb。通过配置文件中的 save 参数来定义快照的周期。AOF(Append Only File)是将 Redis 执行的每次写命令记录到单独的日志文件中,当重启 Redis 会重新持久化的日志中文件.原创 2021-09-10 16:23:19 · 95 阅读 · 0 评论 -
8.Redis 淘汰策略
淘汰策略相关问题1)如何保证 Redis 中数据都是热点数据?比如,现在 MySQL 数据库里有2000万数据,Redis 中只能存20万数据,如何保证 Redis 中的数据都是热点数据呢?答:在这里就用到了 Redis 的淘汰策略了,首先计算一下 20 万数据大概占用的内存大小,然后设置一下 Redis 的最大内存容量大小,并将淘汰策略为 volatile-lru 或者 allkeys-lru ,Redis 会根据自身数据进行淘汰策略,即淘汰最近最少使用的数据,最后留下来的都是热点数据。2)Re.原创 2021-09-13 15:05:43 · 275 阅读 · 0 评论 -
9.Redis 管道(pipe mode)
Redis 2.6 开始 redis-cli 支持一种新的被称之为 pipe mode(管道)的新模式用于大量数据插入工作。Redis 中的管道技术是指:Redis Pipelining,用于提高 Redis 服务的性能。管道技术可以在服务端还未响应时,客户端任然可以继续向服务端发送请求,即客户端可以发送多个命令到服务端,而不用等待服务器的响应,客户端会在最后再一次性读取所有的服务端的响应。redis的pipeline(管道)功能在命令行中没有,但是redis是支持管道的,在java的客户端(jed.原创 2021-09-13 16:21:54 · 718 阅读 · 0 评论 -
10.Redis 的哈希槽
Redis 集群Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。Redis 集群没有使用一致性hash, 而是引入了哈希槽的概念。Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决.原创 2021-09-13 16:50:16 · 210 阅读 · 0 评论 -
11.Redis 支持的客户端
支持 Java 客户端Redisson、Jedis、lettuce、aredis 等等,官方推荐使用的 Java 客户端是:Redisson。Redisson 框架1)Redisson 简介Redisson 是 Redis 官方推荐的一个高级的分布式协调 Redis 客服端。Redisson 在基于 NIO 的Netty 框架上,充分的利用了Redis键值数据库提供的一系列优势,在Java实用工具包中常用的接口基础上,为使用者提供了一系列具有分布式特性的常用工具类。使得原本作为协调单机多线程并发.原创 2021-09-14 15:06:48 · 689 阅读 · 0 评论 -
12.Redis 缓存预热和缓存热备
缓冲预热新的缓存系统没有任何缓存数据,在缓存重建数据的过程中,系统性能和数据库负载都不太好,所以最好是在系统上线之前就把要缓存的热点数据加载到缓存中,这种缓存预加载手段就是缓存预热。缓存热备缓存热备即当一台缓存服务器不可用时能实现切换到备用缓存服务器,不影响缓存使用。集群模式下,每个主节点都会有一个或多个从节点来当备用,一旦主节点挂掉,从节点立即充当主节点使用。...原创 2021-09-15 16:25:38 · 369 阅读 · 0 评论 -
13.Redis 缓存雪崩
缓存雪崩就是指由于缓存的原因,导致大量请求到达后端数据库,从而导致数据库崩溃,整个系统崩溃,发生灾难。缓存雪崩解决方案:给缓存的失效时间加上一个随机值,避免集体失效。双缓存,我们有两个缓存,缓存 A 和缓存 B 。缓存 A 的失效时间为 20 分钟,缓存 B 不设失效时间。自己做缓存预热操作。然后细分一下几个小点:从缓存 A 读取数据,有则直接返回;A 没有数据,直接从 B 读取数据,直接返回,并且异步启动一个更新线程,更新线程同时更新缓存 A 和缓存 B 。...原创 2021-09-16 10:20:41 · 37 阅读 · 0 评论 -
14.Redis 缓存穿透
缓存穿透:指在高并发场景下,如果某一个key被高并发访问,没有被命中,处于对容错性考虑,会尝试去从后端数据库中获取,从而导致了大量请求达到数据库,而当该key对应的数据本身就是空的情况下,这就导致数据库中并发的去执行了很多不必要的查询操作,从而导致巨大冲击和压力。缓存穿透解决方案:缓存空对象对查询结果为空的对象也进行缓存,如果是集合,可以缓存一个空的集合(非null),如果是缓存单个对象,可以通过字段标识来区分。这样避免请求穿透到后端数据库。同时,也需要保证缓存数据的时效性。这种方式实现起来成本原创 2021-09-16 15:26:18 · 39 阅读 · 0 评论 -
15.Redis 缓存击穿
缓存击穿:实际上是缓存雪崩的一个特例,大家使用过微博的应该都知道,微博有一个热门话题的功能,用户对于热门话题的搜索量往往在一些时刻会大大的高于其他话题,这种我们称为系统的“热点”。由于系统中对这些热点的数据缓存也存在失效时间,在热点的缓存到达失效时间时,此时可能依然会有大量的请求到达系统,没有了缓存层的保护,这些请求同样的会到达 DB 从而可能引起故障。击穿与雪崩的区别即在于击穿是对于特定的热点数据来说,而雪崩是全部数据。解决方案:对于热点数据进行耳机缓存对于不同级别的缓存设定不同的失效时间原创 2021-09-16 16:22:42 · 56 阅读 · 0 评论 -
16.解决 Redis 和数据库双写一致的问题
当数据时效性要求很高时,需要保证缓存中的数据和数据库中保持一致,而且需要保证缓存节点和副本中的数据也保持一致,不能出现差异现象,这就比较依赖缓存的过期和更新策略。一般会在数据发生更改的时候,主动更新缓存中的数据或者移除对应的缓存。#mermaid-svg-4YexqIZeTTAlWQ3M .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333原创 2021-09-17 09:21:50 · 69 阅读 · 0 评论 -
17.Redis 一些危险命令
Redis 的危险命令主要有一下几个:keys客户端可查询所有的存在的键。flushdb删除 Redis 中当前所在数据库中的所有记录,并且此命令从不会执行失败。flushall删除 Redis 中所有数据库中的所有记录,不只是当前所在数据库,并且此命令从不会执行失败。config客户端可修改 Redis 配置。防范措施:在 redis.conf 默认配置文件,找到 SECURITY 区域,添加 rename-command 配置可以禁用和重命名命令,经过以下的配置以后,危险命令就不原创 2021-09-17 09:52:31 · 575 阅读 · 0 评论 -
18.Redis 如何统计独立用户访问量
Hash哈希是 Redis 的一种基础数据结构,Redis 底层维护的是一个开散列,会把不同的key映射到哈希表上,如果是遇到关键字冲突,那么就会来出一个链表出来。当一个用户访问的时候,如果用户登陆过,那么我们就使用用户的 ID ,如果用户没有登陆过,那么我们也能够前端页面随机生成一个 key 用来标识用户。当用户访问的时候,我们可以使用 HSET命令 1,key 可以选择 URI 与对应的日期进行拼凑,field 可以使用用户的 ID 或者随机标识,value 可以简单设置为 1。当我们要统计.原创 2021-09-17 14:49:13 · 353 阅读 · 0 评论