redis常用数据结构的操作命令

3 篇文章 0 订阅
本文详细介绍了Redis中的五种基本数据类型:String、List、Set、Zset和Hash的操作命令,包括增删查改等,并通过实例演示了各种命令的使用方法。此外,还提到了数据类型的特性和适用场景,如List可以实现消息队列等功能,Zset支持有序操作等。
摘要由CSDN通过智能技术生成


以下所有的命令都是我手敲过的,后面会另起文章对特殊的数据类型,以及一些操作的优弊性进行讲解。
讲解基本数据类型命令的时间复杂度和应用场景链接

基本命令

## 查询所有的键,* 是所有通配符
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> keys *
(empty array)
## 清空当前库中所有的键
127.0.0.1:6379> flushdb
OK
## 清空所有库中的键
127.0.0.1:6379> flushall
OK
## 切换到第一次数据库 redis默认就是使用第一个库
127.0.0.1:6379> select 0
OK
## 查看当前key的数据类型
127.0.0.1:6379> type name
string
## 以毫秒计设置key的过期时间
127.0.0.1:6379> PEXPIRE name 10000
(integer) 1
127.0.0.1:6379> ttl name
(integer) 7
## 代表着该key 已经过期
127.0.0.1:6379> ttl name
(integer) -2
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> keys *
1) "phone"
2) "age"
##  对key进行移动,以下的命令是移动到数据库1
127.0.0.1:6379> move age 1
(integer) 1
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
1) "age"
127.0.0.1:6379[1]> flushdb
OK
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> keys *
1) "phone"
## 对key值进行删除
127.0.0.1:6379> del phone
(integer) 1
127.0.0.1:6379> keys *
1) "name"
2) "phone"
3) "sex"
## 对一个key值进行重命名
127.0.0.1:6379> rename name newname
OK
127.0.0.1:6379> keys *
1) "newname"
2) "phone"
3) "sex"
## 从当前的库中随机获取一个key 
127.0.0.1:6379> RANDOMKEY
"phone"
127.0.0.1:6379> RANDOMKEY
"newname"
127.0.0.1:6379> RANDOMKEY
"sex"
127.0.0.1:6379> get newname
"xiaoli"
## 如果newname不存在,才会进行重命名,返回0 代表着重命名失败了
127.0.0.1:6379> RENAMEnx phone newname
(integer) 0
## 看该值是否存在
127.0.0.1:6379> EXISTS phone
(integer) 1
127.0.0.1:6379> keys *
1) "newname"
2) "phone"
3) "sex"
127.0.0.1:6379> expire newname 30
(integer) 1
127.0.0.1:6379> ttl
(error) ERR wrong number of arguments for 'ttl' command
127.0.0.1:6379> ttl newname
(integer) 22
## 对该key值取消过期时间 persist means 持续存在
127.0.0.1:6379> PERSIST newname
(integer) 1
## 代表着该key值并没有设置过期时间
127.0.0.1:6379> ttl newname
(integer) -1
127.0.0.1:6379> get newname
"xiaoli"
127.0.0.1:6379> scan 0
1) "0"
2) 1) "zset1"
   2) "zset"
   3) "salary"
   4) "zset2"
127.0.0.1:6379> 


String类型的命令

## set 创建一个key 为name的值
127.0.0.1:6379> set name xiaoming
OK
## 获取这个值
127.0.0.1:6379> get name
"xiaoming"
## 如果key为name的string类型的数据不存在,就创建成功,返回0代表着该值存在
127.0.0.1:6379> setnx name xiaohong
(integer) 0
## 设置过期时间
127.0.0.1:6379> setex name 30 xiaohong
OK
## 查看key为name的值还剩多少过期时间
127.0.0.1:6379> ttl name
(integer) 25
127.0.0.1:6379> ttl name
(integer) 22
# 过期了则过去不到值了
127.0.0.1:6379> get name
(nil)
# 批量set值 m即multi 
127.0.0.1:6379> mset name xiaoming age 10 phone 136
OK
127.0.0.1:6379> keys *
1) "name"
2) "phone"
3) "age"
## 批量获取
127.0.0.1:6379> mget name xiaoxiaoming age
1) "xiaoming"
2) (nil)
3) "10"
127.0.0.1:6379> mget name age phone
1) "xiaoming"
2) "10"
3) "136"
## 进行自增加1,一般浏览器浏览次数的功能,可以通过这个做
127.0.0.1:6379> incr phone
(integer) 137
##对自增的数目进行定义
127.0.0.1:6379> incrby phone 5
(integer) 142
127.0.0.1:6379> incr phone
(integer) 143
## 自减
127.0.0.1:6379> decr phone
(integer) 142
## 对自减的数量进行减少
127.0.0.1:6379> decrby phone 10
(integer) 132
## 先获取原先的值 然后赋于新值
127.0.0.1:6379> getset phone 123
"q23"
127.0.0.1:6379> get phone
"123"
## 返回value的长度
127.0.0.1:6379> STRLEN phone
(integer) 3
## 在value的后面进行添加
127.0.0.1:6379> append phone 456
(integer) 6
127.0.0.1:6379> get phone
"123456"
## 截取子字符串 蕾丝java的substring
127.0.0.1:6379> GETRANGE phone 0 1
"12"
## -1 代表着获取到最后一位
127.0.0.1:6379> getrange phone 0 -1
"123456"

