当前位置: 首页 > news >正文

redis数据类型

Redis 数据类型

  • redis无论什么数据类型,在数据库中都是以key-value形式保存,并且所有的key(键)都是字符串,所以讨论基础数据结构都是讨论的value值的数据类型

1. 字符串操作

  • set key value [ex seconds] [px milliseconds] [nx|xx]
  • 设置key及值,过期时间可以使用秒或毫秒为单位
  • [ex seconds]是设置过期时间的,单位是秒,默认是永不过期;[px milliseconds]也是设置过期时间的,单位是毫秒;[nx|xx]中的nx是当设置变量的变量存在时,就不再赋值这个变量了,xx是当这个变量存在时,赋入新的值。
    1. ex 设置过期时间
//创建key名=name,key值=bob,过期时间为10秒
127.0.0.1:6379> set name bob ex 10
OK
127.0.0.1:6379> ttl name
(integer) 4        ---还剩下四秒就过期了
127.0.0.1:6379> ttl name
(integer) -2       ---已经过期了
    1. nx 当没有输入key名,就定义存储,反之如果有这个key名时,就不定义存储数据了
127.0.0.1:6379> set id 88 
OK
127.0.0.1:6379> keys *
1) "id"
127.0.0.1:6379> get id   
88
127.0.0.1:6379> set id 99 nx     ------返回值是(nil),意思就是没有存储id这个变量
(nil)
127.0.0.1:6379> get id  ---因为id这个key名已经存在所以set id 99 nx操作无效
"88"
  • 3. xx 意思是不管key名存在不存在,都对这个key名进行定义并存储(默认就是xx)
127.0.0.1:6379> get id       --查看id的key值
"99"
127.0.0.1:6379> set id 100 xx    --覆盖key名为id的值为100
OK
127.0.0.1:6379> get id       ---查看id的值99改为100
"100"
  • setrange key offset value ------从偏移量开始复写key的特定位的值
127.0.0.1:6379> set name bob       -----创建key名=name,key值=bob
OK
127.0.0.1:6379> get name           ----查看key名=name的值
"bob"
127.0.0.1:6379> setrange name 2 y   -----修改从key值=bob的第二个字符开始修改为y,计算是从0开始的。
(integer) 3
127.0.0.1:6379> get name            ----查看name的值
"boy"
127.0.0.1:6379> setrange name 0 andy
(integer) 4
127.0.0.1:6379> get name
"andy"
  • strlen key ------统计字符串长度
127.0.0.1:6379> get name
"andy"
127.0.0.1:6379> strlen name    ----查看name值的字符串长度为4
(integer) 4
  • append key value -------key值存在则追加,不存在则创建key及value,返回key长度
127.0.0.1:6379> get name
"andy"
127.0.0.1:6379> append name db      --在key值为andy的后面添加db这两个字符。
(integer) 6
127.0.0.1:6379> get name           ---查看name的值
"andydb"127.0.0.1:6379> keys *
1) "name"
2) "id"
127.0.0.1:6379> append age 28    ----可以看的出来age不存在,所以这条命令意思是创建key名=age,key值=28
(integer) 2
127.0.0.1:6379> get age
"28"
  • setbit key offset value ------位存储
  • bitcount key —查询key值为1的数量
  • 1T=1024G、1G=1024M、1M=1024K、1K=1024字节、1字节=8位、1位=0或1
  • 使用场景:
  1. 记录网站用户上线频率,如用户A上线了多少天等类似的数据

  2. 如用户在某天上线,则使用setbit,以用户名为key,将网站上线日为offset,并在该offset上设置1,最后计算用户总上线次数时,使用bitcount用户名即可。

  3. 这样,即使网站运行10年,每个用户仅占用10*365比特位即456字节。

  • 对key所存储的字串,设置或清除特定偏移量上的位(bit)
  • value的值可以为1或0,offset为0~2^32之间
  • key不存在,则创建新的key
