当前位置: 首页 > 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;要么是技术专家&#…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...

C++实现分布式网络通信框架RPC(2)——rpc发布端

有了上篇文章的项目的基本知识的了解&#xff0c;现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...

Python常用模块:time、os、shutil与flask初探

一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...