Redis基础知识分享(含5种数据类型介绍+增删改查操作)

news2024/12/26 3:50:18

一、redis基本介绍

1.redis的启动

  • 服务端启动
python@ubuntu:~$ redis-server
  • 客户端启动
python@ubuntu:~$  redis-cli
<127.0.0.1:6379> exit
python@ubuntu:~$  redis-cli --raw //(支持中文的启动方式)
<127.0.0.1:6379> exit

2.redis基本操作

  • ping发送给服务器,服务器返回PONG
<127.0.0.1:6379>ping
PONG
  • 数据库没有名称,默认16个,通过0-15来标识
    例如,选择编号为1的数据库:
<127.0.0.1:6379>select 1
OK
<127.0.0.1:6379[1]> select 0  //选择1号数据库会带有标识
OK
<127.0.0.1:6379> select 2  //选择0号数据库没有标识,因为默认就是选择0号数据库
OK
<127.0.0.1:6379[2]> select 20
ERR invalid DB index  //报错,无效的数据库索引,因为redis只有0-15号数据库 

3.redis的数据类型

redis键值对说明

  • redis是key-value的数据结构;
  • 每条数据都是一个“键值对”;
  • 键(key)的类型是字符串(string);
  • 值(value)的类型可分为五种:
    ①字符串string
    ②哈希hash
    ③列表list
    ④无序集合set
    ⑤有序集合zset

二、redis各种数据类型介绍

1.字符串操作

字符串(string)是redis最基本的类型;在这里插入图片描述

(1)增加、修改——set/mset/setex
  • 如果设置的键不存在则为添加,如已存在则为修改;
  • redis中字符串(string)可以用单引号’'或者双引号""引起来,也可以省略引号,如:“China”,‘China’,China三种写法都可以;
  • 设置键值
set key value

例如:设置键’user1’值为’aaa’

<127.0.0.1:6379> set 'user1' 'aaa'  //如果没有为添加
OK
<127.0.0.1:6379> set 'user1' 'bbb'  //已存在视为修改
  • 设置键值及过期时间,以秒为单位
    (新增key的同时,给这个key附加一个过期时间)
setex key seconds value

例如:设置键’user2’值为’bbb’,过期时间为3秒

<127.0.0.1:6379> setex 'user2' 3 'bbb' 
OK
  • 设置多个键值对——mset
mset key1 value1 key2 value2 ......

例如:设置键’user3’值为’ccc’,设置键’user4’值为’ddd’,设置键’user5’值为’eee’

<127.0.0.1:6379> mset 'user3' 'ccc' 'user4''ddd' 'user5''eee'
OK
(2)追加值——append
append key value

例如:向键’user1’中追加值’haha’

<127.0.0.1:6379> append 'user1' 'haha'
OK
(3)获取值——get/mget
  • 获取单个值
  • 根据键获取值,如果不存在返回nil
get key

例如:获取键’user1’的值

<127.0.0.1:6379> get'user1' 
bbbhaha
<127.0.0.1:6379> get'user2' 
     // 没有值了,因为设置了3秒过期
<127.0.0.1:6379> get'user3' 
ccc
  • 获取多个值
 mget key1 key2

例如:一次性获取’user1’‘user2’'user3’的值

<127.0.0.1:6379> mget 'user1' 'user4''user5'
bbbhaha
ddd
eee
(4)删除——del

删除键及其对应的值

del key1 key2 ......

例如:删除键值’user2’‘user3’‘user4’

<127.0.0.1:6379> del 'user2''user3''user4'
1    //删除成功返回1
<127.0.0.1:6379> mget 'user2''user3''user4'
     // 没有值了,因为上一步删掉了
(5)字符串下的键命令
①查找键
  • 参数支持正则表达式,找到键,返回键名,找不到返回空
keys pattern

例如:查找键’user1’是否存在

<127.0.0.1:6379> keys 'user1'
user1    //显示key'user1',因为这个key存在
<127.0.0.1:6379> keys 'user11'
     // 没有值,因为这个值不存在

例如:查看所有键

