Redis的数据类型及操作命令

目录

Redis数据类型

字符串类型string

1.set命令

2.get命令

3.del命令

4.setex命令

5.expire命令

6.setnx命令

补充

操作示例

hash类型

1.hset命令

2.hget命令

3.hmset命令

4.hmget命令

5.hdel命令

6.hgetall命令

7.hkeys命令

8.hvals命令

示例

List类型

1.lpush命令

2.rpush命令

3.lpop命令

4.rpop命令

5.lrange命令

6.lindex命令

7.lset命令

8.llen命令

9.brpop命令

10.lrem命令

示例

set类型

1.sadd命令

2.smembers命令

3.sismember命令

4.srem命令

5.sinter命令

6.scard命令

实例

[sorted set类型(zset类型)](#sorted set类型(zset类型))

1.zadd命令

2.zrange命令

3.zrevrange命令

4.zrem命令

5.zcard命令

6.zrank命令

7.zsocre命令

示例

其他常用命令

1.keys命令

2.del命令

3.exists命令

4.type命令

5.select命令

6.move命令

7.TTL命令

8.flushall命令

示例


Redis数据类型

redis是一种高级的key-value的存储系统键是string类型 ,其中value支持五种数据类型

值(value):

|-----------------|---------------------------------|
| 值的数据类型 | 值的格式说明 |
| string | 字符串类型,类似于java中的String类型 |
| hash | 由键值对组成,类似于java中的Map |
| list | 列表类型,类似于java中的List,元素是存取有序,可以重复 |
| set | 集合类型,类似于java中的Set,元素是存取无序,不可重复 |
| sorted set/zset | 有序的集合类型,每个元素有一个分数来决定它的顺序 |

命令官网:https://www.redis.net.cn

字符串类型string

在Redis中字符串类型最多可以容纳的数据长度是512M

1.set命令

Redis SET 命令用于设置给定 key 的值。如果 key 已经存储其他值, SET 就覆写旧值,且无视类型。

SET KEY_NAME VALUE

2.get命令

Redis Get 命令用于获取指定 mkey 的值。如果 key 不存在,返回 nil 。如果key 储存的值不是字符串类型,返回一个错误。

GET KEY_NAME

3.del命令

删除指定的键和值,返回删除的个数

4.setex命令

Redis Setex 命令为指定的 key 设置值及其过期时间。如果 key 已经存在, SETEX 命令将会替换旧的值。

SETEX mykey 60 redis

让mykey这个键只有60秒的存在时间

5.expire命令

Redis Expire 命令用于设置 **key (已存在)**的过期时间。key 过期后将不再可用。

Expire KEY_NAME TIME_IN_SECONDS

6.setnx命令

Redis Setnx(SET if N ot eX ists) 命令在指定的 key 不存在时,为 key 设置指定的值,所以不会修改已存在的key值的value值

SETNX KEY_NAME VALUE

补充

mset name(键) list(值) addr(键) sh(值) -->批量添加

mget name addr -->批量查询key的value值

del name addr -->批量删除key

操作示例

centos1:0>set name hhh #添加name(key)值为hhh
"OK"
centos1:0>set age 19
"OK"
centos1:0>mget age name #批量查询key值
 1)  "19"
 2)  "hhh"
centos1:0>del name 删除key
"1"
centos1:0>get name
null
centos1:0>mset name aa addr sh #批量添加key
"OK"
centos1:0>mget name age addr
 1)  "aa"
 2)  "19"
 3)  "sh"
centos1:0>del name age
"2"

centos1:0>set addr bj #修改key->addr的value
"OK"

centos1:0>get addr #查询
"bj"

centos1:0>setex name 5 hh #设置name的存活时间为5秒
"OK"

centos1:0>get name
"hh"

centos1:0>get name #5秒到了就变成null
null

centos1:0>set name hh
"OK"

centos1:0>expire name 5  #为已经存在的key设置存活时间
"1"

centos1:0>get name
"hh"

centos1:0>get name
null

centos1:0>setnx addr an  #如果不存在addr键就保存该value值,如果存在就不会修改原value值
"0"

centos1:0>set addr an  #会修改addr的原value值
"OK"

hash类型

键->字段 值

1.hset命令

Redis Hset 命令用于为哈希表中的字段赋值 。

如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。

如果字段已经存在于哈希表中,旧值将被覆盖。

HSET KEY_NAME FIELD VALUE

2.hget命令

Redis Hget 命令用于返回哈希表中指定字段的值。

HGET KEY_NAME FIELD_NAME

3.hmset命令

Redis Hmset 命令用于同时将多个 field-value (字段-值)对设置到哈希表中。

此命令会覆盖哈希表中已存在的字段。

如果哈希表不存在,会创建一个空哈希表,并执行 HMSET 操作。

