redis五大命令及kv设计建议

news/2024/4/26 11:43:15/文章来源:https://blog.csdn.net/m0_47167062/article/details/130361388

什么是redis?主要作用?

redis(remote dictionary server)远程字典服务:是一个开源的使用ANSI C语言编写,支持网络、可基于内存可持久化的日志型、key-value数据库,并提供多种语言的api

redis的数据存在内存中,读写速度非常快,每秒可以超过10万次读写操作。因此广泛用于缓存,另外,redis也经常用来做分布式锁。

redis的基本数据类型

type key:获取key的类型

keys *:获取所有key

  • string

    • 是redis最基础的数据结构类型,可以存储图片或者序列化的对象,值最大存储为512M
    • 应用场景:共享session、计数器、限流等
    • 内部编码:int/embstr(<=39字节字符串)/raw(>39字节字符串)
    • 格式功能
      set key value将key-value缓存到Redis中
      get key从redis中获取key对应的value
      del key从Redis中删除key
      incr key将key对应的value加1
      decr key将key对应的value减1
      setex key seconds value将key-value缓存到Redis中并设置过期时间
      setnx key value将key-value缓存到redis中,若key存在,不做任何操作
      ttl key查看key的存活命时间
      incrby key increment给key对应值加increment
      mset k1 v1 k2 v2…批量添加key-value对到redis中
      mget k1 k2批量根据key获取value
      append key value在key对应的value中拼接value
      setrange key offset value从offset位置开始将key对应的value,替换为指定value
  • hash

    • hash类型是指v(值)本身又是一个键值对结构
    • 内部编码:ziplist、hashtable
    • 应用场景:缓存用户信息等
    • 注意:若开发使用hgetall,哈希元素比较多的话,可能导致redis阻塞,可以使用hscan.而如果只是获取部分field,建议使用hmget
    • 命令功能
      hset key field value将field value缓存到redis的hash中,键值为key
      hget key field从key对应hash中获取filed字段
      hexists key field判断key对应hash中是否存在field字段
      hincrby key field increment给key对应hash中的field字段+increment
      hdel key field删除key对应hash中的field字段
      hkeys key获取key对应hash中的所有field
      hvals key获取key对应hash中的所有filed的val
      hgetall key获取key对应hash中所有的filed和value
  • list

    • 用来存储多个有序的字符串,一个列表最多可以存储2^32-1个元素
    • 内部编码:ziplist、linkedlist
    • 应用场景:消息队列,收藏文章列表
      • lpush+lpop=stack
      • lpush+rpop=queue
      • lpsh+ltrim=capped collection(有序集合)
      • lpush+brpop=message queue(消息队列)
    • 命令功能
      rpush key value从右边向key集合中添加value
      lrange key start end从左边开始获取key集合,从start开始到end结束
      lpush key value从左边向key集合添加value
      lpop key弹出key集合最左边的数据
      rpop key弹出key集合最右边的数据
      llen key获取key集合的长度
      linsert key BEFORE|AFTER pivot element操作key集合,在privot之前/后添加element
      lset key index value操作key集合,更新索引index位置的值为value
      lrem key count value操作key集合,删除count个value值
      ltrim key start end操作key集合,截取start到end的列表值
      lindex key index操作key集合,获取index位置的值
      brpop key seconds延迟seconds弹出
  • set

    • 用来保存多个的字符串元素,但是不允许重复元素
    • 内部编码:intset、hashtable
    • 注意点:smembers和lrange、hgetall都属于比较重的命令,若元素过多存在阻塞redis的可能性,可以使用sscan完成
    • 应用场景:社交需求、生成随机数抽奖
    • 命令格式
      sadd key members向key集合中添加member元素
      smembers key遍历key集合中所有元素
      srem key members删除key集合中member元素
      spop key count从key集合中随机弹出count个元素
      sdiff key1 key2返回key1中特有的元素(差集)
      sidiffstore dest key1 key2将差集缓存到dest中
      sinter key1 key2返回key之间的交集
      sinterstore dest key1 key2将交集缓存到dest中
      sunion key1 key2返回并集
      sunionstore dest key1 key2将并集缓存到dest中
      smove source dest member将source集合中member元素移动到dest集合
      sismember key member判断member是否存在于key集合中
      srandmember key count随机获取key集合中count个元素
  • zset

    • 已排序的字符串集合,同时元素不能重复
    • 内部编码:ziplist、skiplist
    • 应用场景:排行榜、点赞
    • 命令格式
      zadd key score member向key集合中添加member元素,分数为score
      zincrby key increment member向key集合中member元素score+increment
      zrange key start end [withscores]将key集合中元素升序排序,显示分数
      zrevrange key start end [withscores]将key集合中元素倒序排序,显示分数
      zrank key member返回member在key集合中的正序排名
      zrevrank key member返回member在key集合中的倒序排名
      zcard key返回key集合元素的个数
      zrangebysocre key min max withscores按[min,max)分数范围正序返回key集合中的元素,显示分数
      zrevrangebyscore key min max withscores按[min,max)分数范围倒序返回key集合中的元素,显示分数
      zrem key member删除key集合中的member元素以及分数
      zremrangebyscore key min max withscores按[min,max)分数范围删除key集合中的元素
      zremrangebyrank key start stop删除key集合中按照正序排列,索引在[min,max)分数范围内的元素
      zcount key min max按[min,max)分数范围统计key集合中的元素个数
  • value设计

    • 一般模式

      • 是否需要排序,需要使用zset

      • 缓存的数据是多个值还是单个值

        • 多个值:是否允许重复,允许使用list,不允许使用set

        • 单个值:简单值选择string,对象值选择hash

    • 取巧模式

      • 除去需要排序的需求使用zset外,其余都使用string
  • key设计

    • 唯一性,常用缓存数据的主键作为key

    • 可读性,目的是为了确保见名知意

      • 普通单值,如userinfo:id1

      • 表名:主键名:主键值:列名,如userinfo:id:1:name

    • 灵活性

    • 时效性,redis key一定要设置过期时间

      • 不设置过期时间,key就为永久有效,会一直占用内存,当key的数量过多时,就容易达到服务器内存上限,导致宕机,所以一般要设置过期时间

      • key的时效性设置,必须根据业务场景进行评估,设置合理的有效时间

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_103316.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