<127.0.0.1:6379> key '*'  //或者keys *,加不加''都可以
user1
user2
user3
user4
user5

例如:查看名称包含s的键

key '*S*'
②判断键是否存在
  • 如果存在返回1,不存在返回0
exists key

例如:判断键’user1’是否存在

<127.0.0.1:6379> exists 'user1'
1    //返回1,代表这个key'user1'存在
<127.0.0.1:6379> exists 'user111'
0    //返回0,代表这个key'user111'不存在
③查看键对应的value类型(string、hash、list、set、zset)
type key

例如:查看键’user1’的对应的值类型

<127.0.0.1:6379> type 'user1'
string
④设置已存在键的过期时间
  • 以秒为单位
    设置键值及过期时间,以秒为单位
    (已经存在的键,一开始没有设置过期时间,要追加一个过期时间)
expire key seconds 

例如:设置键’user2’值为’bbb’,过期时间为3秒

<127.0.0.1:6379> expire 'user2' 100  //设置'user2'的过期时间为100秒
1
⑤查看键有效时间
  • 以秒为单位
    返回大于0,代表剩余的有效时间,单位:秒;
    返回-1为永远有效;
    返回-2为键不存在;
ttl key

例如:查看键’user2’的有效时间

<127.0.0.1:6379> ttl 'user1'
-1   //返回-1,代表永远有效
<127.0.0.1:6379> ttl 'user2'
5    //返回正数,代表还剩多少秒过期
<127.0.0.1:6379> ttl 'user2'
-2    //返回了-2,因为上一步剩余5秒的倒计时已经过期,-2代表失效

2.哈希hash

(1)hash介绍
  • hash用于存储“键值对”集合;
  • 每个哈希中的键可以理解为字段(field),一个字段(field)对应一个值(value);
  • hash中值(value)类型为字符串(string);
  • 同一个哈希中字段名(field)不可以重复
    在这里插入图片描述
(2)增加、修改——hset/hmset
  • 如果设置的字段不存在则为添加,如已存在则为修改
  • 设置单个字段
hset key field value  //区分于字符串string类型,set设置字符串的值,hset设置hash的值

例如:设置键’huser1’的字段’name’值为’Tom’

<127.0.0.1:6379> hset 'huser1' 'name' 'Tom'
1    //返回1,表示增加成功
  • 设置多个字段,添加多个值
hmset key field1 value1 field2 value2 field3 value3 ......

例如:设置键’huser2’的字段’name’值为’Mary’,设置’sex’字段为’female’

<127.0.0.1:6379>  hmset 'huser2' 'name' 'Mary' 'sex' 'female'
OK
(3)获取hash的类型——type

(键的类型是hash,值的类型有可能是hash、有可能是string)

<127.0.0.1:6379>  type 'huser1'
hash    //代表查询的键是hash类型
<127.0.0.1:6379>  keys *
user4    //string类型
user5    //string类型
user1    //string类型
user3    //string类型
huser2    //hash类型
huser1    //hash类型
(4)获取键值对——hget/hkeys
  • 获取指定键所有的字段
hkeys key

例如:获取键’huser2’的所有字段

<127.0.0.1:6379> hkeys 'huser2'
name
sex
  • 获取一个字段对应的值
hget key field

例如:获取键’user2’的字段’name’的值

<127.0.0.1:6379> hget 'user2' 'name'
Mary
<127.0.0.1:6379> hget 'user2' 'sex'
female
  • 获取多个字段的值
hmget key field1 field2

例如:获取键’user2’字段’name’'sex’的值

<127.0.0.1:6379> hmget 'user2' 'name' 'sex'
Mary
female
  • 获取所有字段的值
hvals key

例如:获取键’user2’中所有字段的值

<127.0.0.1:6379> hvals 'user2' 
Mary
female
  • 获取所有字段名包括字段对应的值
hgetall key

例如:获取键’user2’所有字段名包括字段对应的值

<127.0.0.1:6379>  hgetall 'user2'
name
Mary
sex
female
(5)删除——hdel/del
  • 删除hash中指定字段
    字段对应的值会一起删除
hdel key field1 field2 ......

