千千梦丶琪 发表于 2025-4-18 18:11:57

Redis的常用命令大全

目录
一、Redis简介
1.键值型
2.NoSQL
2.1关联和非关联
2.2查询方式
2.3事务
2.4总结
二、Redis常见命令
2.1 通用命令
2.2 String 命令
2.3 Hash范例
2.4 List类
2.5 Set集合
2.6 SortedSet范例

一、Redis简介

Redis是一种键值型的NoSql数据库,这里有两个关键字:


[*] 键值型
[*] NoSql


1.键值型

所谓的键值型就是Redis中存储数据是以key、value的形式存储的,key 的值唯一,但value的值各种各样,可以是字符串、数值、集合以致是一长串的JSON。
https://i-blog.csdnimg.cn/direct/eb493c80aa244504a1b846514b80569e.png
而NoSql则是相对于传统关系型数据库而言,有很大差别的一种数据库。
2.NoSQL

NoSQL的含义并非是“不是SQL”的意思,它更接近于“Not Only SQL”(不光仅是SQL)大概黑白SQL数据库,是相对于传统关系型数据库而言有很大差别的一种数据库,同时也被称作黑白关系型数据库。
传统关系型数据库是结构化数据,每一张表都有严酷的约束信息:字段名、字段数据范例、字段约束等等信息,插入的数据必须遵守这些约束:
https://i-blog.csdnimg.cn/direct/c6e33b20bd424e2ea989043d826e0909.png
而NoSql则对数据库格式没有严酷约束,每每形式松散,自由。
可以是键值型:
https://i-blog.csdnimg.cn/direct/0b05ff0b788c4283b492c6e8ba8847da.png
也可以是文档型
https://i-blog.csdnimg.cn/direct/cab6102a4efc4c02945013da8af29349.png
以致还可以是图格式
https://i-blog.csdnimg.cn/direct/caca470bf02e4555a029f398426d6815.png
2.1关联和非关联

在关系型数据库当中,为了表示两张表之间多对多的关系,我们每每会创建第三张表作为他们之间的关系表,关系表的字段作为外键指向两张表的主键。
https://i-blog.csdnimg.cn/direct/35c3da203f7f46b4b38b1443614c750f.png
而非关系型数据库之间不存在关联关系,那如何表示他们之间的关系呢?一般是通过代码逻辑大概数据之间的耦合所表示,以下就是数据耦合的例子:
{
id: 1,
name: "张三",
orders: [
    {
       id: 1,
       item: {
       id: 10, title: "荣耀6", price: 4999
       }
    },
    {
       id: 2,
       item: {
       id: 20, title: "小米11", price: 3999
       }
    }
]
} 此处要维护“张三”的订单与商品“光彩”和“小米11”的关系,不得不冗余的将这两个商品保存在张三的订单文档中,不够优雅。还是建议用业务来维护关联关系。
2.2查询方式

传统关系型数据库有一套同一的语言去操纵数据库,也就是SQL语言,而非关系型数据库则是没有一套同一的语言
https://i-blog.csdnimg.cn/direct/419caa73b0b64f0790353a01bb2ed80c.png


2.3事务

关系型数据库每每能够满足事务的四大特性(ACID)分别是原子性、划一性、隔离性、长期性。
而非关系数据库每每不支持事务,只能实现基本的划一性。
2.4总结

除了上述四点以外,在存储方式、扩展性、查询性能上关系型与非关系型也都有着显著差别,总结如下:
https://i-blog.csdnimg.cn/direct/440f9422d7134c6094f2135ed239c4a6.png
二、Redis常见命令

2.1 通用命令

通用指令是部分数据范例的,都可以使用的指令,常见的有:


[*] KEYS:查看符合模板的全部key
[*] DEL:删除一个指定的key
[*] EXISTS:判定key是否存在
[*] EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除
[*] TTL:查看一个KEY的剩余有效期
通过help 可以查看一个命令的详细用法,例如:
# 查看keys命令的帮助信息:
127.0.0.1:6379> help keys

KEYS pattern
summary: Find all keys matching the given pattern
since: 1.0.0
group: generic 2.2 String 命令

String范例,也就是字符串范例,是Redis中最简单的存储范例。
其value是字符串,不外根据字符串的格式差别,又可以分为3类:


[*] string:普通字符串
[*] int:整数范例,可以做自增、自减操纵
[*] float:浮点范例,可以做自增、自减操纵
不管是哪种格式,底层都是字节数组形式存储,只不外是编码方式差别。字符串范例的最大空间不能凌驾512m.
https://i-blog.csdnimg.cn/direct/f872a460fddd422a9044f99ad6d38f8a.png
String的常见命令有:


[*] SET:添加大概修改已经存在的一个String范例的键值对
[*] GET:根据key获取String范例的value
[*] MSET:批量添加多个String范例的键值对
[*] MGET:根据多个key获取多个String范例的value
[*] INCR:让一个整型的key自增1
[*] INCRBY:让一个整型的key自增并指定步长,例如:incrby num 2 让num值自增2
[*] INCRBYFLOAT:让一个浮点范例的数字自增并指定步长
[*] SETNX:添加一个String范例的键值对,条件是这个key不存在,否则不执行
[*] SETEX:添加一个String范例的键值对,而且指定有效期
key的结构有:
Redis没有类似MySQL中的Table的概念,我们该如何区分差别范例的key呢?
例如,需要存储用户、商品信息到redis,有一个用户id是1,有一个商品id恰好也是1,此时如果使用id作为key,那就会冲突了,该怎么办?
我们可以通过给key添加前缀加以区分,不外这个前缀不是随便加的,有肯定的规范:
Redis的key答应有多个单词形成层级结构,多个单词之间用':'隔开,格式如下:
    项目名:业务名:类型:id 这个格式并非固定,也可以根据本身的需求来删除或添加词条。这样以来,我们就可以把差别范例的数据区分开了。从而避免了key的冲突问题。
