返回顶部
首页 > 资讯 > 精选 >Redis的数据结构及应用场景
  • 784
分享到

Redis的数据结构及应用场景

2023-06-02 19:06:48 784人浏览 八月长安
摘要

一. 谈谈对redis的理解,它的应用场景。Redis是一个key-value存储系统,它支持存储的value类型包括string字符串、list链表、set集合、sorted Set有序集合和hash哈希等数据类型。这些数据类型都支持pu

一. 谈谈对redis的理解,它的应用场景。

Redis是一个key-value存储系统,它支持存储的value类型包括string字符串、list链表、set集合、sorted Set有序集合和hash哈希等数据类型。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的,支持各种不同方式的排序。为了保证效率,Redis将数据都缓存在内存中,并周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,在此基础上实现master-slave(主从)同步。

Redis的应用场景 数据类型应用场景StringString是最常用的一种数据类型,普通的key/value存储都可以归为此类。List关注列表、粉丝列表、消息队列等。SetSet提供一个与 List类似的列表功能,特殊之处在于Set会自动排序、去重,当需要存储一个列表数据,又不希望有重复数据时,Set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。

使用Set存储一些集合性的数据,比如在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合;

可以对集合取交集、并集、差集,应用到好友推荐、共同关注等。

还可以利用唯一性,统计访问网站的所有独立IP。

SortedSetSortedSet与Set的使用场景类似,是不允许重复项的String集合。

SortedSet可以通过提供一个优先级(score)的参数为成员排序,并且是插入有序的,即自动排序,可以应用于积分排行榜等。

如果需要一个有序且不重复的集合列表,可以选择sorted set数据结构,比如twitter 的public timeline可以以发表时间作为score来存储,这样获取时就是自动按时间排好序的。

用SortedSet做带权重的队列,比如普通消息的score为1,重要消息的score为2,然后工作线程可以选择按score的倒序来获取工作任务,让重要的任务优先执行。

Hash 存储一个学生信息对象数据,字段包括:id、姓名、班级、年龄等,通过id可以获取/修改任意的字段。

二. 既然一般的语言也能支持string、list、hash等数据结构,为什么还要用redis呢?

这里要先提一下内存和缓存的区别:

内存是物理上的,是一种物理存储介质。

缓存是逻辑上的概念,是一种数据结构,可以是PHP语言里面的一种数据结构,也可以是Redis里面的一种数据结构。比如:用php数组存一些数据,每次有需求就直接从数组中读取;用PHP语言设计了一个缓存,用一个数组做队列,设计了一个基于先进先出策略的缓存;调用Redis的一些数据结构来存储数据。

内存叫做RAM,随机可读存储器,硬盘一般叫做ROM,随机只读存储器。

缓存包括cpu的一二级缓存、纯内存结构的缓存、半内存缓存、磁盘缓存,它们的速度是一层比一层慢。当CPU要读取一个数据时,首先从一级缓存中查找,如果没有找到再从二级缓存中查找,如果还是没有就从三级缓存或内存中查找,程序里面的各种数据结构、变量等等,都是运行在内存里面,而不是在硬盘上。

假设有一个场景,比如历史用户日志访问数据,就是access_log,让你去统计都有哪些用户登录了这个网站,当然现在还有用户在持续登录着。这个时候你是不是要先去从access_log里面读取日志,然后提取出日志里面的userId,存到数组里面再去重。当新用户来的时候,你只需要和你数组里面的用户进行比较即可,就不需要再读取access_log文件了。这样就不用每次读取文件,只需要读取数组即可,速度回更快。 同理用Redis,也是因为当我们需要读取数据时,先从Redis查找,如果有就直接返回,不用再从mysql查找,速度会很快。

从原理上讲,PHP里面的数据结构用的是纯内存,而Redis是需要走网络的;

从速度上讲,纯内存的速度肯定是比先走网络、再从内存中读取的速度快。

虽然Redis作为半内存缓存,没有直接内存结构的数据结构速度快,但Redis除了数据结构丰富外,还适合高并发场景,对高并发处理效率极高,此外可以做到集群式、可持久化。

三. 具体讲一下Redis的数据结构,尽可能的举出他们的应用场景。

Redis支持String、List、Set、Sorted Set、Hash等。

  • String类型是二进制安全的,可以用来缓存一些静态文件,如图片、视频、CSS文件等。支持incr操作,可以用作计数器,比如统计网站访问次数等。
  • 微博中“关注、粉丝”、论坛中所有回帖的ID用的就是list列表,还有消息队列,也是列表。
  • Set可以快速查找元素是否存在,用于记录一些不能重复的数据。例如: 在网站注册账号时,用户名不能重复,使用Set记录注册用户,如果注册的用户名已经存在于Set中,就拒绝该用户注册。或者用于记录做过某些事情。例如: 在某些投票系统中,每个用户一天只能投票一次,就可以用Set来记录某个用户的投票情况。
  • 顺便给大家推荐一个Java架构群:834962734 里面会分享一些资深架构师录制的视频资料:有springmybatisNetty源码分析,高并发、高性能、分布式微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多!
  • Set能做的事Sorted Set也能做,Sorted Set还能完成一些Set不能做的事情。例如:使用Sorted Set构建一个具有优先级的队列。
  • Hash适用于存储对象,比如把用户的信息存到hash里,以用户id为key,用户的详细信息为value。

--结束END--

本文标题: Redis的数据结构及应用场景