例如:删除键’user2’的字段’sex’

<127.0.0.1:6379> hdel 'user2' 'sex'
1    //返回1,代表删除成功
  • 删除整个hash键及字段与值,使用del命令
del key1 key2 ......

例如:删除键’user1’‘user2’

<127.0.0.1:6379> del user1 user2
1    //返回1,代表删除成功

3.列表list

(1)list介绍
  • 列表中的值(value)类型为字符串(string);
  • 列表中每个值按照添加的顺序排序
    在这里插入图片描述
(2)增加
  • 从左侧插入值
lpush key value1 value2 ......

例如:从键’user1’的列表左侧加入值’aa’

<127.0.0.1:6379> lpush 'user1' 'aa'
1    //返回1,代表该列表中目前有1个值
  • 从右侧插入值
rpush key value1 value2 ......

例如:从键’luser1’的列表右侧加入值’bb’

<127.0.0.1:6379> rpush 'luser1' 'bb'
2    //返回2,代表该列表目前有2个值

例如:从键’luser1’的列表右侧加入值’cc’‘dd’

<127.0.0.1:6379> rpush 'luser1' 'cc' 'dd'
4    //返回4,代表该列表目前有4个值
  • 在指定值的前或后插入值
linsert key before或after  值  插入的值

例如:在键’luser1’的列表中值’cc’前加入值’11’

<127.0.0.1:6379> linsert 'luser1' before 'cc' '11'
5    //返回5,代表该列表目前有5个值

例如:在键’luser1’的列表中值’cc’后加入值’22’

<127.0.0.1:6379> linsert 'luser1' after 'cc' '22'
6    //返回6,代表该列表目前有6个值

在这里插入图片描述

(3)获取
  • 返回列表里指定范围内的值
    (负值代表从右往左数,正值代表从左往右数)
    索引从左侧开始,第一个值的索引为0;
    索引可以是负数,表示从尾部开始计数,如:-1表示最后一个值;
    start,stop为要获取值的索引
 lrange key start stop  //l代表list列表,range代表范围

例如:获取键’luser1’的列表所有值

<127.0.0.1:6379> lrange 'luser1' 0 -1  //获取所有值,从第一个到最后一个
aa
bb
11
cc
22
dd
<127.0.0.1:6379> lrange 'luser1' 2 4  //获取从第3个值到第5个值
11
cc
22
<127.0.0.1:6379> lrange 'luser1' 3 -1  //获取从第4个值到最后一个值
cc
22
dd
(4)修改——lset
  • 设置指定索引位置的值
    索引从左侧开始,第一个值的索引为0;
    索引可以是负数,表示从尾部开始,-1代表最后一个值
lset key index value

例如:修改键’luser1’的列表中索引为1的值为’China’

<127.0.0.1:6379> lset 'luser1' 1 'China'
OK
<127.0.0.1:6379> lrange 'luser1' 1
China

在这里插入图片描述

(5)删除
  • 删除指定值
    将列表中前count次出现的值移除;
    count>0 从头往尾删除;
    (count=2,从左往右删除2个值)
    count<0 从尾往头删除;
    (count=-2,从右往左删除2个值)
    count=0 删除所有值
lrem key count value

例如:向键’luser2’中加入值’h0’‘h1’‘h2’‘h3’‘h0’‘h1’‘h0’‘h1’

<127.0.0.1:6379> rpush 'luser2' 'h0' 'h1' 'h2' 'h3' 'h0' 'h1' 'h0' 'h1'
8    //返回8,代表列表中有8个值

例如:从键’luser2’列表右侧开始删除1个h1

<127.0.0.1:6379> lrem 'luser2' -1 'h1'    //从右往左,删除1个h1
1    //返回1,代表删除了1个值

例如:删除列表中所有的指定值

<127.0.0.1:6379> lrem 'luser2' 0 h1    //删除列表中所有的h1
2
<127.0.0.1:6379> lrange 'luser2' 0 -1
h0
h2
h3
h0
h0

例如:删除列表中从左往右,1个h0