List类型的命令

redis 的List可以用来实现 消息队列 栈 阻塞队列 双端队列等功能,其本身的数据结构为链表,故插入和删除比较快

## 左边插入数据
lpush list hellow world
(integer) 2
## 展示所有数据
127.0.0.1:6379> lrange list 0 -1
1) "world"
2) "hellow"
127.0.0.1:6379> lpush list xiaoming
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "xiaoming"
2) "world"
3) "hellow"
## 从右边插入数据
127.0.0.1:6379> rpush list xiaoming
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "xiaoming"
2) "world"
3) "hellow"
4) "xiaoming"
## 从左边移除一个数据
127.0.0.1:6379> LREM list 1 xiaoming
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "world"
2) "hellow"
3) "xiaoming"
## 从左边弹出一个数据
127.0.0.1:6379> lpop list 2
1) "world"
2) "hellow"
127.0.0.1:6379> lrange list 0 -1
1) "xiaoming"
## 从右边弹出一个数据加入到另一个list
127.0.0.1:6379> RPOPLPUSH list list1
"xiaoming"
127.0.0.1:6379> lrange list 0 -1
(empty array)
127.0.0.1:6379> lrange list1 0 -1
1) "xiaoming"
127.0.0.1:6379> del list1
(integer) 1
127.0.0.1:6379> lrange list1 0 -1
(empty array)
127.0.0.1:6379> lrange list1 0 -1
(empty array)
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> lpush list hello world 
(integer) 2
127.0.0.1:6379> lrange list1 0 -1
(empty array)
127.0.0.1:6379> lrange list 0 -1
1) "world"
2) "hello"
# 阻塞性的从左边弹出数据,10s看能不能袒护
127.0.0.1:6379> blpop list 10
1) "list"
2) "world"
127.0.0.1:6379> lrange list 0 -1
1) "hello"
127.0.0.1:6379> lpush list world
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "world"
2) "hello"
127.0.0.1:6379> blpop list 10
1) "list"
2) "world"
127.0.0.1:6379> lrange list 0 -1
1) "hello"
127.0.0.1:6379> blpop list
(error) ERR wrong number of arguments for 'blpop' command
127.0.0.1:6379> blpop list 1
1) "list"
2) "hello"
127.0.0.1:6379> lrange list 0 -1
## 阻塞性的从右边弹出
127.0.0.1:6379> BRPOP list 1
1) "list"
2) "hello"
## 讲一个或者多个元素 插入到已经存在的list中,如果这个list不存在则插入失败
127.0.0.1:6379> lpushx list1 gg
(integer) 0
127.0.0.1:6379> lrange list1 0 -1
(empty array)
127.0.0.1:6379> LLEN list
(integer) 1
127.0.0.1:6379> LTRIM list 0 0
OK
127.0.0.1:6379> lrange list 0 -1
1) "world"
127.0.0.1:6379> lpush list hellow
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "hellow"
2) "world"
## 对list进行介入
127.0.0.1:6379> LTRIM list 0 0
OK
127.0.0.1:6379> lrange list 0 -1
1) "hellow"
127.0.0.1:6379> LRANGE list 0 -1
1) "3"
2) "2"
3) "1"
## 在list中某个数的前面或者后面插入数据
127.0.0.1:6379> LINSERT list before 1 4
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1
1) "3"
2) "2"
3) "4"
4) "1"
127.0.0.1:6379> LRANGE list 0 -1
1) "3"
2) "2"
3) "4"
4) "1"
127.0.0.1:6379> llen list
(integer) 4
## 根据索引插入制定的值
127.0.0.1:6379> lset list 2 5
OK
127.0.0.1:6379> LRANGE list 0 -1

SET类型的基本命令

