首页 > 数据库 >Redis的五中数据类型以及应用场景

Redis的五中数据类型以及应用场景

时间:2023-09-20 16:35:11浏览次数:39  
标签:set hash list Redis 列表 链表 五中 字符串 数据类型

1.string 字符串

在redis中string是可以修改de被称之为动态字符串.其中内部更像arraylist

内部维护一个字节数组,在其内部分配了一定的空间.

内存分配机制

当字符串的长度小于1m的时候,每次扩容都是加倍空间

当字符串长度超过1m的时候每次扩容只会扩张1m的空间

字符串的最大长度是512mb.

  1. list 列表

Redis中的listJava中的LinkedList很像,底层都是一种链表结构, list的插入和删除操作非常快,时间复杂度为 0(1),不像数组结构插入、删除操作需要移动数据。

但list的数据结构可不是双向列表

当数据量较少的时候它的底层数据节后为一块连续的内存 被称为 ziplist

就是说底层所有元素紧挨着 分配的是一块连续的储存空间,当数据量较多的时候就会变成 quicklist(快速链表.) 可是由于链表的前后指针回prev和next会占用较多的内存 首先会占用空间其次会加重内存碎片化 在redis3.2之后都改成了ziplist+链表的混合结构

应用场景

由于list是一个按照顺序排列的列表所以应用场景一般是

队列功能比如消息队列.

朋友圈滇藏.评论列表排行榜每次通过lpush命令和lrange命令能实现最近新列表功能

3hash(字典)

redisd的hash结构和java的hashmap相识是数 数组加列表的结构 当发生hash碰撞的时候就会把新元素追加链表上 在redis中 hashdevalsh只能是字符串

hash和string都可以存储用户信息但不同的是hash可以对用户de信息每个字段进行单独的存储.除了大key还有hashde小key. String是存储整个字符串要修改要拿出整个值 解析成对象在存入 hash的话可以直接对某个字段进行修改 从而节省网络de流量.不过hashde内存占用大于string

应用场景

购物车 hsehde key field value 三个命令可以实现以用户的id 商品id为 field商品的数量为值value 恰好构成了购物车三要数.

第二个也可以用于存储对象 相当于吧string 序列后的jsen对象存储到hash的里面

4 set(无序集和)

redisd 的set和java中的hashset有些类似 内部的键值对是无序且唯一的 内部实现的话相当于一个特殊的字典,字典中的value相当于都是一个值 null 当集中最后一个元素呗移除后数据结构被回收删除

1好友关注 粉丝 感兴趣的的人集和

sinter命令可以获取的到a和b的共同好友

sismember命令可以判断a是否是b的好友

scard命令可以获取好友的数量

关注的实施smove命令可以将b从a的粉丝转移到a的好友集和.

2首页的随机展示:比如美团的首页有很多推荐的商家,并不能全部推荐 set适合存放所有的展示内容二srandmember命令可以随机获取几个展展示

存储活动中奖的id 因为set的值是不可重复得 可以保证不会重复中奖.

5zset

首先数据是一个set保证和数据的值唯一性 另外还可以给每个值value赋予一个 排序权重 内部是一种跳跃列表的结构.

应用场景的话可以用作排行榜但是和list不同的是做到一个动态排序 例如

value存储用户id score设置为关注时间就可以按关注时间排序.

zset还可以存学生的id score存考试de城市

标签:set,hash,list,Redis,列表,链表,五中,字符串,数据类型
From: https://www.cnblogs.com/zhangseekchu/p/17717676.html

相关文章

  • Redis之Sentinel哨兵监控
    哨兵简介 1.redis提供了哨兵的命令,是一个独立的进程 2.哨兵通过发送命令给节点,通过redis节点响应达到监控多个redis实例的运行情况 3.当哨兵发现master宕机,会自动将从节点切换成主节点,并通知其他的从节点,修改配置文件切换主机 4.默认端口是26379哨兵的主要任务 1.......
  • Redis 不同插入方法的性能对比
    1.测试目的对比Redis不同插入方法(插入同时能设置过期时间)的性能区别。2.测试数据key:SMGP_value:JSON数据{ "spName":"100003", "protocol":"SMGP", "remoteAddress":"192.192.192.192:44192", "host":"192.192......
  • redis
    前言原文作者:KyleViolet文章链接:Redis入门|Kyle'sBlog(cyborg2077.github.io)版权声明:本博客所有文章除特别声明外,均采用CCBY-NC-SA4.0许可协议。转载请注明来自Kyle'sBlog!本文章为在原文基础上,进行稍作修改的文章,版权声明如上。本文为瑞吉外卖项目的后续......
  • Redis 面试常见问答
    本文出自:https://thinkinjava.cn作者:莫那鲁道1.什么是缓存雪崩?怎么解决?一般而言,我们会利用缓存来缓冲对数据库的冲击,假如缓存无法正常工作,所有的请求便会直接发送至数据库,进而导致数据库崩溃,从而导致整个系统崩溃。如何解决呢?2种策略(同时使用):对缓存做高可用,防止缓......
  • redis cluster三主六从 redis三主三从集群搭建
    转自:https://blog.51cto.com/u_16099166/6885197一、下载安装二、本文架构(三台服务器,每台部署两个节点,主从同步,生产最好是部署六台服务器): 三、进入redis安装目录,复制redis.conf文件,建立从节点配置文件1#进入redis安装目录2cdredis34#复制redis.conf文件5cpredis.......
  • redis三主三从哨兵模式 redis三主三从集群
    转自:https://blog.51cto.com/u_16213559/7033634conf复制/usr/local/src/redis-6.2.6文件夹下redis.conf文件到/usr/local/src/master-slave文件夹中命名为redis6381.conf1#允许访问的地址,默认是127.0.0.1,会导致只能在本地访问。修改为0.0.0.0则可以在任意IP访问,生产环境不......
  • Java学习一路-Demo01-Java数据类型
    packagecom.chao.base;publicclassDemo01{/*Java数据类型两大类:基本数据类型和引用类型1.基本数据类型共8种:(1)数值类型分为:整数类型(4种):a.byte(字节型),占1个字节,取值范围(-128~127)b.short(短整型),占2个字节,取值范围......
  • 解决安装VS2022时,出现未能安装包"Microsoft.VisualCpp.Redist.14,version=14.32.31332
    解决安装VS2022时,出现未能安装包"Microsoft.VisualCpp.Redist.14,version=14.32.31332,chip”=x86"问题描述之前安装过MSSQLServer和VS2022,但是后来又卸载了。现在重装VS2022出现两个报错:无法安装Microsoft.VisualCpp.Redist.14,version=14.32.31332,chip”=x86无法安装Micr......
  • 数据类型拓展及面试题
    publicclassDome03{publicstaticvoidmain(String[]args){//整数的拓展:进制二进制0b十进制八进制0十六进制0x//0b开头是二进制;0开头是八进制;0x开头是十六进制inti=10;inti2=010;//八进制0inti3=0x10;......
  • redis和mysql的区别以及它们是如何配合使用的
    redis和mysql的区别:1、从类型上来说,mysql是关系型数据库,redis是缓存数据库。2、mysql用于持久化的存储数据到硬盘,功能强大,但是速度较慢。redis用于存储使用较为频繁的数据到缓存中,读取速度快。3、mysql和redis因为需求的不同,一般都是配合使用。mysql和redis的数据库类型,m......