Redis 数据结构操作相关命令

Redis 数据结构操作相关命令

redis提供5种 string 字符串 list 列表 set 集合 zset 有序集合 hash

Redis服务器相关命令

keys查看

# 查找所有符合给定模式的key
keys 查询相应的key或通配符(*)

image-20220826222313346

# 用于检查给定 key 是否存在 返回0/1 0不存在,1存在
exists key

# 查看当前数据库中设置key的数量
dbsize

# 清除当前数据库中的数据
flushdb

# 切换数据库
select N

# 清除所有数据库中的数据
flushall

image-20220826222535358

注:flushdb 还是flushall 两个尽量不要用,知道就行,在开发时,可以用一用,上线一定不要用。

字符串(string)操作命令

# 用于设置给定 key 的值。如果 key 已经存储其他值, SET 就覆写旧值,且无视类型
set key value [ex 秒数]/[px 毫秒数]  [nx]/[xx]

注后两个参数一般不写

  • ex/px 缓存有效期 ex
  • nx: 表示key不存在时,执行操作
  • xx: 表示key存在时,执行操作
select 1
set name yyl
get name

image-20220826222712574

设置带过期时间的key

set overtime guoqi ex 4
exists overtime

image-20220826223041720

查看value类型

type aa
type a

image-20220826223205428

存在则添加失败,不存在则添加成功 nx

set name yyl nx
set name yangyongli nx

image-20220827080304958

存在则修改,不存在则添加 xx

set name yyl xx
set name yangyongli xx
set name yylyyl xx

image-20220827080858229

设置key有效期

expire name 3000
ttl name

image-20220827081000652

获取key

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

image-20220827081112488

一次性设置多个键值,语法如下:

mset key1 value1 key2 value2 …

# 获取多个key的值
mget key1 key2 key3 …

自增与自减 直接用,key自动创建,不需要先set

incr key   # 自增  每次自增1
decr key   # 自减  每次自减1
incrby key step # 指定步长的自增 可为负数
decrby key step # 指定步长的自减

例如

127.0.0.1:6379> incr number
(integer) 1
127.0.0.1:6379> incr number
(integer) 2
127.0.0.1:6379> decr number
(integer) 1
127.0.0.1:6379> incrby number 5
(integer) 6
127.0.0.1:6379> decrby number 6
(integer) 0

image-20220827081253655

把value追加到key的原值上

append key value

image-20220827081347437

设置新值同步返回旧值

getset key newValue

image-20220827081413083

列表(list)操作命令

类似于PHP中的索引数组,列表中的值是可以重复的。可以用列表来实现简单的队列。

可以实现先进后出,还可以实现先进先出

把值插入到列表的头部(左边)

lpush key value

image-20220827082145585

从列表右边(尾部)删除元素,并返回删除的元素值

rpop key

注:使用lpush 和 rpop 实现了 先进先出。

获取列表的长度

llen key

返回指定区间内的元素,下标从0开始

lrange key startIndex endIndex

注: 默认从左开始向右获取指定索引的值,从右开始负数开始,-1就是右边第1个元素。

从尾部添加

rpush key value

从头部删除元素并返回删除元素值

lpop key

移除列表的最后一个元素,并将该元素添加到另一个列表并返回

rpoplpush mylist otherlist

例如下面测试:

127.0.0.1:6379> lpush leftlist 1
(integer) 1
127.0.0.1:6379> rpop leftlist
"1"
127.0.0.1:6379> llen leftlist
(integer) 0
127.0.0.1:6379> lpush leftlist 1 2 3 4 5 6 7 8 9
(integer) 9
127.0.0.1:6379> lrange leftlist 3 6
1) "6"
2) "5"
3) "4"
4) "3"
127.0.0.1:6379> rpush leftlist 10
(integer) 10
127.0.0.1:6379> lpop leftlist
"9"
127.0.0.1:6379> lpop leftlist
"8"
127.0.0.1:6379> lpop leftlist
"7"
127.0.0.1:6379> lpop leftlist
"6"
127.0.0.1:6379> rpoplpush leftlist mylist
"10"

哈希(hash)操作命令

类似于PHP的关联数组。一般用于存储数据表中一条记录值。

