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

news/2024/12/29 9:58:54/

redis_0">一、redis基本介绍

redis_1">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

redis_14">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号数据库 

redis_32">3.redis的数据类型

redis键值对说明

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

redis_45">二、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.ppmy.cn/news/1559040.html

相关文章

【Git_bugs】remote error GH013 Repository rule violations found for.md

背景 1 在一个分支上的提交顺序如下&#xff1a;-> 代表新的提交 在提交 E 中&#xff0c;文件包含了 GitHub 生成的 token提交 F 是一次普通的提交&#xff0c;不包含 token A -> ... -> E -> F (敏感信息在 E 中)附&#xff1a;给提交起名是为了方便说明问题。…

【蓝桥杯——物联网设计与开发】拓展模块5 - 光敏/热释电模块

目录 一、光敏/热释电模块 &#xff08;1&#xff09;资源介绍 &#x1f505;原理图 &#x1f505;AS312 &#x1f319;简介 &#x1f319;特性 &#x1f505;LDR &#xff08;2&#xff09;STM32CubeMX 软件配置 &#xff08;3&#xff09;代码编写 &#xff08;4&#x…

Docker--Bitnami/mysql

Bitnami package for MySQL What is MySQL? MySQL is a fast, reliable, scalable, and easy to use open source relational database system. Designed to handle mission-critical, heavy-load production applications. Overview of MySQL⁠ Trademarks: This software l…

梳理你的思路(从OOP到架构设计)_设计模式Template Method模式

目录 1、Template Method模式 2、范例&#xff1a; Android TM模式 3、基于TM模式的扩充&#xff1a;以游戏的绘图循环(Game Loop)为例 4、Android中处处可见TM模型的应用 1、Template Method模式 在前面各节里&#xff0c;我们介绍过&#xff0c;控制反转(IoC:Inversion…

`we_chat_union_id IS NOT NULL` 和 `we_chat_union_id != ‘‘` 这两个条件之间的区别

文章目录 1、什么是空字符串&#xff1f;2、两个引号之间加上空格 好的&#xff0c;我们来详细解释一下 we_chat_union_id IS NOT NULL 和 we_chat_union_id ! 这两个条件之间的区别&#xff0c;以及它们在 SQL 查询中的作用&#xff1a; 1. we_chat_union_id IS NOT NULL 含…

设计模式——装饰模式

文章目录 1.定义2. 结构组成3. 组合模式结构4. 示例代码5. 模式优势6. 应用场景 1.定义 装饰模式就像是给你的对象穿上不同的 “时尚服装”&#xff0c;在程序运行时&#xff0c;你可以随意地给对象搭配各种 “服装” 来增加新的功能&#xff0c;而且完全不用对对象本身的 “身…

PyAudio库基本知识详解——为自制PCM音频播放器做准备

前言 结合前段时间我们做的音频编解码器&#xff0c;这样我们就可以将获取到的ADPCM数据&#xff0c;转换成PCM数据&#xff0c;然后播放出来&#xff0c;得到一个完整的音频数据&#xff0c;因此&#xff0c;接下来几篇文章中&#xff0c;我们想做一个播放PCM格式的音频播放器…

嵌入式硬件面试题

1、请问什么是通孔、盲孔和埋孔&#xff1f;孔径多大可以做机械孔&#xff0c;孔径多小必须做激光孔&#xff1f;请问激光微型孔可以直接打在元件焊盘上吗&#xff0c;为什么&#xff1f; 通孔是贯穿整个PCB的过孔&#xff0c;盲孔是从PCB表层连接到内层的过孔&#xff0c;埋孔…