<127.0.0.1:6379> lrem 'luser2' 1 h0    //从左往右,删除1个h0
1
<127.0.0.1:6379> lrange 'luser2' 0 -1
h2
h3
h0
h0

4.无序集合set

(1)set介绍
  • 无序集合中值(value)类型为字符串(string);
  • 集合里不允许有重复的值;
  • 说明:对于集合里的值只能添加与删除,不能修改
    在这里插入图片描述
(2)增加——sadd
  • 集合中添加值
sadd key value1 value2 ......

例如:向键’suser1’的集合添加值’aa’‘bb’‘cc’

<127.0.0.1:6379> sadd 'suser1' 'aa' 'bb' 'cc'
3

例如:向键’suser1’的集合添加值’aa’,是没有意义的,因为集合中’aa’已经存在

<127.0.0.1:6379> sadd 'suser1' 'aa'
(3)获取
  • 返回所有值
smembers key

例如:获取键’suser1’的集合所有值,返回结果是无序的

<127.0.0.1:6379> smembers 'suser1'
aa
bb
cc
(4)删除
  • 删除指定值
srem key value

例如:删除键’suser1’的集合中值’aa’

<127.0.0.1:6379> srem 'suser1' 'aa'
1
<127.0.0.1:6379> smembers 'suser1'
bb
cc

5.有序集合zset

(1)zset介绍
  • 有序集合中值(value)类型为字符串(string);
  • 集合里不允许有重复的值;
  • 每个值都会关联一个分数(score),分数(score)可以为负数,通过分数将值从小到大排序;
  • 说明:对于有序集合里的值只能添加与删除,不能修改
    在这里插入图片描述
(2)增加
  • 添加值
zadd key score1 value1 score2 value2 ......

例如:向键’zuser1’的集合中添加值’aa’‘bb’‘cc’‘dd’,分数分别是1,5,8,3

<127.0.0.1:6379> zadd 'zuser1' 1 'aa' 3 'dd' 6 'cc' 2 'ff'    //添加的值,会按照score从小到大排序

在这里插入图片描述

(3)获取值
  • 返回指定范围内的值
    start,stop为值的下标索引;
    第一个值的索引为0;
    索引可以是负数,表示从尾部开始计数,-1表示最后一个值;
    withscores:加上能同时获取值对应分数(score)
zrange key start stop[withscores]

例如:获取键’zuser1’的集合中所有值

<127.0.0.1:6379> zrange 'zuser1' 0 -1
aa
ff
dd
cc

例如:获取键’zuser1’的集合中所有值,同时获取每个值对应的分数

<127.0.0.1:6379> zrange 'zuser1' 0 -1 withscores
aa
1
ff
2
dd
3
cc
6
  • 通过score获取值
    返回分数(score)在min和max之间的值
    min代表score的起始值
    max代表score的结束值
zrangebyscore key min max

例如:获取键’zuser1’的集合中分数(score)在4和9之间的值

<127.0.0.1:6379> zrangebyscore 'zuser1' 3 9
dd
cc
  • 返回值value的分数(score)
    zscore得到指定值的score
zscore key value

例如:获取键’zuser1’的集合中值’aa’的分数

<127.0.0.1:6379> zscore 'zuser1' 'dd'
3
(4)删除
  • 删除指定值
zrem key value1 value2 ......

例如:删除键’zuser1’中的值’bb’

<127.0.0.1:6379> zrem 'zuser1' 'dd'
1
  • 删除分数(score)在指定范围之间的值
    min是要删除score的最小值
    max是要删除score的最大值
zremrangebyscore key min max

例如:删除键’zuser1’中分数在4,9之间的值

<127.0.0.1:6379> zremrangebyscore 'zuser1' 0 10
3
<127.0.0.1:6379> zrange zuser1 0 -1 withscores
      // 返回空,因为上条指令全删掉了

三、总结

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pytorch注意力机制应用到具体网络方法(闭眼都会版)

文章目录 以YoloV4-tiny为例要加入的注意力机制代码模型中插入注意力机制 以YoloV4-tiny为例 解释一下各个部分&#xff1a; 最左边这部分为主干提取网络&#xff0c;功能为特征提取中间这边部分为FPN&#xff0c;功能是加强特征提取最后一部分为yolo head&#xff0c;功能为获…