注:关于hash的key的起名称:一般和数据表关联

表名:主键字段名:id值  

user:id:1  hash的key值

下面看一下哈希操作的语法:

基本操作:

# 把key中 field字段的值设置为 value,如果没有field字段,直接添加,如果有,则覆盖原field字段的值
hset key field value

# 一次性设置多个
hmset key field1 value1 field2 value2 …

# 获取key中指定field字段的值
hget key field

# 一次性获取之个key中field字段的值
hmget key field1 field2 …

# 返回key中所有字段的值
hgetall key

例如

image-20220827083300407

实战操作:把数据库中用户表中id为1的用户信息存到redis中,给hash中的key值单个设置值和单个key中的字段来获取。

hset user id 1
hset user name zhangsan
hset user age 20
hget user id
hget user name
hget user age

image-20220827083203998

批量获取和添加操作:

# 删除key中指定的field字段
hdel key field

# 返回key中元素的数量
hlen key

# 判断key中有没有field字段
hexists key field

# 把key中field字段的值自增长:步长可以为负数
hincrby key field step  

# 返回所有key对应的field字段
hkeys key

# 返回所有key对应field字段对应的值
hvals key

测试如下:

127.0.0.1:6379> hdel user age
(integer) 1
127.0.0.1:6379> hlen user
(integer) 2
127.0.0.1:6379> hexists user id
(integer) 1
127.0.0.1:6379> hexists user age
(integer) 0
127.0.0.1:6379> hincrby user id 4
(integer) 5
127.0.0.1:6379> hkey user
(error) ERR unknown command 'hkey'
127.0.0.1:6379> hkeys user
1) "id"
2) "name"
127.0.0.1:6379> hvals user
1) "5"
2) "zhangsan"

image-20220827083832838

集合(set)操作命令

redis的set是无序集合。集合里不允许有重复的元素。

set元素最大可以包含(2的32次方-1)个元素。

操作如下:

# 向集合key中添加元素
sadd key value1 value2

# 返回key集合中所有的元素
smembers key

# 返回key集合中元素的个数
scard key

# 删除key集合中为value1的元素
srem key value1

# 随机删除key集合中的1个元素并返回
spop key

# 判断value是否存在于key集合中
sismember key value

# 把源集合中的value删除,并添加到目标集合中  【移动】
smvoe sSet dSet value

交集并集

# 求出key1,key2两个集合的交集,并返回
sinter key1 key2

# 求出key1,key2两个集合的并集,并去重,并返回
sunion key1 key2

# 求出key1与key2的差集  
# 以key1集合为主,求出key1中和key2不同的元素并返回
sdiff key1 key2 

实战场景:存放用户Id,不重复的信息 抽奖,好友关系

sadd userid 1 2 3 4 5 6
smembers userid
scard userid
spop userid
smembers userid
sismember userid 1

image-20220827092241638

有序集合(zset)操作命令

和set一样有序集合,元素不允许重复,不同的是每个元素都会关联一个分值。

可以通过它的分值来进行排序。如实现手机APP市场的软件排名等需求的实现。

# 给key有序集合中添加元素
zadd key score(分值) value

# 删除key有序集合中指定的元素
zrem key value1

# 返回有序集中,指定区间位置内的成员
zrange key startIndex endIndex [withscores]  # 从小到大排列
zrevrange key startIndex endIndex [withscores]  # 从大到小排列


# 按照分值来删除元素,删除score在 min<=score<=max之间的
zremrangebyscore key min max

# 返回集合元素个数
zcard key

# 返回min <= score <= max分值区间内元素的数量
zcount key minScore maxScore

# 返回有序集中,成员的分数值
zscore key value

# 对有序集合中指定成员的分数加上增量 把value的分数+score值
zincrby key score 元素

测试如下:

127.0.0.1:6379> zadd phone 12 huawei
(integer) 1
127.0.0.1:6379> zadd phone 1 apple
(integer) 1
127.0.0.1:6379> zadd phone 11 vivo
(integer) 1
127.0.0.1:6379> zremrangebyscore phone 0 22
(integer) 3
127.0.0.1:6379> zcard phone
(integer) 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆萌宝儿姐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值