百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

高并发架构系列:Redis的基本介绍,五种数据类型及应用场景分析

mhr18 2024-10-25 12:37 57 浏览 0 评论

一、Redis基本概念介绍和特性

1.1 Redis基本概念介绍

1.Redis是远程的,有客户端和服务端,我们一般说的是服务端;

2.Redis是基于内存的,所以比基于硬盘的MySQL要快很多,但非常吃内存

3.Redis是非关系型数据库。本质上也是数据库,但MySQL关系型数据库存储时必须定义数据词典,而Redis则不需要。

1.2 Redis 和 Memcached比较

Redis数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。

与Memcached一样,为了保证效率,数据都是缓存在内存中。区别的是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

1.3 Redis支持主从同步。

数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。

二、Redis的应用场景

2.1 缓存

Redis常常作为数据缓存

当某些系统接口比较慢的时候,我们可以把一些数据放在Redis中缓存起来,下次取数据就不进行非常耗时的SQL操作了,直接从缓存中取数据,提升系统性能最常用的方法之一;

2.2 队列

push和pop操作保证了原子性的实现;

2.3 数据存储

所有的增删改查都是在Redis中进行,Redis有硬盘的持久化机制,定期进行存储,保证了数据的完整性和安全性。

  • 查看redis客户端: which redis-cli
  • 登录:redis-cli(默认登录本机6379端口)
  • info命令查看redis信息

三、Redis数据类型

在redis里边,除了\n和空格 不能作为名字的组成内容外,其他内容都可以作为key的名字部分。名字长度不做要求。


3.1 String字符串类型的操作



功能:提供字符串或者整型操作。

set key value(string/int/float)
get key
incr string [value]//自增
decrby string [value] //自减

string是redis最基本的类型

redis的string可以包含任何数据。包括jpg图片(二进制)或者序列化的对象。

单个value值最大上限是1G字节。

如果只用string类型,redis就可以被看作加上持久化特性的memcache。

3.2 List链表类型

功能:存储序列集合,可用于队列,push和pop操作

lpush 左进
rpop 右出
llen key 查看list有几个元素

List类型是先进先出,适合队列;List不要求里面的元素是唯一的

(一)介绍

获得最新的10个登录用户信息: select * from user order by logintime desc limit 10;

以上sql语句可以实现用户需求,但是数据多的时候,全部数据都要受到影响,对数据库的负载比较高。必要情况还需要给关键字段(id或logintime)设置索引,索引也比较耗费系统资源。

如果通过list链表实现以上功能,可以在list链表中只保留最新的10个数据,每进来一个新数据就删除一个旧数据。每次就可以从链表中直接获得需要的数据。极大节省各方面资源消耗

(二)应用

list类型其实就是一个双向链表。通过push,pop操作从链表的头部或者尾部添加删除元素。

这使得list既可以用作栈,也可以用作队列。

上进上出 :栈

上进下出 :队列

  1. lrange key 0 -1 取出所有元素。
  2. lrem key n/-n X 删除指定元素n次。
  3. linsert key after/before key1 key2 在key1后/前插入key2。
  4. rpoplpush key1 key2 将key1右边key左入key2链表,原子性

功能:无序集合,每个元素都不一样

3.3 Set类型

set类型,无序的方式存储多个不同的元素,对元素可以进行快速的添加、查找和删除;相同的元素只算一个

redis的set是string类型的无序集合。

set元素最大可以包含(2的32次方-1)个元素。

关于set集合类型除了基本的添加删除操作,

其他有用的操作还包含集合的取并集(union),交集(intersection), 差集(difference)。通过这些操作可以很容易的实现sns中的好友推荐功能

注意:每个集合中的各个元素不能重复。

该类型应用场合:qq好友推荐。

tom朋友圈(与某某是好友):mary jack xiaoming wang5 wang6 
linken朋友圈(与某某是好友):yuehan daxiong luce wang5 wang6 

3.4 hash类型

功能:存储的是key-value结构,key必须是string

经常用于存储比较复杂的结构,Hash只要求键不一样,比如姓名,年龄等等

插入/修改:hset hash1 key1 12
获取:hget hash1 key1
查看hash长度:hlen key
一次性获取:hmget hash1 key1 key2



3.5 Sort Set排序集合类型

功能:存储是带分数的有序集合,经常用于排行榜

sort set 经常被用作排名例如 班级成绩排名

存储和hash一样,都是一个映射。存储的是分数与元素的映射。可以看出是排行榜。

value必须是全局唯一。

score 是浮点型。

sort set类型操作,如果两个元素的score一样,按照字节顺序排列先后

增加/修改:zadd zset1 10.1 val1
查看个数:zcard zset1
查看排名:zrange zset1 0 2 withscores
查看某个value排名:zrank zset1 val2

和set一样sorted set也是string类型元素的集合,不同的是每个元素都会关联一个。 通过权值可以有序的获取集合中的元素。

该Sort set类型适合场合:

获得热门帖子(回复量)信息:select * from message order by backnum desc limit 5;