交通控制系统中的 Prompt工程:引导LLMs实现高效交叉口管理 !

本研究提出了一种新型的交通控制系统方法&#xff0c;通过使用大型语言模型&#xff08;LLMs&#xff09;作为交通控制器。该研究利用它们的逻辑推理、场景理解和决策能力&#xff0c;实时优化通行能力并提供基于交通状况的反馈。LLMs将传统的分散式交通控制过程集中化&#xf…

产品升级!Science子刊同款ARGs-HOST分析,get!

凌恩生物明星chanpin 抗性宏基因-宿主分析 Science子刊同款分析 数据挖掘更进一步&#xff01; 抗生素的大量使用与滥用使微生物体内编码抗生素抗性的基因在环境中选择性富集&#xff0c;致病菌通过基因突变或者水平基因转移获得抗生素抗性基因后&#xff0c;导致抗生素治疗…

Python8-写一些小作业

记录python学习&#xff0c;直到学会基本的爬虫&#xff0c;使用python搭建接口自动化测试就算学会了&#xff0c;在进阶webui自动化&#xff0c;app自动化 python基础8-灵活运用顺序、选择、循环结构 写一些小练习题目1、给一个半径&#xff0c;求圆的面积和周长&#xff0c;…

四相机设计实现全向视觉感知的开源空中机器人无人机

开源空中机器人 基于深度学习的OmniNxt全向视觉算法OAK-4p-New 全景硬件同步相机 机器人的纯视觉避障定位建图一直是个难题&#xff1a; 系统实现复杂 纯视觉稳定性不高 很难选到实用的视觉传感器 为此多数厂家还是采用激光雷达的定位方案。 OAK-4p-New 为了弥合这一差距…

Diagramming AI: 使用自然语言来生成各种工具图

前言 在画一些工具图时&#xff08;流程图、UML图、架构图&#xff09;&#xff0c;你还在往画布上一个个的拖拽组件来进行绘制么&#xff1f;今天介绍一款更有效率的画图工具&#xff0c;它能够通过简单的自然语言描述来完成一个个复杂的图。 首页 进入官网之后&#xff0c;我…

springboot启动不了 因一个spring-boot-starter-web底下的tomcat-embed-core依赖丢失

这个包丢失了 启动不了 起因是pom中加入了 <tomcat.version></tomcat.version>版本指定&#xff0c;然后idea自动编译后&#xff0c;包丢了&#xff0c;删除这个配置后再也找不回来&#xff0c; 这个包正常在 <dependency><groupId>org.springframe…

“笃威尔数字技术”受邀出席2024 H-Tech Data创新情报论坛!

​ 2024年12月20日&#xff0c;以“创新情报 向新而行”为主题的2024 H-Tech Data创新情报论坛暨创新情报专业委员会成立仪式在深圳成功举办。本次大会由中国科学技术情报学会主办&#xff0c;由深圳国家高新技术产业创新中心牵头承办&#xff0c;旨在围绕技术赋能、场景应用、…

Android Studio 的革命性更新:Project Quartz 和 Gemini,开启 AI 开发新时代!

&#x1f31f; Android Studio 的革命性更新&#xff1a;Project Quartz 和 Gemini&#xff0c;开启 AI 开发新时代&#xff01; 在这个技术飞速发展的时代&#xff0c;Android 开发者们迎来了两项重大更新&#xff1a;Project Quartz 和 Gemini。这不仅仅是更新&#xff0c;而…

kkfileview代理配置,Vue对接kkfileview实现图片word、excel、pdf预览

kkfileview部署 官网&#xff1a;https://kkfileview.keking.cn/zh-cn/docs/production.html 这个是官网部署网址&#xff0c;这里推荐大家使用docker镜像部署&#xff0c;因为我是直接找运维部署的&#xff0c;所以这里我就不多说明了&#xff0c;主要说下nginx代理配置&am…

RT-DETR学习笔记(2)

