猿创征文| redis基本数据类型

这篇具有很好参考价值的文章主要介绍了猿创征文| redis基本数据类型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


📃个人主页:不断前进的皮卡丘
🌞博客描述:梦想也许遥不可及,但重要的是追梦的过程,用博客记录自己的成长,记录自己一步一步向上攀登的印记
🔥个人专栏:微服务专栏
✔️redis常见的操作命令:http://www.redis.cn/commands.html

Redis键(key)

命令 功能
keys * 查看当前库的所有key
exists key 判断某个key是否存在
type key 查看某个key的数据类型
del key 删除指定key
unlink key 根据value选择非阻塞删除,仅仅把key从keyspace元数据中删除,真正的删除会在后续异步操作,也就是把删除操作放到其他线程中进行
expire key 10 为key设置过期时间为10秒钟
ttl key 查看key还有多少秒过期,-1表示永远不过期,-2表示已经过期
select 切换数据库
dbsize 查看当前数据库的key的数量
flushdb 清空当前数据库数据
flushall 清除所有数据库数据

猿创征文| redis基本数据类型
猿创征文| redis基本数据类型

string类型

基本介绍

  • String是Redis最基本的类型,一个key对应一个value。

  • String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象。

  • String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512M

  • 猿创征文| redis基本数据类型

  • 猿创征文| redis基本数据类型

  • 猿创征文| redis基本数据类型

常用操作命令

命令 说明
set 设置一个key/value
get 根据key获得对应的value
mset 一次设置多个key value
mget 一次获得多个key的value
getset 获得原始key的值,同时设置新值
strlen 获得对应key存储value的长度
append 为对应key的value追加内容
getrange 索引0开始 截取value的内容
setex 设置一个key存活的有效期(秒)
psetex 设置一个key存活的有效期(毫秒)
setnx 存在不做任何操作,不存在添加
msetnx原子操作(只要有一个存在不做任何操作) 可以同时设置多个key,只有有一个存在都不保存
decr 进行数值类型的-1操作
decrby 根据提供的数据进行减法操作
Incr 进行数值类型的+1操作
incrby 根据提供的数据进行加法操作
Incrbyfloat 根据提供的数据加入浮点数

猿创征文| redis基本数据类型
猿创征文| redis基本数据类型
猿创征文| redis基本数据类型

数据结构

  • String的数据结构为简单动态字符串(Simple Dynamic String,缩写SDS)。是可以修改的字符串,内部结构实现上类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配.
  • 猿创征文| redis基本数据类型
  • 如图中所示,内部为当前字符串实际分配的空间capacity一般要高于实际字符串长度len。当字符串长度小于1M时,扩容都是加倍现有的空间,如果超过1M,扩容时一次只会多扩1M的空间。需要注意的是字符串最大长度为512M。

list类型

基本介绍

  • 数据存储要求:存储多个数据,并且对数据进入存储空间的顺序进行区分
  • 数据的存储结构:一个存储空间保持多个数据,而且通过数据可以体系进入的顺序
  • list数据类型:保存多个数据,底层使用的是双向链表存储结构实现
  • 猿创征文| redis基本数据类型

常用操作命令

命令 说明
lpush 将某个值加入到一个key列表头部
lpushx 同lpush,但是必须要保证这个key存在
rpush 将某个值加入到一个key列表末尾
rpushx 同rpush,但是必须要保证这个key存在
lpop 返回和移除列表左边的第一个元素
rpop 返回和移除列表右边的第一个元素
lrange 获取某一个下标区间内的元素
llen 获取列表元素个数
lset 设置某一个指定索引的值(索引必须存在)
lindex 获取某一个指定索引位置的元素
lrem 删除重复元素
ltrim 保留列表中特定区间内的元素
linsert 在某一个元素之前,之后插入新元素

猿创征文| redis基本数据类型
猿创征文| redis基本数据类型

数据结构

  • Redis快速表、压缩表和双向链表(重点介绍quicklist)

  • List的数据结构为快速链表quickList。

  • 首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是ziplist,也即是压缩列表。

  • 它将所有的元素紧挨着一起存储,分配的是一块连续的内存。
    当数据量比较多的时候才会改成quicklist。
    因为普通的链表需要的附加指针空间太大,会比较浪费空间。比如这个列表里存的只是int类型的数据,结构上还需要两个额外的指针prev和next。
    猿创征文| redis基本数据类型

  • Redis将链表和ziplist结合起来组成了quicklist。也就是将多个ziplist使用双向指针串起来使用。这样既满足了快速的插入删除性能,又不会出现太大的空间冗余。

set类型

基本介绍

  • 新需求:存储大量数据,并且查询效率要更高
  • 需要的存储结构:能存储大量数据,并且要有高效的内部存储机制,方便查询
  • set类型:和hash存储结构完全一样,但是仅仅存储键,不存储值,并且值不允许重复
  • Redis的Set是string类型的无序集合。它底层其实是一个value为null的hash表,所以添加,删除,查找的复杂度都是O(1)。
  • set:无序,不可重复
  • 猿创征文| redis基本数据类型
  • 猿创征文| redis基本数据类型

