1、NoSQL数据库简介
1.1、技术发展
技术的分类:
1、解决功能性的问题:Java、Jsp、RDBMS、Tomcat、HTML、Linux、JDBC、SVN
2、解决扩展性的问题:Struts、Spring、SpringMVC、Hibernate、Mybatis
3、解决性能的问题:NoSQL、Java线程、Hadoop、Nginx、MQ、ElasticSearch 解决并发等问题
NoSQL是为了解决性能问题而产生的技术 Redis就是典型的NOSQL
1.1.1.Web1.0时代
Web1.0的时代,数据访问量很有限,用一夫当关的高性能的单点服务器可以解决大部分问题。
1.1.2.Web2.0时代
随着Web2.0的时代的到来,用户访问量大幅度提升,同时产生了大量的用户数据。加上后来的智能移动设备的普及,所有的互联网平台都面临了巨大的性能挑战。
1.1.3.解决CPU及内存压力
分布式 集群方式做架构
session共享问题 以及数据库压力问题
1.1.4.解决IO压力
总结:
1.NOSQL能解决CPU及内存压力和解决IO压力,直接通过内存进行读取
2.NOSQL能够 通过缓存使用 提高访问速度 减少IO的读操作
1.2.NoSQL数据库
NoSQL数据库概述
NoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”,泛指 非关系型的数据库。
NoSQL 不依赖业务逻辑方式存储,而以简单的key-value模式存储。因此大大的增加了数据库的扩展能力
- 不遵循SQL标准。
- 不支持ACID。(事务特性)原子性 、一致性、隔离性、持久性
- 远超于SQL的性能。(不按照业务逻辑方式存储)
NoSQL适用场景
- 对数据高并发的读写(秒杀功能)
- 海量数据的读写
- 对数据高可扩展性的
NoSQL不适用场景
- 需要事务支持
- 基于sql的结构化查询存储,处理复杂的关系,需要即席查询。
即席查询(用户根据自己的需求,灵活的选择查询条件,系统能根据用户的选择生成响应的统计报表)
Memcache 支持数据单一,不支持持久化
Redis 持久化 多数据结构存储
持久化:关了电脑后数据还存在
MongoD 文档型数据库 存储数据结构更复杂
行式存储数据库(大数据时代)
行式数据库
列式数据库
Hbase
HBase是Hadoop项目中的数据库。它用于需要对大量的数据进行随机、实时的读写操作的场景中。
HBase的目标就是处理数据量非常庞大的表,可以用普通的计算机处理超过10亿行数据,还可处理有数百万列元素的数据表。
图关系型数据库
主要应用:社会关系,公共交通网络,地图及网络拓谱(n*(n-1)/2)
DB-Engines 数据库排名
http://db-engines.com/en/ranking
2.Redis概述安装
2.1.应用场景
配合关系型数据库做高速缓存
- 高频次,热门访问的数据,降低数据库IO
- 分布式架构,做session共享
多样的数据结构存储持久化数据
2.2.Redis安装
Redis官方网站 http://redis.io
Redis中文官方网站 http://redis.cn/
安装版本
- 6.2.1 for Linux(redis-6.2.1.tar.gz)
- 不用考虑在windows环境下对Redis的支持
VM+Centos7+Xshell安装教程(齐全)
链接:https://pan.baidu.com/s/1nPa_b6KLWo-2_opwYOAHWQ
提取码:wuq8
CentOS官网下载页面地址:http://vault.centos.org/
CentOS7.4的安装包:
链接:https://pan.baidu.com/s/1cRgNfZ5REf4LQMIyl5K3hQ
提取码:lp6q
docker安装部署Redis
1.Docker安装
环境:CentOS 7
1.先卸载原有的docker
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
2.通过仓库安装
sudo yum install -y yum-utils
3.设置阿里云镜像的仓库
sudo yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4.更新软件包索引
yum makecache fast
5.安装docker
sudo yum install docker-ce docker-ce-cli containerd.io
6启动docker
sudo systemctl start docker
7.验证(查看版本)
docker version
.查看镜像
docker images
2.Redis安装部署
``
1.搜索redis
docker search redis
2.拉取指定版本
docker pull redis:6.2.3
3.下载最新的redis
docker pull redis:latest
4.配置
mkdir -p /usr/local/redis/conf touch /usr/local/redis/conf/redis.conf vim /usr/local/redis/conf/redis.conf #持久化 appendonly yes #密码 requirepass 123456
5.启动redis
docker run -p 6379:6379 --name myredis \ -v /usr/local/redis/data:/data \ -v /usr/local/redis/conf/redis.conf:/etc/redis/redis.conf \ -d redis:6.2.3 redis-server /etc/redis/redis.conf --appendonly yes \ --requirepass "root"
说明:
–name redis 【容器名】
-p 6379:6379 【映射端口】
-v /usr/local/redis/conf/redis.conf:/etc/redis/redis.conf【conf文件挂载目录】
-v /usr/local/redis/data:/data \【data挂载目录】
-d redis:6.2.3【后台运行镜像】
–restart=always 【docker重启后自动启动镜像】
redis-server /etc/redis/redis.conf 【在容器执行redis-server启动命令,执行conf文件】
–appendonly yes 【持久化】
–requirepass “root” 【设置密码】
6.查看活跃的容器
docker ps
查看已运行容器
docker ps -a
查看所有已产生的容器(包括没有启动的容器)。
docker rm
容器id删除指定id的容器
docker images
查看所有镜像
docker rmi
镜像id删除指定id的镜像,注意,如果此镜像已经run产生了容器,要先删除容器,再删除镜像,否则会报错:
使用RedisDesktopManager测试连接
出现以下图片连接成功
Redis介绍相关知识
默认16个数据库,类似数组下标从0开始,初始默认使用0号库
使用命令 select 来切换数据库。如:select 1
统一密码管理,所有库同样密码。
dbsize
查看当前数据库的key的数量
flushdb清空当前库
flushall通杀全部库
Memcache和redis区别
串行 vs 多线程+锁(memcached) vs 单线程+多路IO复用(Redis)
(与Memcache三点不同: 支持多数据类型,支持持久化,单线程+多路IO复用)
3.常用五大数据类型
哪里去获得redis常见数据类型操作命令http://www.redis.cn/commands.html
3.1.Redis键(key)
进入容器连接redis
docker exec -it myredis redis-cli myredis 容器名
这里进入之后 需要认证密码 auth "123456"
在使用select 1切换数据库
DBSIZE:查询当前库所有key的数量
keys *:查询当前库所有的key
exists key
:查询是否存在,是返回1,否返回0
set key
设置一个key
127.0.0.1:6379> set k1 v1 OK 127.0.0.1:6379> get k1 "v1" 127.0.0.1:6379> exists k1 (integer) 1 127.0.0.1:6379> exists k2 (integer) 0
move key db
:把当前库的指定key移到指定的库中
127.0.0.1:6379> set k2 v2 OK 127.0.0.1:6379> MOVE k2 1 (integer) 1 127.0.0.1:6379> select 1 OK 127.0.0.1:6379[1]> get k2 "v2"
expire key
:给指定key设置生存时间,单位为秒,生存时间结束将被系统内存回收
ttl key:查询指定key的生存时间。-1表示永不过期,-2表示已过期
127.0.0.1:6379> set k2 v2 OK 127.0.0.1:6379> ttl k2 (integer) -1 127.0.0.1:6379> EXPIRE k2 10 (integer) 1 127.0.0.1:6379> ttl k2 (integer) 8 127.0.0.1:6379> ttl k2 (integer) 4 127.0.0.1:6379> ttl k2 (integer) -2 127.0.0.1:6379> get k2 (nil)
type key
:查询指定key的数据结构类型
127.0.0.1:6379> lpush list 1 2 3 4 (integer) 4 127.0.0.1:6379> type k1 string 127.0.0.1:6379> type list list
unlink key
根据value选择非阻塞删除
expire key 10
10秒钟:为给定的key设置过期时间
ttl key
查看还有多少秒过期,-1表示永不过期,-2表示已过期