//假如1位在线天数,0代表不在线,yy为用户
127.0.0.1:6379> setbit yy 1 1
(integer) 0
127.0.0.1:6379> setbit yy 2 0
(integer) 0
127.0.0.1:6379> setbit  yy 3 1
(integer) 0
127.0.0.1:6379> setbit  yy 4 1
(integer) 0
127.0.0.1:6379> setbit  yy 5 0
(integer) 0
127.0.0.1:6379> setbit yy 6 1
(integer) 0
127.0.0.1:6379> setbit yy 7 1
(integer) 0
127.0.0.1:6379> bitcount yy      ---统计用户yy一周在线天数为5
(integer) 5
  • decr key -----将key中的值减1,key不存在则先初始化为0,再减1
127.0.0.1:6379> get age
"28"
127.0.0.1:6379> decr age   ---age的值为28-1=27
(integer) 27
127.0.0.1:6379> get age
"27"127.0.0.1:6379> decr bb  ----当bb不存在时就是0-1=-1
(integer) -1
127.0.0.1:6379> get bb
"-1"
  • decrby key decrement ---------将key中的值,减去decrement。decrement只能为整数
127.0.0.1:6379> get age
"27"
127.0.0.1:6379> decrby age 2   age值27-2=25
(integer) 25
127.0.0.1:6379> get age
"25"
127.0.0.1:6379> decrby age 5  age值25-5=20
(integer) 20
127.0.0.1:6379> get age
"20"
  • incr key --------将key的值加1,如果key不存在,则初始为0后再加1
127.0.0.1:6379> get age
"20"
127.0.0.1:6379> incr age    age的值加一:20+1=21
(integer) 21127.0.0.1:6379> keys *
1) "yy"
2) "bb"
3) "id"
4) "name"
5) "age"
127.0.0.1:6379> incr ys  ys不存在,所以是0+1=1
(integer) 1
127.0.0.1:6379> get ys
"1"
  • incrby key increment ------将key的值增加increment。decrement只能为整数
127.0.0.1:6379> get age
"21"
127.0.0.1:6379> incrby age 20  age的值加二十:21+20=41
(integer) 41
127.0.0.1:6379> get age
"41"
  • incrbyfloat key increment -----为key中所储存的值加上浮点数增量 increment
127.0.0.1:6379> set id 20
OK
127.0.0.1:6379> get id
"20"
127.0.0.1:6379> incrbyfloat id 0.3  ---id的值加零点三:20+0.3=20.3
"20.3"
127.0.0.1:6379> get id
"20.3"
  • getrange key start end
  1. 返回字串值中的子字串,截取范围为start和end
  2. 负数偏移量表示从末尾开始计数,-1表示最后一个字符,-2表示倒数第二个字符
127.0.0.1:6379> set likes "Play basketball"
OK
127.0.0.1:6379> get likes
"Play basketball"127.0.0.1:6379> getrange likes 0 3   ---查看likes值的第一个字符到第四个字符,默认从0开始算的。
"Play"127.0.0.1:6379> getrange likes -2 -1  ---查看likes指的倒数第二字符和倒数第一。
"ll"

2. List列表

2.1. List列表简介

  • Redis的list是一个字符队列
  • 先进后出,变量中先存进去的值,是在最后显示出来的
  • 一个key可以有多个值

2.2. List列表命令操作

  • lpush key value [value…] -----将一个或多个值value插入到列表key的表头,key不存在,则创建key
  • lrange key start stop ----从开始位置读取key的值到stop结束
127.0.0.1:6379> lpush hostname  www.baidu.com  www.jd.com  www.taobao.com  ---创建hostname的值为www.baidu.com、www.jd.com、www.taobao.com
(integer) 3
127.0.0.1:6379> lrange hostname 0 -1   ---查看hostname列表的值从第一个到最后一个。
1) "www.taobao.com"
2) "www.jd.com"
3) "www.baidu.com"
127.0.0.1:6379> lrange hostname 0 1
1) "www.taobao.com"
2) "www.jd.com"127.0.0.1:6379> lpush hostname www.jk.com  www.sxy.com   ---在hostname值追加www.jk.com、www.sxy.com
(integer) 5
127.0.0.1:6379> lrange hostname 0 -1   ---查看hostname所有的值
1) "www.sxy.com"
2) "www.jk.com"
3) "www.taobao.com"
4) "www.jd.com"
5) "www.baidu.com"
  • lpop key -----移除并返回列表头元素数据(即删除列表中的第一个值),key不存在则返回nil
