一、什么是 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 的设置文件来实现。
在设置文件中,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 通。
● 图形化界面客户端
如我利用的下方的软件 Another Redis Desktop Manager 是一款开源的 Redis 可视化管理工具。
二、Redis 通用命令
2.1 数据结构
Redis 是一个 key-value 型的数据库,key 一样平常为 String 类型,但是 value 有多种类型:String、Hash、List、Set、SortedSet、GED、BitMap、HyperLog。其各内容形式如下:
类型 | 内容格式 | String | Hello World | Hash | {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) } | BitMap | 0110110101110101011 | HyperLog | 0110110101110101011 | 其中比较常见的就是前五个类型,它们被称为根本类型,后三个被称为特殊类型。想要操纵这些不同的数据类型,就要学习不同的操纵语句。
2.2 操纵命令
● 通用命令
KEYS pattern
查看符合模版的所有 key,其中的 pattren 为模版,可以为 * ,查找所有;或 a*,查找以 a 为开头的。进行模糊匹配,但如许查询的效率很低,所以在生产环境下不发起利用 KEYS 进行查询。
DEL key [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 [key value ...]
① 添加或修改已经存在的一个 String 类型的键值对。修改就是将原有的键中的值覆盖掉。
② 批量添加多个 String 类型的键值。
③ GET key
④ MGET key [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}' 后在图形化界面中会产生如下图所展示的效果:
● Hash 类型
Hash 类型也被称为散列,其 value 是一个无序字典,类似于 Java 中的 HashMap 集合。因 String 结构存储对象序列化的 JSON 字符串是一个整体,想要修改其中单个的字段很不方便,所以就需要 Hash 结构,其将对象中的每个字段独立存储,可以针对单个字段进行操纵。
操纵:
① HSET key field value
② HMSET key field value [key field value ...]
① 添加或修改已经存在的一个 Hash 类型 key 的 field 的值。
② 批量添加多个 Hash 类型 key 的 field 的值。
③ HGET key field
④ HMGET key field [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 [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企服之家,中国第一个企服评测及商务社交产业平台。 |