##插入命令
127.0.0.1:6379> sadd set 1 2 3 4
(integer) 4
## 查看数据
127.0.0.1:6379> SMEMBERS set 
1) "1"
2) "2"
3) "3"
4) "4"
## 随机从set里面获取某个数量的数据
127.0.0.1:6379> SRANDMEMBER set 2
1) "4"
2) "2"
127.0.0.1:6379> SRANDMEMBER set 
"2"
## 获取set集合的数量
127.0.0.1:6379> scard set
(integer) 4
127.0.0.1:6379> sadd set1 4 5 3 6
(integer) 4
127.0.0.1:6379> SMEMBERS set1
1) "3"
2) "4"
3) "5"
4) "6"
## 获取两个set集合的并集
127.0.0.1:6379> SUNION set set1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
## 获取两个set集合的差集
127.0.0.1:6379> SDIFF set set1
1) "1"
2) "2"
## 获取两个set集合的交集
127.0.0.1:6379> SINTER set set1
1) "3"
2) "4"
127.0.0.1:6379> SMEMBERS set 
1) "1"
2) "2"
3) "3"
4) "4"
## 判断元素是否在集合中存在
127.0.0.1:6379> SISMEMBER set 5
(integer) 0
127.0.0.1:6379> SSCAN set cursor
(error) ERR invalid cursor
## 将两个集合的交集存入到另一个集合 注意:会覆盖到原先的集合中的元素
127.0.0.1:6379> SINTERSTORE set3 set set1
(integer) 2
127.0.0.1:6379> SMEMBERS set3
1) "3"
2) "4"
## 将两个集合的差集存入到另一个集合 注意:会覆盖到原先的集合中的元素
127.0.0.1:6379> SDIFFSTORE set3 set set1
(integer) 2
127.0.0.1:6379> SMEMBERS set3
1) "1"
2) "2"
127.0.0.1:6379> sunion set set1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
127.0.0.1:6379> keys *
1) "set3"
2) "set"
3) "set1"
## 将两个集合的并集存入到另一个集合 注意:会覆盖到原先的集合中的元素
127.0.0.1:6379> sunionStore set3 set set1
(integer) 6
127.0.0.1:6379> SMEMBERS set3
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
## 对元素进行移除	
127.0.0.1:6379> srem set3 1
(integer) 1
127.0.0.1:6379> SMEMBERS set3
1) "2"
2) "3"
3) "4"
4) "5"
5) "6"
## 使用sscan进行遍历
127.0.0.1:6379> SSCAN ke 0 count 1
1) "1"
2) 1) "ds"
   2) "jjdje"
127.0.0.1:6379> SSCAN ke 1  
1) "0"
2) 1) "hehwhej"
   2) "jkdsdjka"
   3) "hi"
   4) "hello"
127.0.0.1:6379> 

zset类型的基本命令