127.0.0.1:6379> lrange hostname 0 -1
1) "www.sxy.com"
2) "www.jk.com"
3) "www.taobao.com"
4) "www.jd.com"
5) "www.baidu.com"
127.0.0.1:6379> lpop hostname    ---删除hostname第一个值:1) "www.sxy.com"
"www.sxy.com"
127.0.0.1:6379> lrange hostname 0 -1
1) "www.jk.com"
2) "www.taobao.com"
3) "www.jd.com"
4) "www.baidu.com"
  • llen key ----返回列表key值的数量
127.0.0.1:6379> lrange hostname 0 -1
1) "www.jk.com"
2) "www.taobao.com"
3) "www.jd.com"
4) "www.baidu.com"
127.0.0.1:6379> llen hostname    ---查看hostname有多少个值
(integer) 4
  • lindex key index ----查看key列表的某个值
127.0.0.1:6379> lrange hostname 0 -1
1) "www.jk.com"
2) "www.taobao.com"
3) "www.jd.com"
4) "www.baidu.com"127.0.0.1:6379> lindex hostname -1   ---查看hostname最后一个值。
"www.baidu.com"
  • lset key index value -----修改指定位置的key值
127.0.0.1:6379> lrange  hostname 0 -1
1) "www.jk.com"
2) "www.taobao.com"
3) "www.jd.com"
4) "www.baidu.com"
127.0.0.1:6379> lset hostname -1 www.sxy.com   ---修改hostname最后一个值为www.sxy.com
OK
127.0.0.1:6379> lrange  hostname 0 -1
1) "www.jk.com"
2) "www.taobao.com"
3) "www.jd.com"
4) "www.sxy.com"
  • rpush key value [value…] —在key值的最后面插入一个或者多个值
127.0.0.1:6379> lrange  hostname 0 -1
1) "www.jk.com"
2) "www.taobao.com"
3) "www.jd.com"
4) "www.sxy.com"
127.0.0.1:6379> rpush hostname AAAA   BBBB  CCCC   
(integer) 7
127.0.0.1:6379> lrange  hostname 0 -1
1) "www.jk.com"
2) "www.taobao.com"
3) "www.jd.com"
4) "www.sxy.com"
5) "AAAA"
6) "BBBB"
7) "CCCC"
  • rpop key — 删除key值的末尾的值
127.0.0.1:6379> lrange  hostname 0 -1
1) "www.jk.com"
2) "www.taobao.com"
3) "www.jd.com"
4) "www.sxy.com"
5) "AAAA"
6) "BBBB"
7) "CCCC"
127.0.0.1:6379> rpop hostname
"CCCC"
127.0.0.1:6379> lrange  hostname 0 -1
1) "www.jk.com"
2) "www.taobao.com"
3) "www.jd.com"
4) "www.sxy.com"
5) "AAAA"
6) "BBBB"

3. Hash表

3.1. Hash表介绍

  • 是一个string类型的field和value的映射表

  • 一个key可对应多个field,一个field对应一个value

  • 将一个对象存储为hash类型,较于每个字段都存储成string类型更能节省内存

3.2. Hash表命令操作

  • hset key field value ----将hash表中field值设置为value,一次给一个或多个列赋值
  • hget key field -----获取hash表中field的值
  • hmget key field [field …] ----获取hash表的一个列名值和多个列名值
  • hgetall key ----获取hash表中的所有列名和列值
  • hkeys key ----获取hash表中的所有列名
  • hvals key ----获取hash表中的所有列值
  • hdel key field [field …] ----删除hash表的一个列名的值和多个列名的值
