惊落一身雪 发表于 2025-1-10 05:03:51

【数据库】非关系型数据库——Redis(基础)

一、什么是 Redis

        Redis 存储数据的格式都为 key-value 键值对的形式,将数据存储在内存中,以提高快速的读写访问速度,性能高。而在存储对象时,一样平常不会将其属性拆分为一个一个的键值对去存储,而是将其中的字段组合为一个 json 字符串去存储。
        其结构与普通的 MySQL 关系型数据库有很大的差别,所以被称为 NoSql 数据库(非关系型数据库)。其中还有很多不同结构的如:文档类型(MongoDB)、列类型(HBase)、图(Graph)类型(Neo4j)等。
SQL:


[*]结构化:对于表内的字段进行束缚,如非空,长度束缚等等。
[*]关联的:表与表之间可以通过外键建立关系。可以减少重复从而存储空间。
[*]SQL 查询:查询语句的语法是固定的,不同种类的关系型数据库的语法一致。
[*]事务:所有的关系型数据库都满足 ACID 特性。
NoSQL:


[*]非结构化:对于 key 和 value 的束缚较小,字段束缚疏松。
[*]非关联的:通过 json 文档嵌套的方式实现数据的关联,没有表与表之间的外键关系,所以黑白关联的。但数据可能重复。
[*]非SQL:查询的语法相对简朴,但是各种数据库的语法不同,需要反复学习。
[*]无事务:无法满足事务的强一致性或只能根本一致,无法全部满足,根本满足(BASE)。
        Redis 的特征:键值型支持多种不同的数据结构;单线程,每个命令都具备原子性;存储在内存中,低延迟,速度快;支持数据持久化,定期将数据持久化到磁盘中;支持主从/分片集群;支持多语言客户端(Java、C 等)。
        启动乐成 Redis 后,会体现此界面,这种默认的启动方式为前台启动,想要后台启动,就需要去修改 Redis 的设置文件来实现。
https://i-blog.csdnimg.cn/direct/853d1d27a8aa4fdda30c87245cce7bae.png
        在设置文件中,bind 指 Redis 监听的地点,默认是 127.0.0.1,表示只能在当地访问,其他 IP 访问则会拒绝。修改成 0.0.0.0 则可以在任意 IP 下访问,在天生环境下不要如许设置。
   bind 127.0.0.1
        守护历程,默认值为no,更改成 yes 后即可后台运行。
   daemonize no
        Redis 的密码,在设置之后访问 Redis 就需要输入密码。
   requirepass 123456
        Redis 监听的端标语,默认为 6379
   port 6379
        工作目录,默认是当前目录。日记、持久化的等文件会保存在这个目录中。
   dir ./
        数据库的数目,默认为 16 个,编号 0~15。
   databases 16
        设置 Redis 能够利用的最大内存。
   maxmemory <bytes>
        日记文件,默认为空,即不记载日记。但我们可以指定日记文件名。它会产生在工作目录中。
   logfile ""

        操纵 Redis 的三种客户端分别为命令行客户端、图形化界面客户端、编程客户端三种方式操纵。
● 命令行客户端
        如在命令行客户端中,我们利用 AUTH 密码 进行登录后,可以 ping 通。
https://i-blog.csdnimg.cn/direct/feb39fe292ac4a4fbd8f7c40caf7f344.png
 ● 图形化界面客户端
        如我利用的下方的软件 Another Redis Desktop Manager 是一款开源的 Redis 可视化管理工具。
https://i-blog.csdnimg.cn/direct/3bf6da74417048f58b2210e8af6730ee.png
二、Redis 通用命令

2.1 数据结构

        Redis 是一个 key-value 型的数据库,key 一样平常为 String 类型,但是 value 有多种类型:String、Hash、List、Set、SortedSet、GED、BitMap、HyperLog。其各内容形式如下:
类型内容格式StringHello WorldHash{name: "jack", age: 21}List[ A -> B -> C -> C ]Set{ A, B, C }SortedSet{ A:1, B:2, C:3 }GED{ A:(120.3, 30.5) }BitMap0110110101110101011HyperLog0110110101110101011         其中比较常见的就是前五个类型,它们被称为根本类型,后三个被称为特殊类型。想要操纵这些不同的数据类型,就要学习不同的操纵语句。 
2.2 操纵命令

● 通用命令
   KEYS pattern
        查看符合模版的所有 key,其中的 pattren 为模版,可以为 * ,查找所有;或 a*,查找以 a 为开头的。进行模糊匹配,但如许查询的效率很低,所以在生产环境下不发起利用 KEYS 进行查询。
   DEL key
        在 DEL 后可跟一个 key 来进行删除,也可指定多个 key 来进行删除,返回的数字表示删除的 key 的数目。
   EXISTS key
        判断 key 是否存在。
   EXPIRE key seconds
        给一个 key 设置有效期,到期时该 key 会被自动删除,seconds 单位为秒。为相识决内存利用过多的问题,节省内存的利用空间。
   TTL key
        查看一个 key 的有效期,单位:秒。

● String 类型操纵
        String 类型是 Redis 中最简朴的存储类型,但根据字符串格式的不同,又可以分为三类:


[*]string:普通字符串。
[*]int:整数类型,可以做自增、自减操纵。
[*]float:浮点类型,可以做自增、自减操纵。
        但不管是哪种类型,底层都是字节数组形式存储,只不外时编码方式不同。字符串的最大空间不能超过 512m。
操纵:
   ① SET key value
② MSET key value
① 添加或修改已经存在的一个 String 类型的键值对。修改就是将原有的键中的值覆盖掉。
② 批量添加多个 String 类型的键值。
   ③ GET key
④ MGET key
③ 根据 key 获取 String 类型的 value。
④ 根据多个 key 获取多个 String 类型的 value。
   ⑤ INCR key
⑥ INCRBY key increment
⑦ INCRBYFLOAT key incremet
⑤ 让一个整形的 key 自增 1。
⑥ 让一个整形的 key 自增并指定其步长,如 ... age 2,就是让 age 的值自增 2。
⑦ 让一个浮点类型的 key 自增并指定步长。
   ⑧ SETNX key value  ==  SET key value NX
⑨ SETEX key seconds value
⑧ 添加一个 String 类型的键值对,前提是该 key 不存在,否则不执行。
⑨ 添加一个 String 类型的键值对,并且指定其有效期。

● Redis 中的层级结构
        在 Redis 中,并没有 MySQL 中 Table 的概念,想要区分不同类型的 key,如用户的 ID 和商品的ID,就需要我们规定层级结构来解决。如:
   项目名:业务名:类型:key
        之间利用 :进行分隔。如果要存储一个对象,可以将其序列化为 JSON 字符串后进行存储。
        如执行此命令:set user:1 '{“id" : "1", "name" : "jack", "age": 21}' 后在图形化界面中会产生如下图所展示的效果:
https://i-blog.csdnimg.cn/direct/9ab859093c854a92a7ae0f8df234976a.png

● Hash 类型
        Hash 类型也被称为散列,其 value 是一个无序字典,类似于 Java 中的 HashMap 集合。因 String 结构存储对象序列化的 JSON 字符串是一个整体,想要修改其中单个的字段很不方便,所以就需要 Hash 结构,其将对象中的每个字段独立存储,可以针对单个字段进行操纵。
操纵:
   ① HSET key field value
② HMSET key field value
① 添加或修改已经存在的一个 Hash 类型 key 的 field 的值。
② 批量添加多个 Hash 类型 key 的 field 的值。
   ③ HGET key field
④ HMGET key field
③ 根据 key 获取 Hash 类型 key 的 field 的值。
④ 根据多个 key 获取多个 Hash 类型 key 的 field 的值。
   ⑤ HGETALL key
