缓存—Redis

本文涉及的产品
云数据库 Redis 版,社区版 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天前
|
缓存 监控 NoSQL
redis 缓存穿透 击穿 雪崩 的原因及解决方法
redis 缓存穿透 击穿 雪崩 的原因及解决方法
|
1天前
|
存储 缓存 NoSQL
了解Redis,第一弹,什么是RedisRedis主要适用于分布式系统,用来用缓存,存储数据,在内存中存储那么为什么说是分布式呢?什么叫分布式什么是单机架构微服务架构微服务的本质
了解Redis,第一弹,什么是RedisRedis主要适用于分布式系统,用来用缓存,存储数据,在内存中存储那么为什么说是分布式呢?什么叫分布式什么是单机架构微服务架构微服务的本质
|
7天前
|
存储 缓存 NoSQL
Redis 缓存失效策略及其应用场景
Redis 缓存失效策略及其应用场景
29 1
|
9天前
|
缓存 NoSQL 关系型数据库
redis(缓存)
redis(缓存)
16 0
|
11天前
|
存储 缓存 监控
利用Redis构建高性能的缓存系统
在现代Web应用中,性能优化是提升用户体验和响应速度的关键。Redis作为一款开源的内存数据结构存储系统,因其出色的性能、丰富的数据结构和灵活的使用方式,成为了构建高性能缓存系统的首选工具。本文将探讨Redis在缓存系统中的应用,分析其优势,并通过实例展示如何结合Redis构建高效、可靠的缓存系统,以应对高并发、大数据量等挑战。
|
15天前
|
缓存 NoSQL Redis
【后端面经】【缓存】36|Redis 单线程:为什么 Redis 用单线程而 Memcached 用多线程?-- Redis多线程
【5月更文挑战第21天】Redis启用多线程后,主线程负责接收事件和命令执行,IO线程处理读写数据。请求处理流程中,主线程接收客户端请求,IO线程读取并解析命令,主线程执行后写回响应。业界普遍认为,除非必要,否则不建议启用多线程模式,因单线程性能已能满足多数需求。公司实际场景中,启用多线程使QPS提升约50%,或选择使用Redis Cluster以提升性能和可用性。
28 0
|
16天前
|
NoSQL Redis 数据库
【后端面经】【缓存】36|Redis 单线程:为什么 Redis 用单线程而 Memcached 用多线程?-- Memcache + Redis 多线程
【5月更文挑战第20天】Redis采用单线程模式以避免上下文切换和资源竞争,简化调试,且其性能瓶颈在于网络IO和内存,而非多线程。相比之下,Memcache使用多线程能更好地利用多核CPU,但伴随上下文切换和锁管理的开销。尽管Redis单线程性能不俗,6.0版本引入多线程以提升高并发下的IO处理能力。启用多线程后,Redis结合Reactor和epoll实现并发处理,提高系统性能。
37 0
|
7月前
|
缓存 NoSQL 安全
Redis缓存雪崩、击穿、穿透解释及解决方法,缓存预热,布隆过滤器 ,互斥锁
Redis缓存雪崩、击穿、穿透解释及解决方法,缓存预热,布隆过滤器 ,互斥锁
201 5
|
8月前
|
缓存 NoSQL 数据库
Redis学习笔记-如何应对缓存雪崩、击穿、穿透
Redis学习笔记-如何应对缓存雪崩、击穿、穿透
41 0
|
存储 缓存 NoSQL
Redis --- 缓存雪崩、击穿、穿透与数据库缓存双一致性
Redis --- 缓存雪崩、击穿、穿透与数据库缓存双一致性
Redis --- 缓存雪崩、击穿、穿透与数据库缓存双一致性