七、IOU-aware query selection 下图是原始DETR。content query 是初始化为0的label embedding, position query 是通过nn.Embedding初始化的一个嵌入矩阵&#xff0c;这两部分没有任何的先验信息&#xff0c;导致DETR的收敛慢。 RT-DETR则提出要给这两部分&#xff08;conten…

iOS 苹果开发者账号: 查看和添加设备UUID 及设备数量

参考链接&#xff1a;苹果开发者账号下添加新设备UUID - 简书 如果要添加新设备到 Profiles 证书里&#xff1a; 1.登录开发者中心 Sign In - Apple 2.找到证书设置&#xff1a; Certificate&#xff0c;Identifiers&Profiles > Profiles > 选择对应证书 edit &g…

汽车IVI中控开发入门及进阶(47):CarPlay开发

概述: 车载信息娱乐(IVI)系统已经从仅仅播放音乐的设备发展成为现代车辆的核心部件。除了播放音乐,IVI系统还为驾驶员提供导航、通信、空调、电源配置、油耗性能、剩余行驶里程、节能建议和许多其他功能。 ​ 驾驶座逐渐变成了你家和工作场所之外的额外生活空间。2014年,…

Oracle、ACCSEE与TDMS的区别

Oracle、ACCSEE和TDMS都是不同类型的数据管理和存储工具&#xff0c;它们各自有独特的用途、结构和复杂性。Oracle是一个功能强大的关系型数据库管理系统&#xff0c;适用于大规模企业级应用&#xff0c;支持复杂查询和事务管理。ACCSEE主要应用于实时数据采集和过程监控&#…

商场消防电气控制系统设计(论文+源码)

1系统的功能及方案设计 如图2.1所示为本次设计的整体框图&#xff0c;其中单片机部分采用ST89C52来负责协调各个模块&#xff1b;液晶选择LCD1602液晶屏来显示信息;温度传感器选择PT1000进行温度的检测&#xff1b;烟雾传检测选择MQ2烟雾传感器&#xff1b;CO2检测选择CCS811模…

7. petalinux 根文件系统配置(package group)

根文件系统配置&#xff08;Petalinux package group&#xff09; 当使能某个软件包组的时候&#xff0c;依赖的包也会相应被使能&#xff0c;解决依赖问题&#xff0c;在配置页面的help选项可以查看需要安装的包 每个软件包组的功能: packagegroup-petalinux-audio包含与音…

2024年12月一区SCI-加权平均优化算法Weighted average algorithm-附Matlab免费代码

引言 本期介绍了一种基于加权平均位置概念的元启发式优化算法&#xff0c;称为加权平均优化算法Weighted average algorithm&#xff0c;WAA。该成果于2024年12月最新发表在中JCR1区、 中科院1区 SCI期刊 Knowledge-Based Systems。 在WAA算法中&#xff0c;加权平均位置代表当…

操作系统(23)外存的存储空间的管理

一、外存的基本概念与特点 定义&#xff1a;外存&#xff0c;也称为辅助存储器&#xff0c;是计算机系统中用于长期存储数据的设备&#xff0c;如硬盘、光盘、U盘等。与内存相比&#xff0c;外存的存储容量大、成本低&#xff0c;但访问速度相对较慢。特点&#xff1a;外存能够…

【202】仓库管理系统

-- 基于springboot仓库管理系统设计与实现 开发技术栈: 开发语言 : Java 开发软件 : Eclipse/MyEclipse/IDEA JDK版本 : JDK8 后端技术 : SpringBoot 前端技术 : Vue、Element、HTML、JS、CsS、JQuery 服务器 : Tomcat8/9 管理包 : Maven 数据库 : MySQL5.x/8 数据库工具 : …

iDP3复现代码数据预处理全流程(二)——vis_dataset.py

vis_dataset.py 主要作用在于点云数据的可视化&#xff0c;并可以做一些简单的预处理 关键参数基本都在 vis_dataset.sh 中定义了&#xff0c;需要改动的仅以下两点&#xff1a; 1. 点云图像保存位置&#xff0c;因为 dataset_path 被设置为了绝对路径&#xff0c;因此需要相…