HMSET KEY_NAME FIELD1 VALUE1 ...FIELDN VALUEN

4.hmget命令

Redis Hmget 命令用于返回哈希表中,一个或多个给定字段的值。

如果指定的字段不存在于哈希表,那么返回一个 nil 值。

HMGET KEY_NAME FIELD1...FIELDN

5.hdel命令

Redis Hdel 命令用于删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略。

HDEL KEY_NAME FIELD1.. FIELDN

6.hgetall命令

Redis Hgetall 命令用于返回哈希表中,所有的字段和值。

在返回值里,紧跟每个字段名(field name)之后是字段的值(value),所以返回值的长度是哈希表大小的两倍。

HGETALL KEY_NAME

7.hkeys命令

Redis Hkeys 命令用于获取哈希表中的所有字段名。

HKEYS KEY_NAME

8.hvals命令

Redis Hvals 命令返回哈希表所有字段的值。

HVALS KEY_NAME

示例

centos1:0>hset person name hhh #创建一个名字为person的哈希表,并保存name字段和其字段值
"1"

centos1:0>hset person age 13
"1"

centos1:0>hmset person addr sh phone 183 #在person哈希表中批量创建字段
"OK"

centos1:0>hget person addr #查看person哈希表中addr的字段值
"sh"

centos1:0>hmget person name age addr phone #批量查看
 1)  "hhh"
 2)  "13"
 3)  "sh"
 4)  "183"
centos1:0>hgetall person  #获取person哈希表中所有的字段和字段值
 1)  "name"
 2)  "hhh"
 3)  "age"
 4)  "13"
 5)  "addr"
 6)  "sh"
 7)  "phone"
 8)  "183"
centos1:0>hdel person name
"1"

centos1:0>hdel person age addr phone #批量删除person哈希表中的字段

centos1:0>hgetall person #如果该哈希表中的所有字段都被删除,那么这个哈希表也会被删除

centos1:0>hmset user name hhh age 18
"OK"
centos1:0>hgetall user
 1)  "name"
 2)  "hhh"
 3)  "age"
 4)  "18"
centos1:0>hkeys user #查看user哈希表中所有的字段
 1)  "name"
 2)  "age"
centos1:0>hvals user #查看user哈希表中所有的字段值
 1)  "hhh"
 2)  "18"

List类型

1.lpush命令

Redis Lpush 命令将一个或多个值插入到列表头部。 如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。 当 key 存在但不是列表类型时,返回一个错误。

LPUSH KEY_NAME VALUE1.. VALUEN

2.rpush命令

Redis Rpush 命令用于将一个或多个值插入到列表的尾部(最右边)。

如果列表不存在,一个空列表会被创建并执行 RPUSH 操作。 当列表存在但不是列表类型时,返回一个错误。

3.lpop命令

Redis Lpop 命令用于移除并返回列表的第一个元素。

LPOP list1

4.rpop命令

Redis Rpop 命令用于移除并返回列表的最后一个元素。

RPOP KEY_NAME

5.lrange命令

Redis Lrange 返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

LRANGE KEY_NAME START END

6.lindex命令

Redis Lindex 命令用于通过索引获取列表中的元素。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

LINDEX KEY_NAME INDEX

7.lset命令

Redis Lset 通过索引来设置元素的值。

当索引参数超出范围,或对一个空列表进行 LSET 时,返回一个错误。

LSET KEY_NAME INDEX VALUE

8.llen命令

Redis Llen 命令用于返回列表的长度。 如果列表 key 不存在,则 key 被解释为一个空列表,返回 0 。 如果 key 不是列表类型,返回一个错误

LLEN KEY_NAME

9.brpop命令

Redis Brpop 命令移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止

brpop KEY_NAME TIMEOUT-->删除列表的最后一个元素,如果给列表为空,则阻塞等待timeout秒,然后列表被删除

10.lrem命令

Redis Lrem 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。

COUNT 的值可以是以下几种:

  • count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
  • count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
  • count = 0 : 移除表中所有与 VALUE 相等的值。

LREM KEY_NAME COUNT VALUE

示例

centos1:0>lpush mylist a b c #往mylist列表从左边开始添加数据
"3"

centos1:0>rpush mylist 1 2 3 #从右边添加
"6"

centos1:0>lrange mylist 0 2 #查看mylist列表0到2索引的值
 1)  "c"
 2)  "b"
 3)  "a"

centos1:0>lrange mylist centos1:0>0 -1 #查看mylist列表中所有的值
 1)  "c"
 2)  "b"
 3)  "a"
 4)  "1"
 5)  "2"
 6)  "3"
centos1:0>lindex mylist 2 #查看mylist列表中索引为2的值
"a"

centos1:0>rpush mylist 3 
"7"

centos1:0>lpop mylist #从左边删除一个元素
"c"

centos1:0>rcentos1:0>rpop mylist  #从右边删除一个元素
"3"


centos1:0>llen mylist #查看列表长度
"5"

centos1:0>lpush list a b c b b
"5"

centos1:0>lrem list -2 b #从右边开始删除两个b元素
"2"

centos1:0>lrange list 0 -1
 1)  "b"
 2)  "c"
 3)  "a"
centos1:0>lset list 1 d #修改索引为1的值
"OK"

centos1:0>lrange list 0 -1
 1)  "b"
 2)  "d"
 3)  "a"
centos1:0>brpop list 5 #删除列表中最后一个元素
 1)  "list"
 2)  "a"
centos1:0>brpop list 5
 1)  "list"
 2)  "d"
centos1:0>brpop list 5
 1)  "list"
 2)  "b"
centos1:0>brpop list 5 #列表中没有元素,就会阻塞等待5秒,再删除列表


centos1:0>

set类型

元素无序,不可重复

1.sadd命令

Redis Sadd 命令将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。

假如集合 key 不存在,则创建一个只包含添加的元素作成员的集合。

当集合 key 不是集合类型时,返回一个错误。

SADD KEY_NAME VALUE1..VALUEN

2.smembers命令

Redis Smembers 命令返回集合中的所有的成员。 不存在的集合 key 被视为空集合。

SMEMBERS KEY

3.sismember命令

Redis Sismember 命令判断成员元素是否是集合的成员。存在返回1,不存在返回0

SISMEMBER KEY VALUE

4.srem命令

Redis Srem 命令用于移除集合中的一个或多个成员元素,不存在的成员元素会被忽略。

当 key 不是集合类型,返回一个错误。

SREM KEY MEMBER1..MEMBERN

5.sinter命令

Redis Sinter 命令返回给定所有给定集合的交集。 不存在的集合 key 被视为空集。 当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)。

SINTER KEY KEY1..KEYN

6.scard命令

Redis Scard 命令返回集合中元素的数量。

SCARD KEY_NAME

实例

centos1:0>sadd myset a b c 1 2 3 #向myset集合添加元素
"6"

centos1:0>sadd myset B
"1"

centos1:0>sismember myset B #判断B元素是否存在于myset集合
"1"

centos1:0>smembers myset #显示myset集合中所有的元素
 1)  "c"
 2)  "a"
 3)  "b"
 4)  "3"
 5)  "2"
 6)  "1"
 7)  "B"
centos1:0>srem myset c #删除myset集合的c元素
"1"

centos1:0>smembers myset
 1)  "a"
 2)  "b"
 3)  "3"
 4)  "2"
 5)  "1"
 6)  "B"
centos1:0>sadd myset2 a c d 5 2 1
"6"

centos1:0>sinter myset myset2 #查看两个集合的交集
 1)  "a"
 2)  "2"
 3)  "1"
centos1:0>scard myset #查看myset集合的元素个数
"6"

centos1:0>

sorted set类型(zset类型)

Redis有序集合sorted set和set集合一样都是无序,不重复但是有序集合中每个元素都会关联一个分数(排序因子)。redis就是通过分数来对有序集合中的成员元素进行排序

有序集合中的成员是不可重复的,但是分数是可以重复的。每个有序集合可以存储40多亿个成员。

1.zadd命令

Redis Zadd 命令用于将一个或多个成员元素及其分数值加入到有序集当中。

如果某个成员已经是有序集的成员,那么更新这个成员的分数值,并通过重新插入这个成员元素,来保证该成员在正确的位置上。

分数值可以是整数值或双精度浮点数。

如果有序集合 key 不存在,则创建一个空的有序集并执行 ZADD 操作。

当 key 存在但不是有序集类型时,返回一个错误。

ZADD KEY_NAME SCORE1 VALUE1.. SCOREN VALUEN

2.zrange命令

Redis Zrange 返回有序集中,指定区间内的成员。

其中成员的位置按分数值递增(从小到大)来排序

具有相同分数值的成员按字典序(lexicographical order )来排列。

ZRANGE key start stop [WITHSCORES]-->代指分数

3.zrevrange命令

Redis Zrevrange 命令返回有序集中,指定区间内的成员。

其中成员的位置按分数值递减(从大到小)来排列。

ZREVRANGE key start stop [WITHSCORES]

4.zrem命令

Redis Zrem 命令用于移除有序集中的一个或多个成员,不存在的成员将被忽略。

当 key 存在但不是有序集类型时,返回一个错误。

ZRANK key member...

5.zcard命令

Redis Zcard 命令用于计算集合中元素的数量。

ZCARD KEY_NAME

6.zrank命令

Redis Zrank 返回有序集中指定成员的排名。其中有序集成员按分数值递增(从小到大)顺序排列

排名从0开始

ZRANK key member

7.zsocre命令

Redis Zscore 命令返回有序集中,成员的分数值。 如果成员元素不是有序集 key 的成员,或 key 不存在,返回 nil 。

ZSCORE key member

示例

centos1:0>zadd student 90 hhh #向student有序集合添加分数为90的hhh值
"1"


centos1:0>zadd student 70 zbc 80 abc #批量添加
"2"


centos1:0>zrange student 0 -1 withscores #从小到大查询并带有分数
 1)  "zbc"
 2)  "70"
 3)  "abc"
 4)  "80"
 5)  "hhh"
 6)  "90"

centos1:0>zrevrange student 0 -1 withscores #从大到小查询并带有分数
 1)  "hhh"
 2)  "90"
 3)  "abc"
 4)  "80"
 5)  "zbc"
 6)  "70"
centos1:0>zcard student #查看有序集合的元素个数
"3"

centos1:0>zrank student hhh #查看hhh的排名(从小到大,从0开始)
"2"

centos1:0>zscore student hhh #查看hhh的分数
"90"

centos1:0>zrank student abc
"1"

centos1:0>zrank student zcentos1:0>bc
"0"

其他常用命令

1.keys命令

用于查找所有的键,可以使用通配符,如*

keys *

2.del命令

Redis DEL 命令用于删除**(任意类型)**已存在的键。不存在的 key 会被忽略。

DEL KEY_NAME

3.exists命令

Redis EXISTS 命令用于检查给定 key 是否存在。

EXISTS KEY_NAME

4.type命令

Redis Type 命令用于返回 key 所储存的值的类型。

TYPE KEY_NAME

5.select命令

选择其他数据库

select 数据库编号

6.move命令

Redis MOVE 命令用于将当前数据库的 key 移动到给定的数据库 db 当中。

MOVE KEY_NAME DESTINATION_DATABASE

7.TTL命令

Redis TTL 命令以秒为单位返回 key 的剩余过期时间。

返回值:

当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以秒为单位,返回 key 的剩余生存时间。

TTL KEY_NAME

8.flushall命令

用来清空redis所有的库

示例

centos1:0>set name hhh
"OK"

centos1:0>sadd myset 20
"1"

centos1:0>keys my*  #查看以my开头的所有键
 1)  "myset"
 2)  "mylist"
 3)  "myset2"
centos1:0>keys my???  #查看以my开头后有3个字符的所有键
 1)  "myset"
centos1:0>set name2 aaa
"OK"

centos1:0>lpush list name3 a b c
"4"

centos1:0>keys *
 1)  "name"
 2)  "myset"
 3)  "mylist"
 4)  "list"
 5)  "name2"
 6)  "student"
 7)  "myset2"
 8)  "user"
centos1:0>del name name2  #删除键,不论什么类型
"2"

centos1:0>exists name  #判断name键是否存在
"0"


centos1:0>type user  #查看user键的类型
"hash"

centos1:0>select 15 #切换到15数据库
"OK"

centos1:15>set name2 ccc
"OK"

centos1:15>move name2 0 #把name2键移动到0数据库
"1"

centos1:15>keys *


centos1:15>select 0
"OK"

centos1:0>keys *
 1)  "myset"
 2)  "mylist"
 3)  "name2"
 4)  "list"
 5)  "student"
 6)  "myset2"
 7)  "user"
centos1:0>get name2
"ccc"
相关推荐
书山有路_邓2 小时前
vscode 如何鼠标双击时选择带有-的
前端
呆呆小雅3 小时前
C# 可空类型
数据库·oracle·c#
Duck Bro4 小时前
MySQL:常用数据类型
java·数据库·c++·mysql·java-ee
张三风啊4 小时前
vue config 接口地址配置
前端·javascript·vue.js
z千鑫4 小时前
【C/C++】数据库链接入门教程:从零开始的详细指南!MySQL集成与操作
c语言·数据库·c++
开敲4 小时前
【MySQL】MySQL数据库基础
数据库·mysql
多情码农无情键4 小时前
浏览器漫谈HTML--2.2从表单标签看vue的响应式系统 理论+实战
前端·javascript·html
Uluoyu4 小时前
Vue.Draggable使用nested-with-vmodel进行拖拽
前端·javascript·vue.js
北极糊的狐4 小时前
vue页面成绩案例(for渲染表格/删除/添加/统计总分/平均分/不及格显红色/输入内容去首尾空格trim/输入内容转数字number)
前端·javascript·vue.js
痞老板A小安装C44 小时前
Redis 过期策略和内存淘汰策略
数据库·redis·缓存