前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >非关系型数据库 Redis

非关系型数据库 Redis

作者头像
Demo_Null
发布2020-09-28 12:00:20
3.1K0
发布2020-09-28 12:00:20
举报
文章被收录于专栏:Java 学习Java 学习

1.1 简介

1.1.1 非关系型数据库

  NoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库。随着互联网 web 2.0 网站的兴起,传统的关系数据库在应付 web 2.0 网站,特别是超大规模和高并发的 SNS(社交) 类型的 web 2.0 纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL 数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。

1.1.2 Redis

  Redis 是一个 key-value 存储系统。它支持存储的 value 类型相对更多,包括 string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合) 和 hash(哈希类型)。这些数据类型都支持 push/pop、add/remove 及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis 支持各种不同方式的排序。为了保证效率,数据都是缓存在内存中。区别的是 Redis 会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了 master-slave(主从)同步。   Redis 是一个高性能的非关系型数据库。Redis 的出现,很大程度补偿了 memcached 这类 key/value 存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang 等客户端,使用很方便。

在这里插入图片描述
在这里插入图片描述

1.1.3 安装

☞ Linux

  先从 Redis 中文网 上下载对应版本的压缩包,注意官方只提供 Linux 版本,不提供 Windows 版本的 Redis。将下载好的压缩包上传至服务器后使用解压命令将其解压。

在这里插入图片描述
在这里插入图片描述

  进入解压好的目录,使用 make 命令对文件进行编译

在这里插入图片描述
在这里插入图片描述

  编译完成之后,可以进入 src 目录使用 ./redis-server ../redis.conf 命令启动 Redis,默认端口为 6379。redis.conf 是一个默认的配置文件,可以根据需要使用自己的配置文件。

在这里插入图片描述
在这里插入图片描述

  启动 Redis 服务进程后,就可以使用测试客户端程序 redis-cli 和 redis 服务交互了。

在这里插入图片描述
在这里插入图片描述

☞ Windows

  官方并没有提供 Windows 版本的 Redis,想要在 Windows 中使用就需要下载其他大神的 修改版,同样下载 zip 解压之后就可以使用了。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  直接双击 redis-server.exe 就可以启动服务端,同样双击 redis-cli.exe 启动测试客户端。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.1.4 可视化工具

JetBrains 出品的 DataGrip 数据库工具安装 Redis 或者 ledis 插件之后就可以查看 Redis 中的数据

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2 Redis 数据类型

类型

简介

特性

场景

string(字符串)

二进制安全

可以包含任何数据,比如 jpg 图片或者序列化的对象,一个键最大能存储 512M

hash(字典)

键值对集合,即编程语言中的 Map 类型

适合存储对象,并且可以像数据库中 update 一个属性一样只修改某一项属性值

存储、读取、修改用户属性

list(列表)

链表(双向链表)

增删快,提供了操作某一段元素的 API

1.最新消息排行等功能(比如朋友圈的时间线) 2.消息队列

set(集合)

哈希表实现,元素不重复

1.添加、删除、查找的复杂度都是 O(1) 2.为集合提供了求交集、并集、差集等操作

1.共同好友 2.利用唯一性,统计访问网站的所有独立 ip 3.好友推荐时,根据 tag 求交集,大于某个阈值就可以推荐

sorted set(有序集合)

将 Set 中的元素增加一个权重参数 score,元素按 score 有序排列

数据插入集合时,已经进行天然排序

1.排行榜 2.带权重的消息队列

1.2.1 string

☞ 存储数据(set key value)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

☞ 获取数据(get key)

在这里插入图片描述
在这里插入图片描述

☞ 删除数据(del key)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2.2 hash

☞ 存储数据(hset key field value)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

☞ 获取指定数据(hget key field)

在这里插入图片描述
在这里插入图片描述

☞ 获取所有数据(hgetall key)

在这里插入图片描述
在这里插入图片描述

☞ 删除数据(hdel key field)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2.3 list

☞ 左侧(头部)加入集合(lpush key value)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

☞ 从右侧(尾部)加入集合(rpush key value)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

☞ 获取数据(lrange key start end)

  start 为起始索引,end 为终止索引,end 为 -1 时代表末尾。

在这里插入图片描述
在这里插入图片描述

☞ 删除最左(头部)侧数据(lpop key)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

☞ 删除最右(尾部)侧数据(rpop key)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

☞ 删除所有(del key)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2.4 set

