Redis应用场景

Redis原理和高可用场景实践总结 本文系统介绍了Redis在企业级应用中的核心技术实践方案。主要内容包括:Redis基础原理(线程模型、数据类型、事务处理);持久化机制(RDB和AOF的优缺点及选择策略);高可用架构(主从复制、哨兵机制、集群模式);性能优化(内存管理、网络参数调优);常见问题解决方案(雪崩、穿透、并发竞争);以及生产环境部署建议。文章详细对比了不同架构的适用场景,提供了企业级数据备份方案,并针对各种业务场景给出了具体的技术选型和实现方案,是一份全面的Redis应用指南。 阅读详情

Redis 开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作,为不同的大象构建不同的冰箱。

Redis常用数据类型

Redis最为常用的数据类型主要有以下五种:

  • String
  • Sorted set

在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部内存管理中是如何描述这些不同数据类型的:

首先Redis内部使用一个redisObject对象来表示所有的key和value,redisObject最主要的信息如上图所示:type代表一个value对象具体是何种数据类型,encoding是不同数据类型在redis内部的存储方式,比如:type=string代表value存储的是一个普通字符串,那么对应的encoding可以是raw或者是int,如果是int则代表实际redis内部是按数值型类存储和表示这个字符串的,当然前提是这个字符串本身可以用数值表示,比如:"123" "456"这样的字符串。

这里需要特殊说明一下vm字段,只有打开了Redis的虚拟内存功能,此字段才会真正的分配内存,该功能默认是关闭状态的,该功能会在后面具体描述。通过上图我们可以发现Redis使用redisObject来表示所有的key/value数据是比较浪费内存的,当然这些内存管理成本的付出主要也是为了给Redis不同数据类型提供一个统一的管理接口,实际作者也提供了多种方法帮助我们尽量节省内存使用,我们随后会具体讨论。

下面我们先来逐一的分析下这五种数据类型的使用和内部实现方式:

  • String

    常用命令:

    set,get,decr,incr,mget 等。

    应用场景:

    String是最常用的一种数据类型,普通的key/value存储都可以归为此类,这里就不所做解释了。

    实现方式:

    String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。

  • Hash

    常用命令:

    hget,hset,hgetall 等。

    应用场景:

    我们简单举个实例来描述下Hash的应用场景,比如我们要存储一个用户信息对象数据,包含以下信息:

    用户ID为查找的key,存储的value用户对象包含姓名,年龄,生日等信息,如果用普通的key/value结构来存储,主要有以下2种存储方式:

    第一种方式将用户ID作为查找key,把其他信息封装成一个对象以序列化的方式存储,这种方式的缺点是,增加了序列化/反序列化的开销,并且在需要修改其中一项信息时,需要把整个对象取回,并且修改操作需要对并发进行保护,引入CAS等复杂问题。

    第二种方法是这个用户信息对象有多少成员就存成多少个key-value对儿,用用户ID+对应属性的名称作为唯一标识来取得对应属性的值,虽然省去了序列化开销和并发问题,但是用户ID为重复存储,如果存在大量这样的数据,内存浪费还是非常可观的。

    那么Redis提供的Hash很好的解决了这个问题,Redis的Hash实际是内部存储的Value为一个HashMap,并提供了直接存取这个Map成员的接口,如下图:

    也就是说,Key仍然是用户ID, value是一个Map,这个Map的key是成员的属性名,value是属性值,这样对数据的修改和存取都可以直接通过其内部Map的Key(Redis里称内部Map的key为field), 也就是通过 key(用户ID) + field(属性标签) 就可以操作对应属性数据了,既不需要重复存储数据,也不会带来序列化和并发修改控制的问题。很好的解决了问题。

    这里同时需要注意,Redis提供了接口(hgetall)可以直接取到全部的属性数据,但是如果内部Map的成员很多,那么涉及到遍历整个内部Map的操作,由于Redis单线程模型的缘故,这个遍历操作可能会比较耗时,而另其它客户端的请求完全不响应,这点需要格外注意。

    实现方式:

    上面已经说到Redis Hash对应Value内部实际就是一个HashMap,实际这里会有2种不同实现,这个Hash的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,对应的value redisObject的encoding为zipmap,当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。

  • List

    常用命令:

    lpush,rpush,lpop,rpop,lrange等。

    应用场景:

    Redis list的应用场景非常多,也是Redis最重要的数据结构之一,比如twitter的关注列表,粉丝列表等都可以用Redis的list结构来实现,比较好理解,这里不再重复。

    实现方式:

    Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。

  • Set

    常用命令:

    sadd,spop,smembers,sunion 等。

    应用场景:

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

    实现方式:

    set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。