矿井下无人值守变电所电力监控系统的探讨与产品选型

摘要&#xff1a;为了探讨井下无人值守变电所的电力监控系统技术&#xff0c;以西山煤电马兰矿为背景&#xff0c;详细阐述了井下无人值守变电所电力监控系统技术的各项基本参数&#xff0c;如额定工作电压及整机输入视在功率、交换机或监控分站的传输口、高压配电装置的传输口…

下载VMWare

1、首先登录到vmware官网 官网&#xff1a;https://www.vmware.com/ 2、点击Resource 3、找到Product Downloads 4、找到我们要下载的产品&#xff0c;点击download product 5、选择自己要下载的版本和对应的系统 6、点击去下载 7、点击download now

国云筑基“翼”气风发,天翼云以科技创新绘就数字中国蓝图

科技云报道原创。 全球新一轮技术革命方兴未艾&#xff0c;特别是以数字技术为核心的信息技术革命&#xff0c;正在实现群体突破和加快广泛深度应用。 从2017年的“促进数字经济加快成长”&#xff0c;到2019年的“壮大数字经济”&#xff0c;到2020年的“全面推进‘互联网&am…

SpringBoot的配置和日志

1.配置文件的作用和意义 配置文件中配置整个项目中所有重要的数据&#xff0c;比如&#xff1a; 1.数据库的连接信息&#xff08;包含用户名和密码的设置&#xff09;&#xff1b; 2.项目的启动端口&#xff1b; 3.第三方系统的调用秘钥等信息&#xff1b; 4.用于发现和定位问…

Unity之OpenXR+XR Interaction Toolkit实现 抓取物体

前言 我们今天来说一下如何使用XR Interaction Toolkit来实现和3D物体的交互之&#xff1a;抓取&#xff0c;简单说就是通过VR手柄拿起来一个物体。 二.准备工作 有了前两篇的配置介绍,我们就不在详细说明这些了&#xff0c;大家自行复习 Unity之OpenXRXR Interaction Toolk…

BPF技术学习与整理

目录 eBPF是什么&#xff1f; eBPF是做什么的&#xff1f;可以解决什么问题&#xff1f; eBPF可以带来的解决方案是什么&#xff1f; eBPF的技术点 eBPF hookeBPF MapeBPF Helper FunctioneBPF有什么限制吗&#xff1f; 前言 21年因为项目需求而要开发一个工具&#xff0c;可以…

每日一个小技巧:1招教你wav格式如何转换mp3

wav是一种质量较高的音频格式&#xff0c;但它的文件大小通常比较大。为了更方便地分享和存储音频文件&#xff0c;许多人都会选择将其转换为mp3格式。因为mp3格式能够在保持较高音质的同时&#xff0c;尽量降低文件大小&#xff0c;帮助你节省许多磁盘空间。那你们知道wav格式…

Java基础——多线程创建

&#xff08;1&#xff09;什么是线程&#xff1f; 线程(thread)是一个程序内部的一条执行路径。程序中只有一条执行路径&#xff0c;那么这个程序就是单线程的程序。 &#xff08;2&#xff09;多线程是什么&#xff1f; 多线程是指从软硬件上实现多执行流程的技术。 &…

