Redis 数据结构操作相关命令

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Redis 数据结构操作相关命令

Redis 数据结构操作相关命令


文章目录

Redis 数据结构操作相关命令

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

Redis服务器相关命令

keys查看

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

# 用于检查给定 key 是否存在 返回0/1 0不存在,1存在
exists key
# 查看当前数据库中设置key的数量
dbsize
# 清除当前数据库中的数据
flushdb
# 切换数据库
select N
# 清除所有数据库中的数据
flushall

注: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

设置带过期时间的key

set overtime guoqi ex 4
exists overtime

查看value类型

type aa
type a

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

set name yyl nx
set name yangyongli nx

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

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

设置key有效期

expire name 3000
ttl name

获取key

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

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

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

把value追加到key的原值上

append key value

设置新值同步返回旧值

getset key newValue

列表(list)操作命令

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

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

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

lpush key value

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

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

例如

实战操作:把数据库中用户表中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

批量获取和添加操作:

# 删除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"

集合(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

有序集合(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


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
14天前
|
NoSQL 应用服务中间件 API
Redis是如何建立连接和处理命令的
本文主要讲述 Redis 是如何监听客户端发出的set、get等命令的。
|
1月前
|
存储 消息中间件 缓存
Redis 5 种基础数据结构?
Redis的五种基础数据结构——字符串、哈希、列表、集合和有序集合——提供了丰富的功能来满足各种应用需求。理解并灵活运用这些数据结构,可以极大地提高应用程序的性能和可扩展性。
32 2
|
2月前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
45 5
|
2月前
|
存储 消息中间件 NoSQL
Redis数据结构:List类型全面解析
Redis数据结构——List类型全面解析:存储多个有序的字符串,列表中每个字符串成为元素 Eelement,最多可以存储 2^32-1 个元素。可对列表两端插入(push)和弹出(pop)、获取指定范围的元素列表等,常见命令。 底层数据结构:3.2版本之前,底层采用**压缩链表ZipList**和**双向链表LinkedList**;3.2版本之后,底层数据结构为**快速链表QuickList** 列表是一种比较灵活的数据结构,可以充当栈、队列、阻塞队列,在实际开发中有很多应用场景。
|
3月前
|
存储 NoSQL Java
介绍下Redis 的基础数据结构
本文介绍了Redis的基础数据结构,包括动态字符串(SDS)、链表和字典。SDS是Redis自实现的动态字符串,避免了C语言字符串的不足;链表实现了双向链表,提供了高效的操作;字典则类似于Java的HashMap,采用数组加链表的方式存储数据,并支持渐进式rehash,确保高并发下的性能。
介绍下Redis 的基础数据结构
|
2月前
|
存储 NoSQL Java
Redis命令:列表模糊删除详解
通过本文的介绍,我们详细探讨了如何在Redis中实现列表的模糊删除。虽然Redis没有直接提供模糊删除命令,但可以通过组合使用 `LRANGE`和 `LREM`命令,并在客户端代码中进行模糊匹配,来实现这一功能。希望本文能帮助你在实际应用中更有效地操作Redis列表。
81 0
|
2月前
|
存储 NoSQL 关系型数据库
Redis的ZSet底层数据结构,ZSet类型全面解析
Redis的ZSet底层数据结构,ZSet类型全面解析;应用场景、底层结构、常用命令;压缩列表ZipList、跳表SkipList;B+树与跳表对比,MySQL为什么使用B+树;ZSet为什么用跳表,而不是B+树、红黑树、二叉树
|
2月前
|
存储 NoSQL Redis
Redis常见面试题:ZSet底层数据结构,SDS、压缩列表ZipList、跳表SkipList
String类型底层数据结构,List类型全面解析,ZSet底层数据结构;简单动态字符串SDS、压缩列表ZipList、哈希表、跳表SkipList、整数数组IntSet
|
14天前
|
存储 缓存 NoSQL
解决Redis缓存数据类型丢失问题
解决Redis缓存数据类型丢失问题
157 85