Sorted set

常用命令:

zadd,zrange,zrem,zcard等

使用场景:

Redis sorted set的使用场景与set类似,区别是set不是自动有序的,而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。当你需要一个有序的并且不重复的集合列表,那么可以选择sorted set数据结构,比如twitter 的public timeline可以以发表时间作为score来存储,这样获取时就是自动按时间排好序的。

实现方式:

Redis sorted set的内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射,而跳跃表里存放的是所有的成员,排序依据是HashMap里存的score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。

用AI+Playwright实现零代码UI自动化测试:以登录页面为例的实战指南 本文详细介绍了如何利用AIPlaywright结合实现零代码UI自动化测试,特别以登录页面为例进行实战演示。通过自然语言描述生成测试脚本,大幅降低技术门槛,提升测试效率,并支持跨浏览器验证。适合非技术人员快速上手专业级自动化测试。 阅读详情

相关推荐

一个开源的AI数据分析工具,数据对话,一键生成SQL、图表、表格、报告和智能商业分析。

Wren AI是一个开源的AI智能代理,让用户能够跟数据对话,实现从文本到SQL的转换,还能生成图表、电子表格、报告以及商业智能分析。它支持多种语言,能深入挖掘数据价值,提供智能数据探索功能,通过语义索引和精心设计的界面,让用户无需写代码即可获取洞察。Wren AI采用独特的架构,包含Wren UI、Wren AI Service和Wren Engine三大核心服务,可部署在本地或云端,助力团队高效、安全地解锁数据潜力。

AI_Charlotte的博客 4443

redis应用场景简介

去年我写的培训用教材,redis应用场景简介,简单列举了一些Redis的使用场景。 发现下载积分居然无法调整……

opendds测试程序学习

数据订阅发布的模式开启了已数据为中心的时代,dds模型是规范的结构。看了相关东西。只有opendds是开源较完善的,其功能值得研究,虽然它病不是优秀的,其性能和效率都有待提高,不过开源中是最佳学习的。简单封装了点测试研究代码。由于完整封装的代码需要配置tao,ace,因此没有上传。

DDS通信中间件——概述

数据分发服务 通信中间件概述

NJzhenrong的博客 1万+