让 ChatGPT 扮演一个艺术家,协助我们生成绘图 prompt

stable-diffusion Prompt 生成 直接生成 按照惯用的扮演思路&#xff0c;我们可以让 ChatGPT 扮演一个艺术家&#xff0c;协助我们生成绘图 prompt。考虑到 ChatGPT 和 DallE 同为 openai 公司产品&#xff0c;且 stable-diffusion 开源模型出现较晚&#xff0c;ChatGPT 训练…

【软件工程】UML序列图

一.概述 序列图&#xff08;时序图&#xff09;是一种软件工程行化建模方法&#xff0c;用于可视化系统或应用程序中多个对象之间 的交互。在序列图中&#xff0c;每个对象都表示为竖直线&#xff0c;对象之间的消息则表示为水平箭头 从一个对象指向另一个对象。 序列图可以…

搞懂 API ,地图 API 制作方法分享

地图 API 是一种基于 Web 开发的应用程序编程接口&#xff0c;可以用于创建和展示地图及地理信息。以下是一些地图 API 制作的方法&#xff1a; 选择地图 API 平台&#xff1a;目前市场上有很多地图 API 平台供选择&#xff0c;比如 Google Maps API、百度地图 API、高德地图 A…

2023年五月份图形化三级打卡试题

活动时间 从2023年5月1日至5月21日&#xff0c;每天一道编程题。 本次打卡的规则如下&#xff1a; 小朋友每天利用10~15分钟做一道编程题&#xff0c;遇到问题就来群内讨论&#xff0c;我来给大家答疑。 小朋友做完题目后&#xff0c;截图到朋友圈打卡并把打卡的截图发到活动群…

在阿里做测试开发的这5年,收获与感悟...

正好在离职交接空档期&#xff0c;就抽空简单分享自己的一些个人经历给大家&#xff0c;希望对刚毕业不久或者工作三五年的同学能有一些帮助。 测试新人 我的职业生涯开始和大多数测试人一样&#xff0c;开始接触都是纯功能界面测试。那时候在一家电商公司做测试&#xff0c;做…

基于异常值鲁棒性问题的极限学习机的回归问题研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

2023年五月份图形化四级打卡试题

活动时间 从2023年5月1日至5月21日&#xff0c;每天一道编程题。 本次打卡的规则如下&#xff1a; 小朋友每天利用10~15分钟做一道编程题&#xff0c;遇到问题就来群内讨论&#xff0c;我来给大家答疑。 小朋友做完题目后&#xff0c;截图到朋友圈打卡并把打卡的截图发到活动群…

【独具匠心设计】全网最好的国学,历代文学,名著,小说网推荐

极力推荐一个功能简单、易用、访问快捷、界面大气,清爽、资源丰富、设计专业、完全免费的文学网站。它的名字叫“历代文学”&#xff0c;是由成都心海科技公司所研发&#xff0c;设计真可谓独具匠心。 “历代文学”收录了来自古今中外 20 多个朝代&#xff0c;近 30个 国家的作…

消息队列选型

消息队列选型 大家好&#xff0c;我是易安&#xff01;今天我们聊下消息队列常见选型。 消息队列作用 谈选型之前我们先讲下我们为什么需要消息队列。 消息队列是一种很流行的技术&#xff0c;自从系统间开始通信时&#xff0c;消息队列就出现了。然而&#xff0c;对消息队列给…

Windows 远程桌面提示没有远程桌面授权服务器可以提供许可证

可参考之前发布的一篇文章&#xff0c;帮助你远程登录&#xff1a;远程连接提示 由于没有远程桌面授权服务器提供许可证_计算机没有远程桌面客户端访问许可证_csdn_aspnet的博客-CSDN博客 虽然上述文章命令可以远程进入系统&#xff0c;但是每次都需要使用上述文章中的命令进入…

【数据库】索引和事务

目录 1.索引 1.1关于索引 索引是什么&#xff1f; 为什么要有索引&#xff1f; 索引的作用&#xff1f; 索引的优点和缺点&#xff1f; 1.2索引类型及创建 索引的分类 创建索引 1.3索引的数据结构 1.4索引覆盖 2.事务 2.1关于事务 概念 事务的使用 2.2事务的特…

他们是怎么使用上gpt-4的-gpt-4在哪用

为什么有人在使用GPT4 openAI尚未正式发布GPT-4模型&#xff0c;也没有公布任何与GPT-4相关的信息。因此&#xff0c;没有人可以在使用GPT-4模型。 值得注意的是&#xff0c;虽然OpenAI尚未正式发布GPT-4&#xff0c;但由于其之前发布的GPT-3具有出色的性能和功能&#xff0c…