127.0.0.1:6379> hset stuinfo name bob sex boy age 18   ---创建hash表名为stuinfo,列名名=name 列值=bob,列名=sex 列值=boy,列名=age 列值=18
(integer) 3127.0.0.1:6379> hget stuinfo name    ---查看hash表名=stuinfo,列名=name的值
"bob"127.0.0.1:6379> hmget stuinfo name sex age   ---获取hash表stuinfo的列名为:name、sex、age的值
1) "bob"
2) "boy"
3) "18"
127.0.0.1:6379> hgetall stuinfo   ---获取hash表stuinfo的所有列名和列值
1) "name"
2) "andy"
3) "sex"
4) "boy"
5) "age"
6) "18"127.0.0.1:6379> hkeys stuinfo  ---获取hash表stuinfo的所有列名
1) "name"
2) "sex"
3) "age"127.0.0.1:6379> hvals stuinfo   ---获取hash表stuinfo的所有列值
1) "andy"
2) "boy"
3) "18"127.0.0.1:6379> hkeys stuinfo
1) "name"
2) "sex"
3) "age"
127.0.0.1:6379> hdel stuinfo name sex  ----删除hash表stuinfo的列名为name、sex和值
(integer) 2
127.0.0.1:6379> hkeys stuinfo
1) "age"

相关文章:

redis数据类型

Redis 数据类型 redis无论什么数据类型,在数据库中都是以key-value形式保存,并且所有的key(键)都是字符串,所以讨论基础数据结构都是讨论的value值的数据类型 1. 字符串操作 set key value [ex seconds] [px milliseconds] [nx|xx] 设置ke…...

【独家】华为OD机试 - 最多获得的短信条数(C 语言解题)

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明本期…...

【剧前爆米花--爪哇岛寻宝】包装类的装拆箱和泛型的擦除机制

作者:困了电视剧 专栏:《数据结构--Java》 文章分布:这是关于数据结构的基础之一泛型的文章,希望对你有所帮助。 目录 包装类 装箱 装箱源码小细节 拆箱 泛型 什么是泛型 泛型编译的擦除机制 不能实例化泛型类型数组 包装…...

BufferQueue研究

我们在工作的过程中,肯定听过分析卡顿或者冻屏问题的时候,定位到APP卡在dequeueBuffer方法里面,或者也听身边的同事老说3Buffer等信息。所以3Buffer是什么鬼?什么是BufferQueue?搞Android,你一定知道Graphic Buffer和…...

【计组笔记08】计算机组成与原理之IO设备系统(输入、输出设备、外存储器)

这篇文章,主要介绍计算机组成与原理之IO设备系统(输入、输出设备、外存储器)。 目录 一、IO设备系统 1.1、IO系统的演变 (1)早期阶段 (2)接口模块和DMA阶段...

使用Vue实现数据可视化大屏功能(一)

导语   现在在很多的工程项目中,都有有关于数据大屏相关的监控内容,这里我们就来看一下如何用Vue来搭建一个数据可视化大屏应用。 创建项目 使用WebStorm工具创建一个Vue的项目。如下图所示,配置好vue的脚手架工具和nodejs的运行环境&#…...

华为OD机试真题Python实现【整数对最小和】真题+解题思路+代码(20222023)

整数对最小和 题目 给定两个整数数组 array1 array2 数组元素按升序排列 假设从array1 array2中分别取出一个元素可构成一对元素 现在需要取出K个元素 并对取出的所有元素求和 计算和的最小值 注意: 两对元素如果对应于array1 array2中的两个下标均相同,则视为同一个元素 �…...

2023年绿色建筑国际会议(ICoGB 2023)

2023年绿色建筑国际会议(ICoGB 2023) 重要信息 会议网址:www.icogb.org 会议时间:2023年5月19-21日 召开地点:斯德哥尔摩 截稿时间:2023年4月1日 录用通知:投稿后2周内 收录检索&#xff…...

【力扣1653】使字符串平衡的最少删除次数

给你一个字符串 s &#xff0c;它仅包含字符 a 和 b​​​​ 。你可以删除 s 中任意数目的字符&#xff0c;使得 s 平衡 。当不存在下标对 (i,j) 满足 i < j &#xff0c;且 s[i] b 的同时 s[j] a &#xff0c;此时认为 s 是 平衡 的。请你返回使 s 平衡 的 最少 删除次数。…...

链表的中间结点与链表的倒数第k个结点(精美图示详解哦)

全文目录引言链表的中间结点题目描述与思路实现链表的倒数第k个结点题目描述与思路实现总结引言 在上一篇文章中&#xff0c;介绍了反转链表 我们利用了链表是逻辑连续的特点&#xff0c;逆置了链表的逻辑连接顺序&#xff0c;从而实现反转链表&#xff1a; 戳我查看反转链表详…...