缓存中间件Redis技术入门应用场景实战(SpringBoot2.x + 抢红包系统设计实战

概要介绍:历经半个多月的时间,Debug呕心沥血、亲自录制的 “缓存中间件Redis技术入门典型应用场景实战(SpringBoot2.x)”的新课终于完成了,顾名思义,这是一门关于目前相当流行的分布式缓存中间件Redis相关技术栈的介绍实战,目的在于带领各位小伙伴一起学习、攻克Redis,更好地巩固自己的核心竞争力,跳槽涨薪 自然不在话下! 值得介绍的是,本课程在技术层面涵盖了中间件Redis的相关技术栈,比如数据结构String、List、Set、SortedSet以及Hash等等,除此之外,在设计并实战“抢红包系统”以及实战各种数据结构对应的应用场景期间,也使用了微服务、分布式相关的技术。包括SpringBoot2.x、Mybatis、热部署工具、二倍均值法、多线程并发编程、发送邮件等等。

RDS、DDS和GaussDB理不清?看这一篇足够了!

当前,华为云提供的数据库服务主要包括三大类:关系型数据库服务,非关系型数据库服务以及数据库工具服务。如下图所示: 关系型数据库和非关系型数据库均可分为开源和自研两大类。其中,自研数据库统一为GaussDB系列,开源数据库则可以分为RDS和DDS社区版。 关系型数据库RDS:开源版本的云上优化 RDS(Relational Database Service,关系型数据库服务)是一种基于云计算平台的即开即用、稳定可靠、弹性伸缩、便捷管理的在线关系型数据库服务。 目前华为云提供的RDS服务包括:RDS

华为云官方博客 4617

对DDS的深度认识

我知道,我对电子有关的所有事情都很着迷,但不论从哪个角度看,今天的现场可编程门阵列(FPGA),都显得“鹤立鸡群”,真是非常棒的器件。如果在这个智能时代,在这个领域,想拥有一技之长的你还没有关注FPGA,那么世界将抛弃你,时代将抛弃你。本公众号作者ALIFPGA,多年FPGA开发经验,所有文章皆为多年学习和工作经验之总结。 DDS是直接数字式频率合成器(Direct Digital...

weixin_30735391的博客 925

redisredis的特性和主要应用场景

redis的特性:在内存中存储数据、可编程的、扩展能力、持久化、集群、高可用、快。 redis应用场景:实时数据存储缓存、消息队列

Yeeear的博客 1万+

Redis应用场景

Redis 提供了丰富的数据类型,每种类型都有其独特的应用场景。在实际开发中,选择合适的数据结构可以大大提高系统的性能和效率。掌握 Redis 的这些常见数据类型及其应用场景,将帮助你设计出更加高效的系统。

小小程序猿 2392

Redis特性和应用场景以及安装

介绍Redis特性和应用场景以及安装

chaodddddd的博客 1018

Redis应用场景简介

REmote DIctionary Server(Redis)是完全开源免费的,遵守 BSD 协议,是一个高性能的key-value数据库。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。 注:BSD开源协议(original BSD license、Free...

这世上所有的久处不厌,都是因为用心 2085

Redis应用场景列表

Redis核心应用场景摘要 Redis作为高性能键值数据库,主要应用于以下场景: 缓存加速:高频读取场景如商品详情、用户资料,使用String/Hash结构,配合Spring Cache实现 会话共享:分布式系统会话存储,通过Spring Session整合Redis 排行榜/计数:ZSET结构实现实时排名,Lua脚本保证原子性 消息队列:使用List/Stream结构处理异步任务,支持削峰填谷 分布式锁:SETNX实现跨进程互斥,Redisson提供完善锁机制 实时统计:HASH/INCR处理IoT数据

weixin_39956506的博客 655

Redis有哪些常用应用场景

Redis有哪些常用应用场景

java1234的博客 1067

redis应用场景

1. 监控内存使用情况:使用 Redis 的监控工具或命令(如`INFO`命令)来实时了解内存的使用量、占用率等指标。例如,可以设置合适的 RDB 保存时间间隔和 AOF 文件的同步策略,以平衡性能和数据安全性。总之,在使用 Redis 时,需要充分了解其特性和功能,并根据实际应用场景进行合理的配置和优化,以确保系统的稳定性、安全性和性能。3. 定期备份数据:除了依赖 Redis 的持久化机制,还应定期对 Redis 数据进行外部备份,以防止数据丢失或损坏。确保密码具有足够的强度,避免被破解。

A_qsmy的博客 1040

redis面试——redis应用场景

Redis 作为一种高性能的内存数据库,凭借其丰富的数据结构、灵活的应用场景和强大的功能,已成为现代应用架构中不可或缺的一部分。通过合理的设计和优化,Redis 可以在缓存、消息队列、实时分析、分布式锁、会话管理等多个方面发挥重要作用,显著提升系统的性能、可扩展性和可靠性。

2401_86405063的博客 2401

redis应用场景

转自http://www.cnblogs.com/xiaoxi/p/7007695.html#undefined  毫无疑问,Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作,为不同的大象构建不同的冰箱。希望你喜欢这个比喻。 一、Redis常用数据类型 Redis最...

活成自己想要的模样 2万+

Redis 的 8 大应用场景

之前讲过Redis的介绍,及使用Redis带来的优势,这章整理了一下Redis应用场景,也是非常重要的,学不学得好,能正常落地是关键。 下面一一来分析下Redis应用场景都有哪些。 1、缓存 缓存现在几乎是所有中大型网站都在用的必杀技,合理的利用缓存不仅能够提升网站访问速度,还能大大降低数据库的压力。Redis提供了键过期功能,也提供了灵活的键淘汰策略,所以,现在Redis用在缓存的场合非...

风的专栏 4821

Redis系列漏洞总结

未授权访问;redis写入webshell;redis写入ssh公钥登录;写入计划任务反弹shell;主从复制rce;什么是主从复制;ssrf+redis写入webshell;Redis Lua 沙盒绕过rce

NLost 7833

Redis:只刷面试题,怎可能进大厂,多理解原理(Redis的复制)

asds 复制的目的:进行复制中的主从服务器双方的数据库将保存相同的数据,概念上将这种现象称作“ 数据库状态一致",或者简称“ 一致 ” 。 asdsadasdasdasdsadasdasdasdsadassdasdsasdsadsdasdasdsadasdasdsadasdsadassadasdas————《Redis设计实现》 命令请求的执行过程 asa在 Redis 中,用户可以通过执行 SLAVEOF 命令,让一个服务器去 复制 另一个服务器。被复制的服务器为 主服务器, 而对主服务器进.

置身于量子事业的软件开发爱好者 442

基于python的金融文本情感分析模型代码实现

基于python的金融文本情感分析模型代码实现

上一篇: redis读写性能测试
下一篇: DES 3DES AES Blowfish 对称加密算法比较
nightelve
博客等级 码龄22年 108粉丝 64原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值