⑥ HKEYS key
⑦ HVALS key
⑤ 获取一个 hash 类型的 key 中的所有的 field 和 value。
⑥ 获取一个 hash 类型的 key 中的所有的 field。
⑦ 获取一个 hash 类型的 key 中的所有的 value。
   ⑧ HINCRBY key field incremet
⑨SETNX key value  ==  SET key value NX
⑧ 让一个 hash 类型 key 的字段的值自增(整型)并指定步长。
⑨ 添加一个 hash 类型的 key 的 field 的值,前提是该 field 不存在,否则不执行。

● List 类型
        Redis 中的 List 类型与 Java 中的 LinkedList 集合类似,可以看做是一个双向链表结构,既支持正向检索也支持反向检索。有序、元素可重复、插入删除快、查询速度一样平常。
        在保存一些对于顺序有要求的内容可以利用 List 类型来进行保存。
操纵:
   ① LPUSH key element ...
② RPUSH key element ...
① 向列表的左侧插入一个或多个元素。
② 向列表的右侧插入一个或多个元素。
   ③ LPOP key
④ RPOP key
③ 移除并返回列表左侧的第一个元素,没有则返回 null。
④ 移除并返回列表右侧的第一个元素,没有则返回 null。
   ⑤ LRANGE key start stop
⑥ BLPOP/BRPOP key timeout
⑤ 返回一段下标范围内的所有元素
⑥ 移除并返回列表左/右侧的第一个元素,但在没有元素时期待指定时间,不是直接返回 null。

● Set 类型
        Redis 中的 Set 结构与 Java 中的 HashSet 集合类似,可以看做是一个 value 为 null 的 HashMap。具备与HashSet 类似的特征。无序、元素不可重复、查找快、支持交集 并集 差集等功能。


[*]单个集合操纵:
   ① SADD key member ...
② SREM key member ...
① 向 Set 中添加一个或多个元素。
② 移除 Set 中的指定元素。
   ③ SCARD key
④ SISMEMBER key member
⑤ SMEMBERS key
③ 返回 Set 中元素的数目。
④ 判断一个元素是否存在于 Set 中。
⑤ 返回一段下标范围内的所有元素


[*]多个集合操纵:
   ① SINTER key1 key2 ...
② SDIFF key1 key2 ...
③ SUNION key1 key2 ...
① 求 key1 和 key2 的交集,并输出。
② 求 key1 和 key2 的差集,并输出。
③ 求 key1 和 key2 的并集,并输出。

● SortedSet 类型
        Redis 中的 SortedSet 结构是一个可排序的 Set 集合,与 Java 中的 TreeSet 集合类似,当底层数据结构存在差别。其中每一个元素都带有一个 score 属性,可以基于 score 对元素进行排序,底层由跳表加 hash 表实现。可排序、元素不重复、查询速度快。 


[*]单个集合操纵:
   ① ZADD key score member ...
② ZREM key member ...
① 添加一个或多个元素到 sorted set,如果已存在则更新其 score 值。
② 删除 sorted set 中的一个指定元素。
   ③ ZSCORE key member
④ ZRANK key member
⑤ ZCARD key
​​​​​​⑥ ZCOUNT key min max
⑦ ZINCRBY key increment
⑧ ZRANDE key min max
⑨ ZRANDEBYSCORE key min max
③ 获取 sorted set 中的指定元素的 score 的值。
④ 获取 sorted set 中的指定元素的排名。
⑤ 获取 sorted set 中的元素个数。
⑥ 统计 score 值在给定范围内的所有元素的个数。
⑦ 让 sorted set 中指定元素自增指定步长。
⑧ 按照 score 排序后,获取指定排名范围内的元素。
​​​​⑨ 按照 score 排序后,获取指定 score 范围内的元素


[*]多个集合操纵:
   ① ZDIFF、ZINTER、ZUNION
① 求差集、交集、并集
注:所有的排名默认都是升序排序,想要降序排序,需要在命令的字母 Z 后跟 REV 即可。
如:⑧ ZREVRANDE key min max 
【完】

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