本文链接: https://lsjlt.com/news/231045.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Redis的数据结构及应用场景
    一. 谈谈对redis的理解,它的应用场景。Redis是一个key-value存储系统,它支持存储的value类型包括string字符串、list链表、set集合、sorted Set有序集合和hash哈希等数据类型。这些数据类型都支持pu...
    99+
    2023-06-02
  • redis五种数据结构及使用场景
    redis 提供五种数据结构:字符串(存储简单数据)、哈希表(存储对象数据)、列表(存储消息队列)、集合(存储不重复元素)和有序集合(按评分存储排序元素)。 Redis 的五种数据结构...
    99+
    2024-04-19
    redis 键值对
  • Redis中5种数据结构的使用场景
    这篇文章给大家分享的是有关Redis中5种数据结构的使用场景的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。一、redis 数据结构使用场景原来看过 redisbook 这本书,对...
    99+
    2024-04-02
  • redis数据类型及应用场景知识点总结
    redis数据类型及应用场景 Redis支持5种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。 一、string 简介:S...
    99+
    2024-04-02
  • redis数据库应用场景
    redis 数据库在下列应用场景中广泛使用:缓存存储:提高访问速度和性能。会话管理:提供无缝的用户体验。队列处理:高效处理消息。计数器:存储和维护递增计数。排行榜:快速获取和显示最佳结果...
    99+
    2024-04-19
    redis 并发访问
  • Redis中5种数据结构的使用场景介绍
    一、redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码。目前目标是吃透 redis 的数据结构。我们都知道,在 re...
    99+
    2022-06-04
    种数 场景 结构
  • 浅谈redis五大数据结构和使用场景
    老规矩,先抛结论后验证 string:有点像java的hashMap,存的时候什么key,取的时候也什么key,常用于做缓存,保存用户信息、查询列表等; hash:这个有点像h...
    99+
    2024-04-02
  • Redis数据类型及应用场景是什么
    小编给大家分享一下Redis数据类型及应用场景是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. string类型1-1 ...
    99+
    2024-04-02
  • Redis数据库的应用场景介绍
    一、MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,...
    99+
    2022-06-04
    场景 数据库 Redis
  • Redis在大数据处理中的作用及应用场景
    标题:Redis在大数据处理中的作用及应用场景引言:随着互联网的快速发展,数据量也在不断增长。对于大数据的处理和存储成为了一个重要的问题。在这个过程中,Redis作为一种高性能的内存缓存数据库,发挥了重要的作用。本文将详细介绍Redis在大...
    99+
    2023-11-07
    高性能 实时数据处理 数据持久化 作用: 缓存 应用场景: 分布式计算
  • redis五大数据结构和使用场景的示例分析
    这篇文章主要介绍redis五大数据结构和使用场景的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!老规矩,先抛结论后验证string:有点像java的hashMap,存的时候什么key,取的时候也什么key,常...
    99+
    2023-06-14
  • redis的应用场景
    这篇文章主要探讨了redis的应用场景,具有一定借鉴价值,需要的朋友可以参考下。如下资料是关于redis的应用场景内容。一:缓存——热数据热点数据(经常会被查询,但是不经常被修改或者删除的数据),首选是使用...
    99+
    2024-04-02
  • redis数据库的应用场景有哪些
    Redis数据库有以下应用场景:1. 缓存:由于Redis具有高速读取和写入的能力,可以用作缓存数据库,将热门的数据存储在Redis...
    99+
    2023-09-21
    redis数据库
  • Redis的数据类型和应用场景介绍
    1.string类型...
    99+
    2024-04-02
  • Redis-nosql应用场景
                》演变过程           》数据的获取不单单单单是从mysql等关系型数据库中获取了      》商品的基本信息          》商品的评价,描述等      》商品的图片     》商品的波段性的...
    99+
    2014-11-06
    Redis-nosql应用场景 数据库入门 数据库基础教程 数据库 mysql
  • Redis 中ZSET数据类型命令使用及对应场景总结(案例详解)
    目录1.zadd添加元素2.zrem 从有序集合key中删除元素3.zscore 返回有序集合key中元素member的分值4.zincrby 为有序集合key中元素增加分值5.zc...
    99+
    2023-01-03
    Redis 中ZSET数据类型命令 Redis ZSET数据类型
  • Redis 中ZSET数据类型命令使用及对应场景总结(案例详解)
    目录1.zadd添加元素2.zrem 从有序集合key中删除元素3.zscore 返回有序集合key中元素member的分值4.zincrby 为有序集合key中元素增加分值5.zcard获取有序集合key中元素总个数6...
    99+
    2023-01-03
    Redis 中ZSET数据类型命令 RedisZSET数据类型
  • Redis多种数据类型以及使用场景
    SDS简单动态字符串 struct sdshdr { // 记录buf数组中已使用字节的数量 // 等于SDS所保存字符串的长度 int len; // 记录buf数组中未使用字节的数量 int free; // 字节数组,用于保存字符...
    99+
    2014-11-22
    Redis多种数据类型以及使用场景
  • Redis数据类型及使用场景有哪些
    这篇文章主要介绍“Redis数据类型及使用场景有哪些”,在日常操作中,相信很多人在Redis数据类型及使用场景有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Redis数...
    99+
    2024-04-02
  • 什么是redis数据库,及其使用场景
    redis 是一种开源键值存储数据库,通过将数据存储在内存中提供极高的性能。它支持多种数据结构,例如字符串、哈希表、链表和集合。redis 的应用场景广泛,包括缓存、会话管理、消息传递、...
    99+
    2024-04-19
    redis
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作