防静电监控仪可以检测现场设备是否和实际大地接触

随着电子产品集成化度越来越高&#xff0c;对于电子产品装配来说&#xff0c;静电的危害严重影响到产品的质量、成品率和可靠性, 必须对用于电子产品装配的净化间进行系统防静电措施&#xff0c;将生产过程中的静电危害程度降至最低。近年来电子企业对ESD的危害的深入认识&…...

计算机网络第八版——第二章课后题答案(超详细)

第二章 该答案为博主在网络上整理&#xff0c;排版不易&#xff0c;希望大家多多点赞支持。后续将会持续更新&#xff08;可以给博主点个关注~ 第一章 答案 【2-01】物理层要解决哪些问题&#xff1f;物理层的主要特点是什么&#xff1f; 解答&#xff1a;物理层考虑的是怎…...

2023年3月全国DAMA-CDGA/CDGP数据管理认证火热报名中...

弘博创新是DAMA中国授权的数据治理人才培养基地&#xff0c;贴合市场需求定制教学体系&#xff0c;采用行业资深名师授课&#xff0c;理论与实践案例相结合&#xff0c;快速全面提升个人/企业数据治理专业知识与实践经验&#xff0c;通过考试还能获得数据专业领域证书。 DAMA认…...

查询与进程调度(CFS)相关信息

目录 查询与进程相关的调度信息 查看CFS调度信息 CPU相关的信息 CFS就绪队列的总运行时间 实时队列与deadline调度的相关信息 所有进程相关的信息 查询与进程相关的调度信息 进程的nice值&#xff0c;优先级&#xff0c;调度策略,vruntime等信息。在proc目录下&#xf…...

07对MVC的理解

MVC是一种设计模式&#xff0c;用于将应用程序的不同方面分离开来&#xff0c;以便更容易地管理和维护应用程序。MVC代表模型-视图-控制器&#xff0c;它将应用程序分为三个主要组件&#xff1a;模型&#xff08;Model&#xff09;&#xff1a;负责管理应用程序的数据和业务逻辑…...

WebSocket与Socket、TCP、HTTP的关系

目录&#xff1a;1、名词解析&#xff1b;2、WebSocket简介与原理&#xff1b;3、WebSocket和Http的关系和异同点&#xff1b;4、WebSocket与Socket的区别&#xff1b;5、Socket和TCP/IP&#xff1b;6、一个应用程序的通信链路&#xff1b;1、基础名词解析&#xff1a;&#xf…...

音频基础知识简述 esp-sr 上手指南

此篇博客先对音频基础知识进行简要叙述&#xff0c;然后帮助读者入门 esp-sr SDK。 1 音频的基本概念 1.1 声音的本质 声音的本质是波在介质中的传播现象&#xff0c;声波的本质是一种波&#xff0c;是一种物理量。 两者不一样&#xff0c;声音是一种抽象的&#xff0c;是声…...

Flex弹性布局一文通【最全Flex教学】

文章目录一.Flex布局1.1 传统布局和flex布局1.1.1 传统布局1.1.2 flex弹性布局1.2 flex初步体验1.3 布局原理二.常见Flex属性2.1 常见父项属性2.2 flex-direction主轴的方向2.3 justify-content设置主轴上的子元素排列方式2.4 设置子元素是否flex-wrap换行2.5 align-itmes设置侧…...

Navicat使用教程

Navicat&#xff1a;一个可以对别人的数据库进行操作的软件&#xff08;需要与如mysql等数据库配套使用&#xff09; 1. 下载mysql MySQL :: Download MySQL Community Server (Archived Versions) 下载上面那个版本 下载下来是个压缩包&#xff0c;解压 2.配置mysql (1)在…...

35岁测试人该何去何从?10年工作经验的我,只不过是一年的工作经验用了10年......

如果到了这个年龄&#xff0c;还是初级测试&#xff0c;或者只会一些简单的自动化测试&#xff0c;那么真的是不好干了。 35的年龄&#xff0c;企业对员工是有另一层面的考量。 简单来说&#xff0c;就是年龄上去了&#xff0c;能力也要上去&#xff0c;要么是技术专家&#…...