常用命令

命令 说明
sadd 为集合添加元素
smembers 显示集合中所有元素 无序
scard 返回集合中元素的个数
spop 随机返回一个元素 并将元素在集合中删除
smove 从一个集合中向另一个集合移动元素 必须是同一种类型
srem 从集合中删除一个元素
sismember 判断一个集合中是否含有这个元素
srandmember 随机返回元素
sdiff 去掉第一个集合中其它集合含有的相同元素
sinter 求交集
sunion 求和集

猿创征文| redis基本数据类型

数据结构

Set数据结构是dict字典,字典是用哈希表实现的。
Java中HashSet的内部实现使用的是HashMap,只不过所有的value都指向同一个对象。Redis的set结构也是一样,它的内部也使用hash结构,所有的value都指向同一个内部值。

hash

基本介绍

  • Redis hash 是一个键值对集合。

  • Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
    类似Java里面的Map<String,Object>
    猿创征文| redis基本数据类型

  • 猿创征文| redis基本数据类型

常用命令

命令 说明
hset key field1 value1 field2 value2 添加/修改数据
hget key field1 field2 获得多个数据
hgetall key 获得所有的数据
hdel key field1 field2 删除数据
hexists key field 获取哈希表中是否存在的字段
hlen key 获取哈希表中字段的数量
hkeys key 获得所有的key
hvals key 获得所有的value
hmset key field1 value1 field2 value2 添加/修改多个数据
hmget key field1 field2 获得多个数据
hsetnx key field value 设置一个不存在的key的值
hincrby key field increment 为value进行加法运算
hincrbyfloat key field increment 为value加入浮点值

猿创征文| redis基本数据类型

注意事项

  • hash类型下的value只能存储字符串,不允许存储其他数据类型,不存在嵌套现象。如果数据未获取到,对应的值为(nil)

  • 每个 hash 可以存储 2^32 - 1 个键值对

  • hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性。但hash设计初衷不是为了存储大量对象而设计的,切记不可滥用,更不可以将hash作为对象列表使用

  • hgetall 操作可以获取全部属性,如果内部field过多,遍历整体数据效率就很会低,有可能成为数据访问瓶颈

数据结构

Hash类型对应的数据结构是两种:ziplist(压缩列表),hashtable(哈希表)。当field-value长度较短且个数较少时,使用ziplist,否则使用hashtable。

Redis有序集合Zset(sorted set)

基本介绍

  • 元素不重复
  • 有序集合的每个成员都关联了一个评分(score),这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了 。
  • 元素是有序的, 所以可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。
  • 猿创征文| redis基本数据类型

基本操作

功能 命令
添加数据 zadd key score1 member1 [score2 member2]
获取全部数据 zrange key start stop[withscores]
获取全部数据 zrevrange key start sto[withscores]
删除数据 zrem key member [member…]
按照条件获取数据 zrangebyscore key min max[withscores][limit] limt用来分页
按照条件获取数据 zrevrangebyscore key max min[withscores]
按照条件删除数据 zremrangebyrank key start stop
按照条件删除数据 zremrangebyscore key min max
获取集合数据总量 zcard key
获取集合数据总量 zcount key min max
集合交操作 zinterstore destination numkeys key[key…]
集合并操作 zunionstore destination numkeys key[key…]

猿创征文| redis基本数据类型

zset类型数据的扩展操作

在生活中,其实排序是很常见的,比如好友亲密度,投票之类的都需要进行排序,我们需要为所有参加排名的资源来建立排序依据

功能 命令
获取数据对应的索引(排名) zrank key member
获取数据对应的索引(排名) zrevrank key member
score值获取 zscore key member
score值修改 zincrby key increment member

猿创征文| redis基本数据类型
猿创征文| redis基本数据类型

注意事项

  • score保存的数据存储空间是64位,如果是整数范围是-9007199254740992~9007199254740992
  • score保存的数据也可以是一个双精度的double值,基于双精度浮点数的特征,可能会丢失精度,使用时候要慎重
  • sorted_set 底层存储还是基于set结构的,因此数据不能重复,如果重复添加相同的数据,score值将被反复覆盖,保留最后一次修改的结果

跳表数据结构

SortedSet(zset)是Redis提供的一个非常特别的数据结构,一方面它等价于Java的数据结构Map<String, Double>,可以给每一个元素value赋予一个权重score,另一方面它又类似于TreeSet,内部的元素会按照权重score进行排序,可以得到每个元素的名次,还可以通过score的范围来获取元素的列表。
zset底层使用了两个数据结构
(1)hash,hash的作用就是关联元素value和权重score,保障元素value的唯一性,可以通过元素value找到相应的score值。
(2)跳跃表,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表。