(以上需求可以通过简单sql语句实现,但是sql语句比较耗费mysql数据库资源)

案例:利用sort set实现获取最热门的前5帖子信息

排序集合中的每个元素都是值、权的组合 (之前的set集合类型每个元素就只是一个 值)

我们只做一个sort set排序集合,里边只保留5个元素信息,该5个元素是回复量最高的

每个帖子被回复的时候,都有机会进入该集合里边,但是只有回复量最高的前5个帖子会存在于在集合,回复量低的就被删除。

最后

读到这的朋友可以转发关注下,后面还会更新更多系列文章分享阅读!

相关推荐

订单超时自动取消业务的 N 种实现方案,从原理到落地全解析

在分布式系统架构中,订单超时自动取消机制是保障业务一致性的关键组件。某电商平台曾因超时处理机制缺陷导致日均3000+订单库存锁定异常,直接损失超50万元/天。本文将从技术原理、实现细节、...

使用Spring Boot 3开发时,如何选择合适的分布式技术?

作为互联网大厂的后端开发人员,当你满怀期待地用上SpringBoot3,准备在项目中大显身手时,却发现一个棘手的问题摆在面前:面对众多分布式技术,究竟该如何选择,才能让SpringBoot...

数据库内存爆满怎么办?99%的程序员都踩过这个坑!

你的数据库是不是又双叒叕内存爆满了?!服务器监控一片红色警告,老板在群里@所有人,运维同事的电话打爆了手机...这种场景是不是特别熟悉?别慌!作为一个在数据库优化这条路上摸爬滚打了10年的老司机,今天...

springboot利用Redisson 实现缓存与数据库双写不一致问题

使用了Redisson来操作Redis分布式锁,主要功能是从缓存和数据库中获取商品信息,以下是针对并发时更新缓存和数据库带来不一致问题的解决方案1.基于读写锁和删除缓存策略在并发更新场景下,...

外贸独立站数据库炸了?对象缓存让你起死回生

上周黑五,一个客户眼睁睁看着服务器CPU飙到100%——每次页面加载要查87次数据库。这让我想起2024年Pantheon的测试:Redis缓存能把WooCommerce查询速度提升20倍。跨境电商最...

手把手教你在 Spring Boot3 里纯编码实现自定义分布式锁

为什么要自己实现分布式锁?你是不是早就受够了引入各种第三方依赖时的繁琐?尤其是分布式锁这块,每次集成Redisson或者Zookeeper,都得额外维护一堆配置,有时候还会因为版本兼容问题头疼半...

如何设计一个支持百万级实时数据推送的WebSocket集群架构?

面试解答:要设计一个支持百万级实时数据推送的WebSocket集群架构,需从**连接管理、负载均衡、水平扩展、容灾恢复**四个维度切入:连接层设计-**长连接优化**:采用Netty或Und...

Redis数据结构总结——面试最常问到的知识点

Redis作为主流的nosql存储,面试时经常会问到。其主要场景是用作缓存,分布式锁,分布式session,消息队列,发布订阅等等。其存储结构主要有String,List,Set,Hash,Sort...

skynet服务的缺陷 lua死循环

服务端高级架构—云风的skynet这边有一个关于云风skynet的视频推荐给大家观看点击就可以观看了!skynet是一套多人在线游戏的轻量级服务端框架,使用C+Lua开发。skynet的显著优点是,...

七年Java开发的一路辛酸史:分享面试京东、阿里、美团后的心得

前言我觉得有一个能够找一份大厂的offer的想法,这是很正常的,这并不是我们的饭后谈资而是每个技术人的追求。像阿里、腾讯、美团、字节跳动、京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司...

mysql mogodb es redis数据库之间的区别

1.MySQL应用场景概念:关系型数据库,基于关系模型,使用表和行存储数据。优点:支持ACID事务,数据具有很高的一致性和完整性。缺点:垂直扩展能力有限,需要分库分表等方式扩展。对于复杂的查询和大量的...

redis,memcached,nginx网络组件

1.理解阻塞io,非阻塞io,同步io,异步io的区别2.理解BIO和AIO的区别io多路复用只负责io检测,不负责io操作阻塞io中的write,能写多少是多少,只要写成功就返回,譬如准备写500字...

SpringBoot+Vue+Redis实现验证码功能

一个小时只允许发三次验证码。一次验证码有效期二分钟。SpringBoot整合Redis...

AWS MemoryDB 可观测最佳实践

AWSMemoryDB介绍AmazonMemoryDB是一种完全托管的、内存中数据存储服务,专为需要极低延迟和高吞吐量的应用程序而设计。它与Redis和Memcached相似,但具有更...

从0构建大型AI推荐系统:实时化引擎从工具到生态的演进

在AI浪潮席卷各行各业的今天,推荐系统正从幕后走向前台,成为用户体验的核心驱动力。本文将带你深入探索一个大型AI推荐系统从零起步的全过程,揭示实时化引擎如何从单一工具演进为复杂生态的关键路径。无论你是...

取消回复欢迎 发表评论: