redis基本命令和五种数据结构

本文详细介绍了Redis的基础命令,包括String、Hash、List、Set和Zset等五种数据结构的使用方法,如set/get、keys、exists、expire、del、save、flushall等操作。此外,还阐述了不同数据类型的应用场景,如计步器、缓存、消息队列、标签管理等,强调了在生产环境中合理使用Redis命令的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

redis基础命令

set/get非常常用字符串类型数据的写/覆盖,和读
以下命令是不分数据类型(key-value类型是总类型,在redis中对于value的数据结构是严格区分的),存在五种不同的value数据类型

keys *(pattern)

表示在客户端查看当前redis服务端内存中所有数据key值

keys *
将所有数据返回,没有数据时,返回空,这里返回的都是内存中保存的数据key值
  • 不支持分布式结构,不能通过一个keys *从一个redis服务中查看其他redis数据
  • 生产环境(客户使用环境)使用keys *不合理,造成读数据阻塞(一次读太多数据)

exists key值

表示要查看以下对应的key值数据是否在redis内存中存在。

keys *
exists age
exists haha

如果判断存在的数据,有读的操作,比如字符串类型的get,不需要exists的存在了?

不可以使用get这种读操作代替exists判断存在的操作,因为使用读判断存在,浪费了读数据的贷款,而且redis最新版本的一个value数据可以达到1GB大小

expire/pexpire key time

在redis中,可以根据需求对写入的数据设置超时时间,一旦到达超时时间,将会在内存中把数据删除,expire对某个key的数据做秒单位的超时,pexpire对key值做毫秒单位的超时,没有使用相关超时的数据写入时,默认是永久数据。

expire localtion 5
keys *

ttl/pttl key

在执行设置了超时时间的key值上,查看这个key的剩余时间。
ttl操作一个key能够看到剩余时间单位是秒,pttl看的是毫秒。

expire name 100
ttl name
pttl name

del key的删除数据

del可以对指定的key-value进行删除操作

keys *
del gender

save存储持久化

redis支持持久化,将内存数据,输出到持久化文件,内存数据保存到磁盘是哪个,redis重新启动时自动加载保存的持久化文件,将数据恢复回来。
save命令调用,就是将内存数据输出到持久化文件中保存。

save

flushall

冲刷所有,删除所有数据。将当前redis服务的内存数据和持久化文件中的数据全部清空。
尽可能在测试环境使用,不要到生产环境,

String类型的数据

redis是以key-value结构存储数据的,但是根据不同的应用场景,可以使用完全不同的value结构存储数据,包括:String字符串,Hash,List链表,set集合,zset有序集合
在这里插入图片描述

set key value

redis中可以对字符串类型进行写操作set命令,也可以在已有数据时,对数据覆盖操作,在redis中的大量命令可以携带不同的参数选项。

set bomb tnt EX 50

NX:在执行set时,会判断redis中有没有该key值,如果有则无法set,没有则可以set成功,表示,只有第一个set数据的客户端可以成功,后续都会失败

127.0.0.1:6379> set name li NX
(nil)

get key

从redis中读取key值的value数据,在redis中value最大数据长度1GB。get命令操作必须是String类型的value数据

127.0.0.1:6379> get age
"10"

incr/incrby decr/decrby(线程安全中扮演重要角色)

执行计步器,可以增加数值,减少数值。对应value字符串数据必须是纯数字。

127.0.0.1:6379> get age
"10"
127.0.0.1:6379> incr age
(integer) 11
127.0.0.1:6379> decr age
(integer) 10
127.0.0.1:6379> incrby age 10
(integer) 20
127.0.0.1:6379> decrby age 10
(integer) 10

常见的应用使用计步器:
记录排队人数(拿号,自增,叫号后,前剩余人数自减)
在线人数统计(每秒上下变动)

数据类型String应用场景

一般使用String类型的value数据实现缓存功能。并且可以利用代码的序列化和反序列化的方法,将对象序列化为字符串(user–>{“userName”:“wanglaoshi”}),在easymall中使用序列化将product对象变成json,以商品id作为唯一key值操作商品在redis的缓存数据

hash类型

hash在Redis中底层双层map形式存在,key-value是map,value在hash结构中又是一个map,所以它可以对应对象的数据结构。
在这里插入图片描述

hset key field value

在redis中创建一个key值为key,对应第二层map的key为field,第二层map的value为value

127.0.0.1:6379> hset user age 18
(integer) 1
127.0.0.1:6379> hset user name xiaohong
(integer) 1
127.0.0.1:6379> keys *
1) "age"
2) "user"
3) "name"

hget key field

127.0.0.1:6379> hget user name
"xiaohong"
127.0.0.1:6379> hget user age
"18"

hkeys/hvals key

hkeys key从key值的hash数据结构将所有的field属性名称返回
hvals key从key的hash数据结构将所有的filed的值返回
在这里插入图片描述

127.0.0.1:6379> hkeys user
1) "age"
2) "name"
127.0.0.1:6379> hvals user
1) "18"
2) "xiaohong"

删除数据

如果想把整个hash结构删掉,直接调用del全部删除
如果删除的是一个hash结构中的某个属性和值,那么hdel key filed

127.0.0.1:6379> hdel user name
(integer) 1
hkeys user# 查看hash中key的所有属性

hincrby

127.0.0.1:6379> hset user age 10
(integer) 1
127.0.0.1:6379> hincrby user age 10
(integer) 20
127.0.0.1:6379> hincrby user age -10
(integer) 10

应用场景

可以像String一样,执行某个项目中的缓存逻辑,不同环境使用不同结构,有不同的效果。
例如,缓存数据对象的结构比较复杂,属性不仅仅是Integer String还有数组,list,还有set,优先使用String类型,如果对象属性简单可以使用hash(造成代码比较复杂)
在这里插入图片描述
在这里插入图片描述

List双向链表

list底层双向链表可以从头和尾部处理数据,实现队列的结构(为了处理消息队列逻辑)
在这里插入图片描述

lpush/rpush key value

l/r表示左和右,lpush从链表又不,插入数据,rpush从链表的尾部,插入数据

127.0.0.1:6379> lpush student xiaowang
(integer) 1
127.0.0.1:6379> lpush student xiaohong
(integer) 2
127.0.0.1:6379> rpush student xiao
(integer) 3

lrange key start end

可以对一个list链表中的元素范围内的数据读取返回
lrange student 起始下标 结束下标

127.0.0.1:6379> lrange student 0 2
1) "xiaohong"
2) "xiaowang"
3) "xiao"

有时候不确定元素的个数,要想查看所有元素可以使用-1的end结尾

127.0.0.1:6379> lrange student 0 -1
1) "xiaohong"
2) "xiaowang"
3) "xiao"

lset key 元素下标index 修改值

127.0.0.1:6379> lset student 0 x
OK

rpop/lpop key

rpop从链表的尾部删除元素,并且将删除的元素值返回
lpop从链表的头部删除元素,将元素值返回(remove)
2代表的是数量

127.0.0.1:6379> lpop student 2
1) "x"
2) "xiaowang"

应用场景:
初始目的就是利用list的类型实现排队队列的处理逻辑,先来先得,先到先处理
可以在元素中封装一些消息属性,先进入队列,优先被pop出去进行处理。

set集合

可以将不同的,不重复元素值,放入到没有顺序概念的集合中,实现value数据在redis的管理

在这里插入图片描述

常用场景

登录系统时,给用户贴的标签。例如:登录一些明日头条这种推荐文件,推荐网站的系统,注册后选择自己兴趣爱好:军事,数学,历史,天文,登录后会跟你选择的内内容随机推荐不同的文章。
直播网站:lol王者荣耀,dota
还可以实现好友保存,计算共同好友。
在这里插入图片描述

sadd key member

新增元素到集合中

127.0.0.1:6379> sadd favor math english chinese
(integer) 3

srandmember key account

127.0.0.1:6379> srandmember favor 2
1) "math"
2) "english"

srem key元素值

127.0.0.1:6379> srem favor math
(integer) 1

sismember查看一个元素是否属于这个集合

127.0.0.1:6379> sismember favor math
(integer) 0

zset有序集合

在set集合上,实现了排序的方式,元素也是不可以重复,就是在元素的数据上绑定了一个评分的数字(实际应用场景中,评分可以不同业务意义,例如点击次数,例如播放量)
在这里插入图片描述

应用场景

网站各种排名,都可以使用zset有序集合
视频网站:热播剧,top10
热搜
小说网站

zadd key score member

将一个元素绑定一个分数后,写入到一个有序的集合中

127.0.0.1:6379> zadd sco 10 piao 
(integer) 1
127.0.0.1:6379> zadd sco 20 pio 
(integer) 1
127.0.0.1:6379> zadd sco 30 pi 
(integer) 1

排序查询rank/range

在有序集合中主要就是为了体现排序,所以使用命令最多的查询方式就是排序相关的内容

  • zrank key member:查看具体排名
127.0.0.1:6379> zrank sco piao
(integer) 0
127.0.0.1:6379> zrank sco pi
(integer) 2
  • zrange key start stop:查询排名从开始到结束范围内所有的元素
127.0.0.1:6379> zrange sco 0 -1
1) "piao"
2) "pio"
3) "pi"
  • zrangebyscore key minscore maxscore:在上限评分和下限评分之间的所有元素和排序
127.0.0.1:6379> zrangebyscore sco 20 30
1) "pio"
2) "pi"

zrem key member

将元素从zet类型中删除

127.0.0.1:6379> zrem sco piao
(integer) 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值