Redis源码之跳表数据结构文章来源地址https://www.toymoban.com/news/detail-402548.html

到了这里,关于猿创征文| redis基本数据类型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 猿创征文|vue vant-ui数据列表上拉加载更多,下拉刷新功能

    ⭐️⭐️⭐️   作者: 船长在船上 🚩🚩🚩   主页: 来访地址船长在船上的博客 🔨🔨🔨   简介: CSDN前端领域优质创作者,资深前端开发工程师,专注前端开发,在CSDN总结工作中遇到的问题或者问题解决方法以及对新技术的分享,欢迎咨询交流,共同学习。 🔔🔔🔔

    2023年04月12日
    浏览(39)
  • 猿创征文|工具百宝箱-数据库连接工具-接口调试与测试工具-抓包工具

    工具没有绝对意义上的好坏之分,只有需求适合与否,这些需求可能包括:功能、价格、安全、服务、技术等诸多方面。 技术在更新迭代,开发者工具也在更新迭代。一个高效趁手的工具在工作上锦上添花。给大家分享一下我平时用的一部分工具。 官方活动入口:「猿创征

    2023年04月27日
    浏览(37)
  • 猿创征文 | Shell编程【上篇】

    目录 1,Shell编程 1.1:简介 1.1.1:shell解释器 1.2:快速入门 1.2.1:编写脚本 1.2.2:执行shell脚本 1.3:shell变量 1.3.1:简介 1.3.2:使用变量 1.3.3:删除变量 1.3.4:只读变量  1.4:字符串 1.4.1:单引号 1.4.2:双引号  1.4.3:获取字符串长度   1.4.4:提取子字符串  1.5:传递参数 1

    2024年02月02日
    浏览(56)
  • 猿创征文 |【Linux】常用命令

    🍁 博客主页: 👉@不会压弯的小飞侠 ✨ 欢迎关注: 👉 点赞 👍 收藏 ⭐ 留言 ✒ ✨ 系列专栏: 👉Linux专栏 ✨ 欢迎加入社区: 👉不会压弯的小飞侠 ✨ 人生格言:知足上进,不负野心。 🔥 欢迎大佬指正,一起学习!一起加油! command [-options] [parameter] command:命令名 [-o

    2024年01月16日
    浏览(36)
  • 以太坊是什么?|猿创征文

    以太坊是一个可编程、可视化、更易用的区块链,它允许任何人编写智能合约和发行代币。 在以太坊(Ethereum)出现之前,各种区块链应用的功能非常有限,例如,比特币和其他加密货币都只是纯粹的数字货币。 以太坊(Ethereum)创始人Vitalik Buterin将以太坊(Ethereum)设想为开发人员

    2024年02月02日
    浏览(68)
  • 猿创征文|【HTML】标签学习之路

    💖 目录 一、HTML语法规范 1.基本语法概述 2.标签关系 二、HTML基本结构标签 1.第一个HTML页面 2.HTML基本结构标签总结 1.基本语法概述 html是由尖括号包围的,列如: html 。 html标签通常是成对出现的,列如:html和/html,我们称为 双标签 。标签对里的第一个标签是开始标

    2024年01月16日
    浏览(40)
  • 猿创征文|ZooKeeper(伪)集群搭建

    前言:zookeeper作为一款分布式协调中间件,其重要性不言而喻,因此需要保证其高可用性。所以一般都会搭建zookeeper集群,今天叶秋带领大家在一台服务器上搭建伪集群。 目录 1、 搭建要求 2、 准备工作 3、 配置集群  4 启动集群  5 模拟集群异常 1、 搭建要求 真实的集群是

    2024年02月01日
    浏览(68)
  • 猿创征文|【深度学习前沿应用】文本生成

    作者简介 :在校大学生一枚,C/C++领域新星创作者,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实践资源建设专家委员会(TIPCC)志愿者,以及编程爱好者,期待和大家一起学习,一起进步~ . 博客主页 :

    2024年02月06日
    浏览(39)
  • 猿创征文|我的技术成长之路&&C++

    ✅作者简介:C/C++领域新星创作者,CSDN内容合伙人,新晋万粉博主,大三学生 这个世界熙熙攘攘,少有人给灵魂抛光   读者朋友们大家好,借着本次猿创征文活动我将分享一下自己的C++技术的成长之路。身为计科专业的学生,我接触的第一门编程语言是C语言,打印的第一

    2024年02月06日
    浏览(49)
  • 猿创征文 | Solidity 智能合约技术成长之路

    Solidity 是链上智能合约的开发语言,链上智能合约相当于传统行业的后端,链上应用基本都是由合约 + 前端组成的,虽然不推荐,但部分链上应用也会加入后端进行数据存储,以降低用户的使用成本。 Solidity 这门开发语言并不复杂,只需要您稍微有一点儿编程基础,英文词汇

    2024年01月23日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包