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

打印 上一主题 下一主题

主题 851|帖子 851|积分 2553

一、什么是 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。其各内容形式如下:
类型内容格式
StringHello World
Hash{name: "jack", age: 21}
List[ A -> B -> C -> C ]
Set{ A, B, C }
SortedSet{ A:1, B:2, C:3 }
GED{ A120.3, 30.5) }
BitMap0110110101110101011
HyperLog0110110101110101011
        其中比较常见的就是前五个类型,它们被称为根本类型,后三个被称为特殊类型。想要操纵这些不同的数据类型,就要学习不同的操纵语句。 
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 中,并没有 MySQLTable 的概念,想要区分不同类型的 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 nullHashMap。具备与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企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

惊落一身雪

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表