☞ 存储数据(sadd key value)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

☞ 获取数据(smembers key)

在这里插入图片描述
在这里插入图片描述

☞ 删除数据(srem key value)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2.5 sortedset

☞ 存储数据(zadd key score value)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

☞ 获取数据(zrange key start end [withscores])

在这里插入图片描述
在这里插入图片描述

☞ 删除数据(zrem key value)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

通用命令【慎用】 keys *: 查询所有的键; type key: 获取键对应的 value 的类型; del key:删除指定的 key value; flushdb:清空 redis 数据库;

1.3 Redis 持久化

1.3.1 概述

  由于 Redis 的数据都存放在内存中,如果没有配置持久化,Redis 重启后数据就全丢失了,于是需要开启 Redis 的持久化功能,将数据保存到磁盘上,当 Redis 重启后,可以从磁盘中恢复数据。Redis 提供两种方式进行持久化,一种是 RDB 持久化,原理是将 Redis 在内存中的数据库记录定时 dump 到磁盘上的 RDB 持久化;另外一种是 AOF(append only file)持久化,原理是将 Reids 的操作日志以追加的方式写入文件。

1.3.2 RDB

  RDB 持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是 fork 一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。RDB 持久化不需要进行配置,默认就使用这种机制, 在一定的间隔时间中,检测 key 的变化情况,然后持久化数据。注意:采用 RDB 方式持久化,会有一小部分数据有可能数据丢失!

在这里插入图片描述
在这里插入图片描述

☞ 相关配置(redis.conf)

在这里插入图片描述
在这里插入图片描述

  如果想要使用持久化配置启动,必须使用 redis-server.exe redis.windows.conf 关联配置文件启动 Redis 服务就可以实现持久化。注意:双击 redis-server.exe,是不会关联配置文件启动的!

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3.3 AOF

  AOF 持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。可以每一次命令操作后,持久化数据。

在这里插入图片描述
在这里插入图片描述

☞ 相关配置(redis.conf)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3.4 RDB 与 AOF 对比

☞ RDB 优势

 ① 数据的备份和恢复非常方便,因为一个数据库只有一个持久化文件  ② 性能最大化。对于 Redis 的服务进程而言,在开始持久化时,它唯一需要做的只是 fork 出子进程,之后再由子进程完成这些持久化的工作,这样就可以极大的避免服务进程执行 IO 操作了。  ③ 相比于 AOF 机制,如果数据集很大,RDB 的启动效率会更高。

☞ RDB 缺点

 ① 系统一旦在定时持久化之前出现宕机现象,此前没有来得及写入磁盘的数据都将丢失。(可能会有小部分数据丢失现象存在)  ② 由于 RDB 是通过 fork 子进程来协助完成数据持久化工作的,因此,如果当数据集较大时,可能会导致整个服务器停止服务几百毫秒,甚至是 1 秒钟。

☞ AOF 优势

 ① 该机制可以带来更高的数据安全性,即数据持久性。Redis 中提供了 3 种同步策略,即每秒同步、每修改同步和不同步。  ① 对日志文件的写入操作采用的是 append 模式,因此在写入过程中即使出现宕机现象,也不会破坏日志文件中已经存在的内容。  ① 如果日志过大,Redis 可以自动启用 rewrite 机制迅速“瘦身”(也可手动触发 aof 的 rewrite 操作,命令: bgrewriteaof)  ④ AOF日志格式清晰、易于理解,很容易用 AOF 日志文件完成数据的重建。

☞ AOF 缺点

 ① 对于相同数量的数据集而言,AOF 文件通常要大于 RDB 文件。(重复保存)  ② 根据同步策略的不同,AOF 在运行效率上往往会慢于 RDB。总之,每秒同步策略的效率是比较高的,同步禁用策略的效率和 RDB 一样高效。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.1 简介
    • 1.1.1 非关系型数据库
      • 1.1.2 Redis
        • 1.1.3 安装
          • 1.1.4 可视化工具
          • 1.2 Redis 数据类型
            • 1.2.1 string
              • 1.2.2 hash
                • 1.2.3 list
                  • 1.2.4 set
                    • 1.2.5 sortedset
                    • 1.3 Redis 持久化
                      • 1.3.1 概述
                        • 1.3.2 RDB
                          • 1.3.3 AOF
                            • 1.3.4 RDB 与 AOF 对比
                            相关产品与服务
                            云数据库 Redis
                            腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                            领券
                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档