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

一、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
      // 返回空,因为上条指令全删掉了

三、总结

在这里插入图片描述

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

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

相关文章

sql字段值转字段

表alertlabel中记录变字段 如何用alertlabel表得到下面数据 实现的sql语句 select a.AlertID, (select Value from alertlabel where AlertIDa.AlertID and Labelhost) as host, (select Value from alertlabel where AlertIDa.AlertID and Labeljob) as job from (select …

llamafactory报错:双卡4090GPU,训练qwen2.5:7B、14B时报错GPU显存不足(out of memory),轻松搞定~~~

实际问题场景&#xff1a; 使用llamafactory进行微调qwen2.5 7B和14B的大模型时&#xff0c;会出现out of memory的报错。尝试使用降低batch_size&#xff08;原本是2&#xff0c;现在降到1&#xff09;的方式&#xff0c;可以让qwen2.5:7B跑起来&#xff0c;但时不时会不稳定…

【hackmyvm】hacked靶机wp

tags: HMVrootkitDiamorphine Type: wp 1. 基本信息^toc 文章目录 1. 基本信息^toc2. 信息收集2.1. 端口扫描2.2. 目录扫描2.3. 获取参数 3. 提权 靶机链接 https://hackmyvm.eu/machines/machine.php?vmHacked 作者 sml 难度 ⭐️⭐️⭐️⭐️️ 2. 信息收集 2.1. 端口扫描…

.NET平台用C#通过字节流动态操作Excel文件

在.NET开发中&#xff0c;通过字节流动态操作Excel文件提供了一种高效且灵活的方式处理数据。这种方法允许开发者直接在内存中创建、修改和保存Excel文档&#xff0c;无需依赖直接的文件储存、读取操作&#xff0c;从而提高了程序的性能和安全性。使用流技术处理Excel不仅简化了…

应用层1——C/S、P2P、DNS域名系统

目录 一、网络应用模型 1、C/S 2、p2p模型 二、域名解析系统DNS 1、为什么有DNS系统&#xff1f; 2、域名的特点 3、DNS域名系统原理 4、递归查询、迭代查询 5、常用的根域名与顶级域名 一、网络应用模型 1、C/S 客户/服务器模型 客户请求服务&#xff0c;服务器提供…

【疑难杂症】 HarmonyOS NEXT中Axios库的响应拦截器无法拦截424状态码怎么办?

今天在开发一个HarmonyOS NEXT的应用的时候&#xff0c;发现http接口如果返回的状态码是424时&#xff0c;我在axios中定义的拦截器失效了。直接走到了业务调用的catch中。 问题表现&#xff1a; 我的拦截器代码如下&#xff1a; 解决办法&#xff1a; 先说解决办法&#xff…

在Windows上读写Linux磁盘镜像的一种方法

背景 嵌入式开发中&#xff0c;经常会把系统的Linux磁盘镜像保存到Windows上&#xff0c;以便上传到网盘备份或发送给工厂&#xff0c;但是如果想读取/修改镜像中的某个文件&#xff0c;一般有2种方案&#xff1a; 直接访问 就是用虚拟磁盘软件将镜像文件挂载成磁盘&#xf…

ffmpeg之显示一个yuv照片

显示YUV图片的步骤 1.初始化SDL库 目的&#xff1a;确保SDL库正确初始化&#xff0c;以便可以使用其窗口、渲染和事件处理功能。操作&#xff1a;调用 SDL_Init(SDL_INIT_VIDEO) 来初始化SDL的视频子系统。 2.创建窗口用于显示YUV图像&#xff1a; 目的&#xff1a;创建一个…

Windows下播放文件作为麦克风声源的一种方式

近期测试一种外语的ASR识别成功率&#xff0c;样本素材是懂这门语言的同事录制的mp3文件。测试client端原本是从麦克风拾音生成媒体流的。 这样&#xff0c;就需要想办法把mp3文件转换为测试client的输入声音。物理方式上&#xff0c;可以用一根音频线&#xff0c;把电…

如何在网页端使用 IDE 高效地阅读 GitHub 源码?

如何在网页端使用 IDE 高效地阅读 GitHub 源码&#xff1f; 前言什么是 GitHub1s&#xff1f;使用 GitHub1s 阅读 browser-use 项目源码步骤 1: 打开 GitHub 项目页面步骤 2: 修改 URL 使用 GitHub1s步骤 3: 浏览文件结构步骤 4: 使用代码高亮和智能补全功能步骤 5: 快速跳转和…

Microsoft word@【标题样式】应用不生效(主要表现为在导航窗格不显示)

背景 随笔。Microsoft word 2013基础使用&#xff0c;仅做参考和积累。 问题 Microsoft word 2013&#xff0c;对段落标题文字应用【标题样式】不生效&#xff08;主要表现为在导航窗格不显示&#xff09;。 图1 图2 观察图1和图2&#xff0c;发现图1的文字在应用【标题一】样…

2021.12.28基于UDP同信的相关流程

作业 1、将TCP的CS模型再敲一遍 服务器 #include <myhead.h> #define PORT 8888 #define IP "192.168.124.123" int main(int argc, const char *argv[]) {//创建套接字//绑定本机IP和端口号//监听客户端请求//接收客户端连接请求//收发消息//创建套接字int…

OpenCV和PyQt的应用

1.创建一个 PyQt 应用程序&#xff0c;该应用程序能够&#xff1a; 使用 OpenCV 加载一张图像。在 PyQt 的窗口中显示这张图像。提供四个按钮&#xff08;QPushButton&#xff09;&#xff1a; 一个用于将图像转换为灰度图一个用于将图像恢复为原始彩色图一个用于将图像进行翻…

kibana启动报错:Invalid character in header content [“kbn-name“]

启动时候kibana报错&#xff1a; 打开 kibana配置文件&#xff0c;config/kibana.yml&#xff0c;配置上server.name即可&#xff0c;如下&#xff1a;

Pandas08

Pandas01 Pandas02 Pandas03 Pandas04 Pandas05 Pandas06 Pandas07 文章目录 内容回顾同期群分析1.1 同期群分析概念1.2 案例代码 数据分析报告数据分析工作内容数据分析简历说明用户生命周期标签1 什么是生命周期标签2 如何计算生命周期标签 内容回顾 TGI 偏好分析 TGI 目标…

网页数据的解析提取之Beautiful Soup

前面博客介绍了正则表达式的相关用法&#xff0c;只是一旦正则表达式写得有问题&#xff0c;得到的结果就可能不是我们想要的了。而且每一个网页都有一定的特殊结构和层级关系&#xff0c;很多节点都用id或 class 作区分所以借助它们的结构和属性来提取不也可以吗? 本篇博客我…

电脑缺失sxs.dll文件要怎么解决?

一、文件丢失问题&#xff1a;以sxs.dll文件缺失为例 当你在运行某个程序时&#xff0c;如果系统提示“找不到sxs.dll文件”&#xff0c;这意味着你的系统中缺少了一个名为sxs.dll的动态链接库文件。sxs.dll文件通常与Microsoft的.NET Framework相关&#xff0c;是许多应用程序…

进军AI大模型-环境配置

语言环境配置 合法上网工具&#xff1a; 这个T子试试&#xff0c;一直稳定。走我链接免费用5天: https://wibnm.com/s/ywtc01/pvijpzy python版本&#xff1a; python3.12 Langchain: Introduction | &#x1f99c;️&#x1f517; LangChain v0.3 9月16日升级的版本 pip3…

WebStorm的下载安装指南

下载 打开网站https://www.jetbrains.com/webstorm/download/#sectionwindows 或者直接网盘下载 通过网盘分享的文件&#xff1a;WebStorm-2024.3.1.1.exe 链接: https://pan.baidu.com/s/16JRZjleFYshLbVvZB49-FA?pwdn5hc 提取码: n5hc –来自百度网盘超级会员v6的分享 安…

Vue使用pages构建多页应用

经过上一篇文章&#xff0c;大家对单页应用配置的都有了一定的了解。相信大家应该对如何构建一个 Vue 单页应用项目已经有所收获和体会&#xff0c;在大部分实际场景中&#xff0c;我们都可以构建单页应用来进行项目的开发和迭代&#xff0c;然而对于项目复杂度过高或者页面模块…