缓存—Redis

本文涉及的产品
云数据库 Redis 版,标准版 2GB
推荐场景:
搭建游戏排行榜
云原生内存数据库 Tair,内存型 2GB
简介: 谈及缓存,在软件开发时经常用到缓存是Redis,算是使用最广法的缓存中间件。当然,在面试的过程中,Redis也是经常被询问的题目

谈及缓存,在软件开发时经常用到缓存是Redis,算是使用最广法的缓存中间件。

当然,在面试的过程中,Redis也是经常被询问的题目

Redis是单线程吗?

redis的单线程,是指Redis的网络I/O线程,以及键值的SET和GET等读写操作都由一个线程完成

但是,在Redis持久化、集群同步等操作,是由其他线程来执行

Redis单线程为什么快?

  • Redis的大部分操作都是在内存中完成
  • 采用了高效的数据结构,比如Hash、跳表
  • 单线程模型,避免了多线程间切换的产生的其他时间和性能开销
  • 单线程模型,也不用去考虑因多线程导致死锁的问题
  • Redis采用了I/O多路复用机制处理大量的客户端Socket请求,使得Redis更高效进行网络通信(重要因素)

注意点:

Redis 4.0版本后,增加多线程支持,主要体现在大数据的异步删除功能

Redis 6.0版本后,新增多线程I/O的读写并发能力(即采用了多个I/O线程来处理网络请求)

Redis持久化

面试时,经常会被提问:如何保持数据不丢失?其主要是考察Redis持久化问题,如何去做持久化?

什么情况Redis数据会丢失?

缓存数据在内存中,如果服务器重启时,内存中的数据就会丢失。为了保证数据不丢失,将数据存储到磁盘中,以便服务器重启后,能够从磁盘中恢复原有的数据。

持久化的三种方式:

  • AOF日志(Append only File 文件追加方式):记录所有的操作命令,并以文本形式追加到文件中
  • RDB快照(Redis DataBase):将某时刻的内存数据,以二进制形式写入磁盘
  • 混合持久化方式:redis4.0版本后新增的混合持久化方式

Redis 数据类型

基础数据类型

String

  • 常用命令:set/get/decr/incr/mget
  • 使用场景:普通的key/value存储

Hash

  • 常用命令:hget/hset/hgetall
  • 使用场景:存储某对象数据

List

  • 常用命令:lpush/rpush/lpop/rpoplrange
  • 使用场景:存储列表数据(如微博关注列表/粉丝列表等)

Set(集合)

  • 常用命令:sadd/spop/smembers/sunion等
  • 使用场景:Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的

Sorted set(有序集合)

  • 常用命令:zadd/zrange/zrem/zcard等
  • 使用场景:和set一样,但是有序集合通过用户额外提供一个优先级score的参数来为成员排序,并且插入也是有序

特殊数据类型(进阶)

Bitmap 位图

  • 使用方法:

    • setbit key index 0/1 设置某位的值
    • getbit key index 获取某位的值
    • bitcount key start end 获取指定范围内为1的数量
  • 使用场景:统计用户一年活跃天数

GeoHash地理位置

  • 使用方法:

    • geoadd key longitude latitude element(后面可配置多个三元组) 添加元素
    • geodist key element1 element2 unit 计算两个元素的距离
    • geopos key element [element] 获取元素的位置
    • geohash key element 获取元素hash
  • 使用场景:常用于计算附近的人,附近商店

HyperLogLog 基数统计

  • 使用方法:

    • pfadd key element 添加
    • pfcount key 计算
    • pfmerge destkey sourcekey1 sourcekey2 ... 合并
  • 使用场景:提供不精确的去重技术方案