## 往zset里面去添加数据
127.0.0.1:6379> zadd zset 2 xiaohong 3  xiaoxiang 1 xiaoming
(integer) 3
##从小到达带着score的进行遍历
127.0.0.1:6379> zrange zset 0 -1 withscores
1) "xiaoming"
2) "1"
3) "xiaohong"
4) "2"
5) "xiaoxiang"
6) "3"
## 从大到小进行遍历
127.0.0.1:6379> ZREVRANGE zset 0 -1
1) "xiaoxiang"
2) "xiaohong"
3) "xiaoming"
## 对member的排名进行查找 这个是从大到小进行查找
127.0.0.1:6379> zrevrank zset xiaoxiang
(integer) 0
127.0.0.1:6379> zrevrank zset xiaohong
(integer) 1
## 这个是从小到大进行查找	
127.0.0.1:6379> ZRANK zset xiaoming
(integer) 0
127.0.0.1:6379> zadd set 1 2 3 4 5 6
(integer) 3
## zlexconunt 查询指定区间范围的内的数量
127.0.0.1:6379> ZLEXCOUNT set  [2 [3
(integer) 1
127.0.0.1:6379> ZLEXCOUNT set  (2 (3
(integer) 0
## 对值进行范围的查询
127.0.0.1:6379> zrange salary - + BYLEX
1) "lua"
2) "peter"
3) "jack"
4) "lucy"
## 通过score进行查询
127.0.0.1:6379> zrange salary -inf +inf BYSCORE
1) "lua"
2) "peter"
3) "jack"
4) "lucy"
## 通过score进行限制数量的查询
127.0.0.1:6379> zrange salary -inf +inf BYSCORE LImit 0 1
1) "lua"
127.0.0.1:6379> zrange salary -inf +inf BYSCORE LImit 0 2
1) "lua"
2) "peter"
127.0.0.1:6379> zrange salary -inf +inf BYSCORE LImit 1 2
1) "peter"
2) "jack"
127.0.0.1:6379> zrange salary -inf +inf withScores BYSCORE LImit 1 2
1) "peter"
2) "4000"
3) "jack"
4) "4500"
127.0.0.1:6379> zrange zset 0 -1 withscores
1) "peter"
2) "2000"
3) "jack"
4) "3500"
5) "lucy"
6) "4000"
127.0.0.1:6379> zrange zset1 0 -1 withscores
1) "peter"
2) "1000"
3) "lua"
4) "3500"
5) "lucy"
6) "4000"
##zunion 是对两个集合取并集,如果没有weights的设置 就是相同的member 的score进行相加,如果有weight就是 zset 的score X 1 + zset1的score X 2
127.0.0.1:6379> zunion 2 zset zset1 WEIGHTS 1 2 withscores
1) "jack"
2) "3500"
3) "peter"
4) "4000"
5) "lua"
6) "7000"
7) "lucy"
8) "12000"
## 将两个集合的值合并进行添加 注意:会覆盖原先的值
127.0.0.1:6379> zunionstore salary 2 zset zset1 
(integer) 4
127.0.0.1:6379> zrange salary 0 -1
1) "peter"
2) "jack"
3) "lua"
4) "lucy"
127.0.0.1:6379> zrange salary 0 -1 withscores
1) "peter"
2) "3000"
3) "jack"
4) "3500"
5) "lua"
6) "3500"
7) "lucy"
8) "8000"
127.0.0.1:6379> zunionstore salary 2 zset zset1 weights 0 0 
(integer) 4
127.0.0.1:6379> zrange salary 0 -1 withscores
1) "jack"
2) "0"
3) "lua"
4) "0"
5) "lucy"
6) "0"
7) "peter"
8) "0"
## 统计zset中的数量
127.0.0.1:6379> zcard zset
(integer) 3
127.0.0.1:6379> zrange zset 0 -1
1) "peter"
2) "jack"
3) "lucy"
127.0.0.1:6379> zrange zset 0 -1 withscores
1) "peter"
2) "2000"
3) "jack"
4) "3500"
5) "lucy"
6) "4000"
## 查询值对应的score
127.0.0.1:6379> zscore zset peter
"2000"
127.0.0.1:6379> zrange zset1 0 -1 withscores
1) "peter"
2) "1000"
3) "lua"
4) "3500"
5) "lucy"
6) "4000"
127.0.0.1:6379> zdiff 2 zset zset1 withscores
1) "jack"
2) "3500"
## 对集合中的元素进行移除
127.0.0.1:6379> zrem zset peter
(integer) 1
127.0.0.1:6379> zrange zset 0 -1 withscores
1) "jack"
2) "3500"
3) "lucy"
4) "4000"
## 通过score的区间 对zset的元素进行移除
127.0.0.1:6379> ZREMRANGEBYscore zset 1000 4000
(integer) 2
127.0.0.1:6379> zrange zset 0 -1 withscores
(empty array)
127.0.0.1:6379> zrange zset 0 -1 withscores
1) "peter"
2) "1000"
3) "lua"
4) "3500"
5) "lucy"
6) "4000"
127.0.0.1:6379> zcount zset 0 -1
(integer) 0
## 通过score对数量进行统计
127.0.0.1:6379> zcount zset 1000 4000
(integer) 3
127.0.0.1:6379> zrange zset 0 -1 withscores
1) "peter"
2) "1000"
3) "lua"
4) "3500"
5) "lucy"
6) "4000"
## 对有序集合中的socre进行增加
127.0.0.1:6379> ZINCRBY zset 19 peter
"1019"
127.0.0.1:6379> zrange zset 0 -1 withscores
1) "peter"
2) "1019"
3) "lua"
4) "3500"
5) "lucy"
6) "4000"

HASH类型的基本命令

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> scan 0
1) "0"
2) (empty array)
## 对map进行塞值
127.0.0.1:6379> hset map field xiaoming field1 xiaohong
(integer) 2
## 对map进行取值
127.0.0.1:6379> hget map field
"xiaoming"
127.0.0.1:6379> hget map field1
"xiaohong"
127.0.0.1:6379> hmget map field field1
1) "xiaoming"
2) "xiaohong"
## 获取所有的field 和 value
127.0.0.1:6379> HGETALL map
1) "field"
2) "xiaoming"
3) "field1"
4) "xiaohong"
## 判断该field 是否存在于map中
127.0.0.1:6379> HEXISTS map field
(integer) 1
127.0.0.1:6379> HVALS map
1) "xiaoming"
2) "xiaohong"
## 对根据field 进行删除
127.0.0.1:6379> hdel map field
(integer) 1
## 查看所有的vals值
127.0.0.1:6379> HVALS map
1) "xiaohong"
## 查看所有的key值
127.0.0.1:6379> hkeys map
1) "field1"
127.0.0.1:6379> 

总结

以上就是redis 中五种基本的数据类型,redis中还有三种特殊的数据类型 hyperloglogs,geospatial,bitmaps 进行讲解 以及 各种数据类型的具体应用场景进行讲解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值