例如我们的项目名称叫 shop,有user和product两种差别范例的数据,我们可以这样定义key:


[*] user相关的key:shop:user:1
[*] product相关的key:shop:product:1

如果Value是一个Java对象,例如一个User对象,则可以将对象序列化为JSON字符串后存储:
KEYVALUEshop:user:1{"id":1, "name": "Jack", "age": 21}shop:product:1{"id":1, "name": "小米11", "price": 4999} 而且,在Redis的桌面客户端中,还会以雷同前缀作为层级结构,让数据看起来条理分明,关系清楚:
https://i-blog.csdnimg.cn/direct/187e6a27df044f64b9076a6102e97199.png
2.3 Hash范例

Hash范例,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。
在String范例中,我们偶然候想在value中存放多个属性值,每每是通过JSON去存储,这时候要去修改某一个属性值就显得格外麻烦,这时候我们就可以去使用Hash范例去存储这个数据。
https://i-blog.csdnimg.cn/direct/e771de9be07643ecb115ecfdecb21763.png
Hash的常见命令有:


[*] HSET key field value:添加大概修改hash范例key的field的值
[*] HGET key field:获取一个hash范例key的field的值
[*] HMSET:批量添加多个hash范例key的field的值
[*] HMGET:批量获取多个hash范例key的field的值
[*] HGETALL:获取一个hash范例的key中的全部的field和value
[*] HKEYS:获取一个hash范例的key中的全部的field
[*] HINCRBY:让一个hash范例key的字段值自增并指定步长
[*] HSETNX:添加一个hash范例的key的field值,条件是这个field不存在,否则不执行


2.4 List类

Redis中的List范例与Java中的LinkedList类似,可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索。
特性也与LinkedList类似:


[*] 有序
[*] 元素可以重复
[*] 插入和删除快
[*] 查询速度一般
常用来存储一个有序数据,例如:朋友圈点赞列表,批评列表等。

List的常见命令有:


[*] LPUSH key element ... :向列表左侧插入一个或多个元素
[*] LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil
[*] RPUSH key element ... :向列表右侧插入一个或多个元素
[*] RPOP key:移除并返回列表右侧的第一个元素
[*] LRANGE key star end:返回一段角标范围内的全部元素
[*] BLPOP和BRPOP:与LPOP和RPOP类似,只不外在没有元素时等候指定时间,而不是直接返回null
2.5 Set集合

Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。因为也是一个hash表,因此具备与HashSet类似的特性:


[*] 无序
[*] 元素不可重复
[*] 查找快
[*] 支持交集、并集、差集等功能

Set的常见命令有:


[*] SADD key member ... :向set中添加一个或多个元素
[*] SREM key member ... : 移除set中的指定元素
[*] SCARD key: 返回set中元素的个数
[*] SISMEMBER key member:判定一个元素是否存在于set中
[*] SMEMBERS:获取set中的全部元素
[*] SINTER key1 key2 ... :求key1与key2的交集

例如两个集合:s1和s2:
https://i-blog.csdnimg.cn/direct/116353e1e0754c0a9eaf4fa13e98ad2f.png
求交集:SINTER s1 s2
求s1与s2的差别:SDIFF s1 s2
https://i-blog.csdnimg.cn/direct/5bf220cf86174be3b964affae0abf8ef.png
2.6 SortedSet范例

Redis的SortedSet是一个可排序的set集合,与Java中的TreeSet有些类似,但底层数据结构却差别很大。SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加 hash表。
SortedSet具备下列特性:


[*] 可排序
[*] 元素不重复
[*] 查询速度快
因为SortedSet的可排序特性,常常被用来实现排行榜这样的功能。

SortedSet的常见命令有:


[*] ZADD key score member:添加一个或多个元素到sorted set ,如果已经存在则更新其score值
[*] ZREM key member:删除sorted set中的一个指定元素
[*] ZSCORE key member : 获取sorted set中的指定元素的score值
[*] ZRANK key member:获取sorted set 中的指定元素的排名
[*] ZCARD key:获取sorted set中的元素个数
[*] ZCOUNT key min max:统计score值在给定范围内的全部元素的个数
[*] ZINCRBY key increment member:让sorted set中的指定元素自增,步长为指定的increment值
[*] ZRANGE key min max:按照score排序后,获取指定排名范围内的元素
[*] ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内的元素
[*] ZDIFF、ZINTER、ZUNION:求差集、交集、并集
注意:全部的排名默认都是升序,如果要降序则在命令的Z后面添加REV即可,例如:


[*] 升序获取sorted set 中的指定元素的排名:ZRANK key member
[*] 降序获取sorted set 中的指定元素的排名:ZREVRANK key memeber


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Redis的常用命令大全