bloomFilter布隆过滤器

  • 使用方法

    • bf.add key element 添加
    • bf.exists key element 判断是否存在
    • bf.madd key element1 element2 ... 批量添加
    • bf.mexists key element1 element2 ... 批量判断
  • 使用场景:网站去重,垃圾邮件过滤,缓存穿透
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
6天前
|
canal 缓存 NoSQL
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
根据对一致性的要求程度,提出多种解决方案:同步删除、同步删除+可靠消息、延时双删、异步监听+可靠消息、多重保障方案
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
|
23天前
|
缓存 NoSQL Java
Redis深度解析:解锁高性能缓存的终极武器,让你的应用飞起来
【8月更文挑战第29天】本文从基本概念入手,通过实战示例、原理解析和高级使用技巧,全面讲解Redis这一高性能键值对数据库。Redis基于内存存储,支持多种数据结构,如字符串、列表和哈希表等,常用于数据库、缓存及消息队列。文中详细介绍了如何在Spring Boot项目中集成Redis,并展示了其工作原理、缓存实现方法及高级特性,如事务、发布/订阅、Lua脚本和集群等,帮助读者从入门到精通Redis,大幅提升应用性能与可扩展性。
49 0
|
7天前
|
存储 NoSQL Redis
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
Redis持久化、RDB和AOF方案、Redis主从集群、哨兵、分片集群、散列插槽、自动手动故障转移
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
|
17天前
|
缓存 NoSQL 关系型数据库
MySQL与Redis缓存一致性的实现与挑战
在现代软件开发中,MySQL作为关系型数据库管理系统,广泛应用于数据存储;而Redis则以其高性能的内存数据结构存储特性,常被用作缓存层来提升数据访问速度。然而,当MySQL与Redis结合使用时,确保两者之间的数据一致性成为了一个重要且复杂的挑战。本文将从技术角度分享MySQL与Redis缓存一致性的实现方法及其面临的挑战。
42 2
|
20天前
|
Java UED Maven
紧跟技术潮流:手把手教你构建响应式Vaadin应用,让用户体验无缝接轨!
【8月更文挑战第31天】本文从零开始,详细介绍如何使用强大的Java框架Vaadin构建流畅且响应式的Web应用程序。首先,确保安装JDK 1.8+、Maven 3.3.9+及IDE。接着,创建Maven项目并添加Vaadin依赖。然后,通过继承`UI`类创建主界面,并定义自定义主题与样式。利用Vaadin的响应式布局组件,如`HorizontalLayout`和`VerticalLayout`,实现多设备兼容性。
27 0
|
20天前
|
缓存 NoSQL Redis
Entity Framework Core 与 Redis 强强联手!实现高速缓存,提升应用性能超厉害
【8月更文挑战第31天】在现代应用开发中,结合 Entity Framework Core 与 Redis 可显著提升数据访问速度。Entity Framework Core 是一个强大的 ORM 框架,但处理频繁访问的数据时可能遇到性能瓶颈。Redis 作为高性能内存数据库,具备快速读写能力。两者结合利用 Redis 高速缓存,减少直接数据库访问,提高应用响应速度及性能。
31 0
|
22天前
|
缓存 NoSQL Java
惊!Spring Boot遇上Redis,竟开启了一场缓存实战的革命!
【8月更文挑战第29天】在互联网时代,数据的高速读写至关重要。Spring Boot凭借简洁高效的特点广受开发者喜爱,而Redis作为高性能内存数据库,在缓存和消息队列领域表现出色。本文通过电商平台商品推荐系统的实战案例,详细介绍如何在Spring Boot项目中整合Redis,提升系统响应速度和用户体验。
44 0
|
存储 缓存 NoSQL
Spring Boot2.5 实战 MongoDB 与高并发 Redis 缓存|学习笔记
快速学习 Spring Boot2.5 实战 MongoDB 与高并发 Redis 缓存
Spring Boot2.5 实战 MongoDB 与高并发 Redis 缓存|学习笔记
|
缓存 NoSQL 安全
6.0Spring Boot 2.0实战 Redis 分布式缓存6.0|学习笔记
快速学习6.0Spring Boot 2.0实战 Redis 分布式缓存6.0。
311 0
6.0Spring Boot 2.0实战 Redis 分布式缓存6.0|学习笔记
|
缓存 NoSQL Redis
首页数据显示-添加 redis 缓存(3)| 学习笔记
快速学习 首页数据显示-添加 redis 缓存(3)
138 0
首页数据显示-添加 redis 缓存(3)| 学习笔记