汉字可视化探索平台:基于Flask+Vue的汉字浏览系统架构与实现

1. 项目概述&#xff1a;一个汉字学习者的“浏览器”如果你和我一样&#xff0c;对汉字的结构、演变和背后的文化故事着迷&#xff0c;那你一定经历过这样的时刻&#xff1a;在阅读古籍、碑帖&#xff0c;或者仅仅是看到一个生僻字时&#xff0c;心里会冒出无数个问号——这个字…...

Bootstrap 标签页

Bootstrap 标签页 Bootstrap 标签页&#xff08;Tab&#xff09;是 Bootstrap 框架中的一种交互组件&#xff0c;允许用户在多个页面元素或内容区域之间进行切换。本文将详细介绍 Bootstrap 标签页的使用方法、特点以及如何将其应用于实际项目中。 一、Bootstrap 标签页的使用方…...

终极WebPShop插件:解锁Photoshop专业级WebP处理能力

终极WebPShop插件&#xff1a;解锁Photoshop专业级WebP处理能力 【免费下载链接】WebPShop Photoshop plug-in for opening and saving WebP images 项目地址: https://gitcode.com/gh_mirrors/we/WebPShop WebPShop是一款专为Adobe Photoshop设计的开源插件&#xff0c…...

Markdown元数据自动化管理:mdac-filler工具核心功能与实战指南

1. 项目概述&#xff1a;一个为Markdown文档自动填充元数据的工具如果你经常用Markdown写文档、博客或者项目README&#xff0c;肯定遇到过这样的场景&#xff1a;每次新建一个文件&#xff0c;都得手动去文件头部敲一堆“Front Matter”元数据&#xff0c;比如标题、日期、标签…...

深度强化学习在航天控制中的仿真到实物迁移挑战

1. 深度强化学习在航天控制领域的应用背景卫星近距离操作是航天任务中的一项关键技术挑战&#xff0c;涉及轨道交会、在轨服务、空间目标检测等多种场景。传统基于模型预测控制&#xff08;MPC&#xff09;的方法需要精确的环境动力学模型&#xff0c;而实际太空环境中存在诸多…...

macOS Unlocker V3.0:在Windows/Linux电脑上运行macOS虚拟机的终极指南

macOS Unlocker V3.0&#xff1a;在Windows/Linux电脑上运行macOS虚拟机的终极指南 【免费下载链接】unlocker VMware Workstation macOS 项目地址: https://gitcode.com/gh_mirrors/unlo/unlocker macOS Unlocker V3.0是一款革命性的开源工具&#xff0c;专为VMware W…...

别再只会用0填充了!Pandas DataFrame.fillna() 的6个高阶用法,数据分析师必看

别再只会用0填充了&#xff01;Pandas DataFrame.fillna() 的6个高阶用法&#xff0c;数据分析师必看 在数据分析的日常工作中&#xff0c;缺失值处理就像是一道无法回避的数学题。许多刚入行的分析师会条件反射般地输入.fillna(0)&#xff0c;这就像用创可贴处理所有伤口——有…...

Nintendo Switch游戏安装终极指南:3种方法解决所有格式兼容问题

Nintendo Switch游戏安装终极指南&#xff1a;3种方法解决所有格式兼容问题 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer 还在为Nintendo Switch…...

告别手动传包!用Pypiserver在内网搭建Python私有源,团队协作效率翻倍

告别手动传包&#xff01;用Pypiserver在内网搭建Python私有源&#xff0c;团队协作效率翻倍 在团队开发中&#xff0c;Python依赖管理常常成为效率瓶颈。想象这样的场景&#xff1a;新同事加入项目&#xff0c;需要配置开发环境&#xff0c;却因为内网限制无法直接访问PyPI&a…...

移动SoC设计演进:从骁龙600/400系列看芯片战略与体验竞争

1. 从一场发布会看移动芯片的十年演进2015年2月&#xff0c;巴塞罗那世界移动通信大会前夕&#xff0c;高通的一则新闻稿在业内激起了不小的涟漪。他们宣布了全新的骁龙600和400系列移动平台&#xff0c;其中最引人注目的&#xff0c;是首次将当时ARM最新的64位Cortex-A72核心引…...