外贸网站推,河北建设厅身份认证锁登录网站,天津seo顾问,做网站用的云控制台目录 一、NoSQL介绍 1.1什么是NoSQL 1.2为什么会出现NoSQL技术 1.3NoSQL的类别 1.4传统的ACID是什么 1.5 CAP 1.5.1 经典CAP图 1.5.4 什么是BASE 二、Redis概述 2.1 什么是Redis 2.2 Redis能干什么 2.3 Redis的特点 2.4 Redis与memcached对比 2.5 Redis的安装 2.6 Docker安装 三… 目录 一、NoSQL介绍 1.1什么是NoSQL 1.2为什么会出现NoSQL技术 1.3NoSQL的类别 1.4传统的ACID是什么 1.5 CAP 1.5.1 经典CAP图 1.5.4 什么是BASE 二、Redis概述 2.1 什么是Redis 2.2 Redis能干什么 2.3 Redis的特点 2.4 Redis与memcached对比 2.5 Redis的安装 2.6 Docker安装 三、 基本操作 3.1.1 set 3.1.2set操作的选项 3.1.3 MSET 3.2.1 get 3.2.2 GETDEL 3.2.3 getrange 3.2.4 MGET 3.3 Append 3.4.1 DESC 3.4.2 DESCBY 3.5.1 INCR 3.5.2 INCRBY 3.5.3 INCRBYFLOAT 3.6 STRLEN 3.7 UBSTR 一、NoSQL介绍 1.1什么是NoSQL NoSQLNot Only SQL即不仅仅是SQL泛指非关系型的数据库它可以作为关系型数据库的良好补充。随着互联网web2.0网站的兴起非关系型的数据库现在成了一个极其热门的新领域非关系数据库产品的发展非常迅速。 1.2为什么会出现NoSQL技术 随着互联网web2.0网站的兴起传统的关系型数据库在应付web2.0网站特别是超大规模和高并发的SNSSocial Networking Services 社交网络服务类型的web2.0纯动态网站已经显得力不从心暴露了很多难以克服的问题 1High performance - 数据的高并发读写 web2.0网站要根据用户个性化信息来实时生成动态页面和提供动态信息所以基本上无法使用动态页面静态化技术因此数据库并发负载非常高往往要达到每秒上万次读写请求。而关系型数据库应付上万次SQL查询还勉强可以承受但是应付上万次SQL写数据请求硬盘IO就已经无法承受了。其实对于普通的BBS网站往往也存在对高并发写请求的需求例如网站的实时统计在线用户状态记录热门帖子的点击次数投票计数等因此这是一个相当普遍的需求。 2Huge Storage - 海量数据的高效率存储和访问 类似FacebooktwitterFriendfeed这样的SNS网站每天用户产生海量的用户动态如Friendfeed一个月就达到了2.5亿条用户动态。对于关系型数据库而言在一张2.5亿条记录的表里面进行SQL查询效率是极其低下乃至不可忍受的。同样对于大型web网站的用户登录系统如腾讯、阿里、网易等动辄数以亿计的帐号使用关系型数据库很难应付。 3High Scalability High Availability - 数据库的高扩展和高可用 在基于web的架构当中数据库是最难进行横向扩展的当一个应用系统的用户量和访问量与日俱增的时候你的数据库却没有办法像web server和app server那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说对数据库系统进行升级和扩展是非常痛苦的事情往往需要停机维护和数据迁移因此需要数据库具有可扩展和高可用的特性。 总结 传统的关系型数据库只能存储结构化数据对于非结构化的数据支持不够完善。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战尤其是大数据应用难题。 1.3NoSQL的类别 键值Key-Value存储数据库 说明这一类数据库主要会使用到一个哈希表这个表中有一个特定的键和一个指针指向特定的数据。 Key/Value模型对于IT系统来说优势在于简单、易部署。 应用内容缓存主要用于处理大量数据的高访问负载。 产品Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB 优势快速查询 劣势存储的数据缺少结构化 列存储数据库 说明这部分数据库通常是用来应对分布式存储的海量数据。键仍然存在但是它们的特点是指向了多个列这些列是由列家族来安排的。 应用分布式文件系统 产品CassandraHBaseRiak 优势查找速度快可扩展性强更容易进行分布式扩展 劣势功能相对局限 文档型数据库 说明该类型的数据模型 是版本化的文档 半结构化的文档以特定的格式存储如JSON。 文档型数据库可以看作是键值数据库的升级版允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。 应用Web应用 产品CouchDBMongoDB 优势数据结构要求不严格 劣势查询性能不高且缺乏统一的查询语法 图形Graph数据库 说明图形结构的数据库同其他行列以及刚性结构的SQL数据库不同它是使用灵活的图形模型并且能够扩展到多个服务器上。 NoSQL数据库没有标准的查询语言SQL因此进行数据库查询需要制定数据模型。 许多NoSQL数据库都有REST格式的数据接口或者查询API。 应用社交网络 产品 Neo4jInfoGridInfinite Graph 优势利用图结构相关算法 劣势需要对整个图做计算才能得出结果不容易做分布式的集群方案 1.4传统的ACID是什么 关系型数据库遵循ACID规则事务在英文中是transaction和现实世界中的交易很类似它有如下四个特性 A (Atomicity) 原子性 指事务里的所有操作要么都成功要么都失败。事务成功的条件是事务里的所有操作都成功只要有一个操作失败整个事务就失败需要回滚。 C (Consistency) 一致性 指数据库要一直处于一致的状态事务的运行不会改变数据库原本的一致性约束。 I (Isolation) 隔离性 指并发的事务之间不会互相影响如果一个事务要访问的数据正在被另外一个事务修改只要另外一个事务未提交它所访问的数据就不受未提交事务的影响。 D (Durability) 持久性 是指一旦事务提交后它所做的修改将会永久的保存在数据库中即使出现宕机也不会丢失。 1.5 CAP Consistency强一致性 Availability可用性 Partition tolerance分区容错性 CAP理论是指在分布式存储系统中最多只能实现上面的两点。 由于当前的网络硬件存在延迟丢包等问题所以分区容忍性是我们必须要实现的。所以我们只能在一致性和可用性之间进行权衡没有NoSQL系统能同时保证这三点。 CA传统Oracle数据库 AP 大多数网站架构的选择 CP Redis、Mongodb强一致性、分区容错性例如A数据库中会存放B...的副本 注意在做分布式架构的时候必须做出取舍。一致性和可用性之间取一个平衡。对于大多数web应用其实并不需要强一致性。因此牺牲C换取P这是目前分布式数据库产品的方向。 1.5.1 经典CAP图 CAP理论的核心是 一个分布式系统不可能同时很好的满足一致性可用性和分区容错性这三个需求最多只能同时较好的满足两个。 因此根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类 CA - 单点集群满足一致性可用性的系统通常在可扩展性上不太强大。 CP - 满足一致性分区容忍必的系统通常性能不是特别高。 AP - 满足可用性分区容忍性的系统通常可能对一致性要求低一些。 1.5.4 什么是BASE BASE就是为了解决关系数据库强一致性引起的问题而导致可用性降低而提出的解决方案。BASE其实是下面三个术语的缩写 基本可用Basically Available 软状态Soft state 最终一致Eventually consistent 它的思想是通过让系统放松对某一时刻数据一致性的要求来换取系统整体伸缩性和性能上改观。为什么这么说呢缘由就在于大型系统往往由于地域分布和极高性能的要求不可能采用分布式事务来完成这些指标要想获得这些指标我们必须采用另外一种方式来完成这里BASE就是解决这个问题的办法。 分布式事务的一些方式... 二、Redis概述 2.1 什么是Redis RedisREmote D Ictionary Server 远程字典服务器是完全开源免费的用C语言编写的遵守BSD协议是一个高性能的(key/value) 分布式大于一个节点的部署 内存数据库基于内存运行 优点存储速度快缺点不能持久化 并支持持久化的NoSQL数据库是当前最热门的NoSQL数据库之一, 也被人们称为数据结构服务器。 Redis是一个开源的高性能键值对Key-Value数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求目前为止Redis支持的键值数据类型如下 字符串类型 散列类型 列表类型 集合类型 有序集合类型 学习参考网站 Redis 教程 | 菜鸟教程 2.2 Redis能干什么 内存存储和持久化redis支持异步将内存中的数据写到硬盘上同时不影响继续服务 取最新N个数据的操作如可以将最新的10条评论的ID放在Redis的List集合里面 模拟类似于HttpSession这种需要设定过期时间的功能 发布、订阅消息系统类似于组播在一个组中就能收到消息 定时器、计数器 2.3 Redis的特点 性能极高Redis 读的速度是 110000 次 /s写的速度是 81000 次 /s 。 丰富的数据类型Redis 支持二进制案例的 StringListHashSet及 ZSet 数据类型操作。 原子性Redis 的所有操作都是原子性的意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务即原子性通过 MULTI 和 EXEC 指令包起来。 数据持久化可以将内存中的数据保存在磁盘中重启的时候可以再次加载进行使用 其他特性Redis 还支持 publish/subscribe 通知key 过期等特性。 Redis 提供的API支持C、C、C#、Clojure、Java、JavaScript、Lua、PHP、Python、Ruby、Go、Scala、Perl等多种语言。 2.4 Redis与memcached对比 共同点 无论是Memcached还是Redis底层都是使用C语言编写都是基于key-value存储的数据都是在内存中。 不同点 Memcached支持的数据类型比较简单StringObjectRedis 支持的数据类型比较丰富。 Memcached默认一个值的最大存储不能超过1MRedis一个值的最大存储1G。 Memcached中存储的数据不能持久化一旦断电数据丢失Redis中存储的数据可以持久化。 Memcached是多线程支持并发访问Redis是单线程不支持并发访问。 Memcached自身不支持集群环境Redis从3.0版本之后自身开始提供集群环境支持。、 2.5 Redis的安装 从Redis官网进行下载。 Redis 下面以 redis-6.2.7.tar.gz 版为例来说明redis的安装与配置。 1、准备安装环境 由于 Redis 是基于 C 语言编写的因此首先需要安装 Redis 所需要的依赖 yum install -y gcc tcl gcc-c make 2、上传安装文件 将下载好的 redis-6.2.7.tar.gz 安装包上传到虚拟机的任意目录一般推荐上传到 /usr/local/src目录。 3、解压安装文件 上传后执行如下命令来进行解压。 tar -zxvf redis-6.2.7.tar.gz 4、进入安装目录 解压完成后执行如下命令进入解压目录。 cd redis-6.2.7 5、运行编译命令 然后执行如下命令进行编译。 make make install 说明如果在编译过程中出现 Jemalloc/jemalloc.h没有那个文件 没有的错误在确保 gcc 安装成功后可执行 make distclean 进行清除后再次安装。 如果没有出错就会安装成功。默认的安装路径是在 /usr/local/bin 目录下。可以将这个目录配置到环境变量中这样就可以在任意目录下运行这些命令了。主要的几个命令说明如下 redis-server它是 redis 的服务端启动脚本 redis-cli它是 redis 提供的客户端启动脚本 redis-sentinel它是 redis 提供的哨兵启动脚本 redis-benchmark性能测试工具可以在自己电脑上运行来查看性能 redis-check-aof修复有问题的AOF文件 redis-check-dump修复有问题的dump.rdb文件 6、前台启动 执行如下命令来启动 redis。 redis-server 注意这里直接执行 redis-server 启动的 Redis 服务是在前台直接运行的(效果如上图)也就是说执行完该命令后如果关闭当前会话则Redis服务也随即关闭因此这种方式不推荐使用。正常情况下启动 Redis 服务需要从后台启动。 查看Redis服务 ps -ef | grep redis 关闭Redis服务 pkill redis-server kill 进程号 单实例关闭redis-cli shutdown 多实例关闭redis-cli -p 6379 shutdown 7、后台启动 在 redis 的安装目录中有一个 redis.conf 文件我们把这个文件复制到 /etc/目录下 cp /usr/local/redis/redis.conf /etc/ 然后修改 /etc/redis.conf 文件把 daemonize 值设置为 yes 即可。 vim /etc/redis.conf # 修改daemonize no 保存退出后执行如下命令来启动服务。 binredis-server /etc/redis.conf 8、验证服务 我们可以使用 redis-cli 脚本来连接 redis 服务。 redis-cli -p 6379 然后执行如下命令 127.0.0.1:6379 ping
PONG 如果能够看到如上信息表示连接成功。 9、关闭服务 可以执行如下命令来关闭 redis 服务。 redis-cli shutdown 关闭后可以执行如下命令来查看进程是否还存在。 ps -ef | grep redis 注意也可以进入终端后再关闭 127.0.0.1:6379 shutdown 10、相关知识 redis 默认的端口号是 6379 默认有 16 个数据库类似数组下标从 0 开始初始默认使用 0 号数据库。 可以使用 select dbid 命令来切换数据库。例如切换到 2 号数据库是 select 2 。 在 redis 中可以使用 dbsize 命令来查看当前数据库的 key 的数量也可以使用 flushdb 命令来清空当前数据库中所有数据还可以使用 flushall 命令来删除所有数据库中的数据。 Redis是单线程 多路IO复用技术 。多路复用是指使用一个线程来检查多个文件描述符Socket的就绪状态比如调用select和poll函数传入多个文件描述符如果有一个文件描述符就绪则返回否则阻塞直到超时。得到就绪状态后进行真正的操作可以在同一个线程里执行也可以启动线程执行比如使用线程池。 2.6 Docker安装 1、拉取镜像 // 拉取最新
docker pull redis
//拉取指定版本
docker pull redis:6.2.7 2、查看镜像 docker images 3、运行容器 docker run --restartalways --log-opt max-size100m --log-opt max-file2 -p 6379:6379 --name myredis -v /home/redis/myredis/myredis.conf:/etc/redis/redis.conf -v /home/redis/myredis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes --requirepass 000415 参数说明 –restartalways总是开机启动 –log配置日志 -p 6379:6379将6379端口挂载出去 –name给这个容器取一个名字 -v数据卷挂载 /home/redis/myredis/myredis.conf:/etc/redis/redis.conf这里是将 liunx 路径下的myredis.conf 和redis下的redis.conf 挂载在一起。 /home/redis/myredis/data:/data这个同上 -d redis表示后台启动redis redis-server /etc/redis/redis.conf以配置文件启动redis加载容器内的conf文件最终找到的是挂载的目录 /etc/redis/redis.conf 也就是liunx下的/home/redis/myredis/myredis.conf –appendonly yes开启redis 持久化 –requirepass 000415设置密码 如果你是通过docker 容器内部连接的话可设可不设。但是如果想向外开放的话一定要设置 4、查看容器 docker ps 5、连接容器 docker exec -it myredis redis-cli 6、测试容器 set name zs
get name 三、 基本操作 3.1.1 set 格式 SET key value [NX | XX] [GET] [EX seconds | PX milliseconds |EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL] 示例 127.0.0.1:6379 set mykey1 hello
OK3.1.2set操作的选项 EX seconds -- 设置指定的过期时间以秒为单位。 PX milliseconds -- 设置指定的过期时间以毫秒为单位。 EXAT timestamp-seconds -- 设置指定的 Unix 时间以秒为单位该时间点时键将过期。 PXAT timestamp-milliseconds -- 设置指定的 Unix 时间以毫秒为单位该时间点时键将过期。 NX -- 仅在键不存在时设置键。 XX -- 仅在键已存在时设置键。 KEEPTTL -- 保留与键关联的过期时间。 GET -- 返回键旧的字符串值如果键不存在则返回 nil。如果键存储的值不是字符串则返回错误并中止 SET 操作。 示例 127.0.0.1:6379 set mykey1 hello
#为键mykey1设置值“hello”
OK
127.0.0.1:6379 set mykey2 2 EX 5
#为mykey2设置过期时间5秒
OK
127.0.0.1:6379 set mykey2 2 PX 5000
#为mykey2设置过期时间5000毫秒
OK
127.0.0.1:6379 set mykey4 4 EXAT 5
#为mykey4设置unix时间以秒为单位
OK
127.0.0.1:6379 set mykey5 5 EXAT 5000
#为mykey5设置unix时间以毫秒为单位
OK
127.0.0.1:6379 set mykey6 6 NX
#为mykey6设置value 当mykey6不存在时创建
OK
127.0.0.1:6379 set mykey7 7 XX
#为mykey7设置value 当mykey7存在时创建这里很明显创建失败
(nil)
127.0.0.1:6379 set mykey6 8 GET
6
#返回旧键即mykey中的字符串如果不存在则返回nil相当于get操作3.1.3 MSET 格式 MSET key [key ...] 示例 127.0.0.1:6379 mset mykey200 200 mykey300 300
#一次性创建多个键值对
OK3.2.1 get 格式 GET Key 示例 127.0.0.1:6379 get mykey1
#查找一个存在的键
hello
127.0.0.1:6379 get mykey100
#查找一个不存在的键
(nil)3.2.2 GETDEL 格式 GETDEL key 示例 127.0.0.1:6379 set mykey10 100
#新建一个mykey10键并且赋值
OK
127.0.0.1:6379 getdel mykey10
#找到并且删除该mykey10
100
127.0.0.1:6379 get mykey10
#再查看就查不到了
(nil)3.2.3 getrange 格式 GETRANGE key start end 示例 127.0.0.1:6379 getrange mykey1 2 8
#指定查看的键为mykey1 起始位置为2 结束到8
llo wor3.2.4 MGET 格式 MGET key [key ...] 示例 127.0.0.1:6379 mget mykey200 mykey300
1) 200
2) 3003.3 Append 格式 APPEND key value 示例 127.0.0.1:6379 append mykey1 world
#为mykey1后面追加“ world”
(integer) 11
127.0.0.1:6379 get mykey1
#查看
hello world3.4.1 DESC 格式 DECR key 示例 127.0.0.1:6379 set mykey8 1
OK
127.0.0.1:6379 decr mykey8
(integer) 0
127.0.0.1:6379 decr mykey8
(integer) -1注意 1desc 能够自减的对象必须是一个数值型数据 2desc只能进行自减一的操作 3.4.2 DESCBY 格式 DECRBY key decrement 示例 127.0.0.1:6379 decrby mykey8 10
#自减并且指定偏移量为10
(integer) -113.5.1 INCR 格式 INCR key 示例 127.0.0.1:6379 incr mykey8
(integer) -103.5.2 INCRBY 格式 INCRBY key increment 示例 127.0.0.1:6379 incrby mykey8 20
(integer) 103.5.3 INCRBYFLOAT 格式 INCRBYFLOAT key increment 示例 127.0.0.1:6379 incrbyfloat mykey8 0.1
#incrbyfloat 可以使用浮点数自增
10.13.6 STRLEN 格式 STRLEN key 示例 127.0.0.1:6379 strlen mykey1
#获取指定键中的值的长度
(integer) 113.7 UBSTR 格式 SUBSTR key start end 示例 127.0.0.1:6379 substr mykey1 0 7
#获取指定键子串 起始0 结束到7
hello wo