NoSQL数据库
NoSQL(Not Only SQL),意即”不仅仅是SQL”,泛指非关系型的数据库
NoSQL 不依赖业务逻辑方式存储,而以简单的key-value模式存储,因此大大的增加了数据库的扩展能力。
- 不遵循SQL标准
- 不支持ACID
- 远超于SQL的性能
NoSQL适用场景
- 对数据高并发的读写
- 海量数据的读写
- 对数据高可扩展性的
NoSQL不适用场景
- 需要失误支持
- 基于SQL的结构化查询存储,处理复杂的关系,需要即席查询
NoSQL数据库:Memcache
- 很早出现的NoSQL数据库
- 数据都在内存中,一般不持久化
- 支持简单的key-value模式,支持类型单一
**NoSQL数据库:Redis
- 几乎覆盖了Memcache的绝大部分功能
- 数据都在内存中,支持持久化,主要用作备份恢复
- 除了支持简单的key-value模式,还支持多种数据结构的存储,比如:list,set,hash,zset等
NoSQL数据库:MongoDB
- 高性能,开源,模式自由的文档型数据库
- 数据都在内存中,如果内存不足,把不常用的数据保存到硬盘
- 虽然是key-value模式,但是对value(尤其是json)提供了丰富的查询功能
- 支持二进制数据及大型对象
- 可以根据数据的特点替代RDBMS,成为独立的数据库,或者配合RDBMS存储特定的数据
Redis概述
Redis 是一个开源的 key-value存储系统
和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(有序集合)和hash(哈希类型)。
这些数据类型都支持 push/pop、add/remove及取交集、并集和差集等更丰富的操作,而且这些操作都是原子性的。
在此基础上,Redis支持各种不同方式的排序
与memcached一样,为了保证效率,数据都是缓存在内存中。
与memcached区别的是,Redis会周期性的把更新的数据写入磁盘 或者把修改操作写入追加的记录文件。
Redis安装
通过docker安装
- 创建宿主机持久化数据挂载目录,redis配置文件
mkdir -p /usr/local/docker/data
cd /usr/local/docker/
wget http://download.redis.io/redis-stable/redis.conf
cp redis.conf redis.temp.conf
- 编辑redis.conf文件如下内容
#bind 127.0.0.1 #注释掉这部分,使redis可以外部访问
protected-mode no # 默认yes,开启保护模式,限制为本地访问;改为no,允许外部访问
daemonize yes #用守护线程的方式启动
appendonly yes #redis持久化 默认是no
tcp-keepalive 60 #默认是300,检查心跳的时间
- 启动redis
docker run -p 6379:6379 --name redis_v1 -v /usr/local/docker/redis.conf:/etc/redis/redis.conf -v /usr/local/docker/data:/data -d redis --appendonly yes
-p 6379:6379:把容器内的6379端口映射到宿主机6379端口
–name redis_v1 容器名称叫 redis_v1
-v /usr/local/docker/redis.conf:/etc/redis/redis.conf 把宿主机配置好的redis.conf放到容器内
-v /usr/local/docker/data:/data 把redis持久化的数据在宿主机内显示,做数据备份
–appendonly yes:redis启动后数据持久化
测试redis
[root@iZwz9f92w7soch5m251ghgZ ~]# docker exec -it redis_v1 /bin/bash root@3b86bce8591a:/data# redis-cli 127.0.0.1:6379> ping PONG 127.0.0.1:6379>
通过源码安装
redis官网:https://redis.io/
环境准备
下载redis源码文件redis-6.2.7.tar.gz
网盘链接: https://pan.baidu.com/s/1EfzleJhzfMKFVZsPHqB6QQ?pwd=4kxc
安装redis依赖
Redis是基于C语言编写的,因此首先需要安装Redis所需要的gcc依赖:
yum -y install gcc gcc-c++
修改系统limits配置
编辑/etc/security/limits.conf文件,在文件最后添加以下内容
* soft nofile 65535 * hard nofile 65535
[root@izwz9f92w7soch5m251ghgz ~]# ulimit -n 65535
修改内核参数somaxconn,提高TCP端口监听队列的长度
查看默认值
[root@izwz9f92w7soch5m251ghgz ~]# cat /proc/sys/net/core/somaxconn 128
编辑/etc/sysctl.conf文件,在最后增加下面内容(注意:该值不要超过ulimit -n 值的一半)
net.core.somaxconn = 20480
执行以下命令,使修改生效
sysctl -p
关闭防火墙
查看防火墙状态,如果是运行状态,则继续关闭
firewall-cmd --state
停止防火墙
systemctl stop firewalld.service
禁止防火墙开机启动
systemctl disable firewalld.service
单机安装Redis
解压到redis压缩包,并进入redis解压文件夹
# wget https://download.redis.io/releases/redis-6.2.7.tar.gz tar -zxvf redis-6.2.7.tar.gz -C /usr/local/ cd /usr/local/redis-6.2.7/
创建安装目录
mkdir -p /usr/local/redis-6.2.7/{data,conf,logs,pid}
data:数据目录
conf:配置文件目录
logs:日志目录
pid:redis进程文件目录编译安装redis
编译Redis,如果没有打印出错误信息则表示编译成功
make
安装Redis并指定安装目录
make install PREFIX=/usr/local/redis-6.2.7
完成后自动在安装目录下生成bin文件夹及命令
[root@izwz9f92w7soch5m251ghgz redis-6.2.7]# ll /usr/local/redis-6.2.7/bin/ total 18920 -rwxr-xr-x 1 root root 4828984 Jul 14 10:04 redis-benchmark lrwxrwxrwx 1 root root 12 Jul 14 10:04 redis-check-aof -> redis-server lrwxrwxrwx 1 root root 12 Jul 14 10:04 redis-check-rdb -> redis-server -rwxr-xr-x 1 root root 5003152 Jul 14 10:04 redis-cli lrwxrwxrwx 1 root root 12 Jul 14 10:04 redis-sentinel -> redis-server -rwxr-xr-x 1 root root 9536632 Jul 14 10:04 redis-server
redis-server:Redis服务器启动脚本
redis-cli:Redis客户端脚本
redis-sentinel:Redis集群使用
redis-check-rdb:修复有问题的rdb文件
redis-check-aof:修复有问题的aof文件
redis-benchmark : 性能测试工具
复制默认配置到
conf
目录中cd /usr/local/redis-6.2.7 cp redis.conf conf/redis.conf
编辑
conf/redis.conf
基础配置port 6379 pidfile /usr/local/redis-6.2.7/pid/redis_6379.pid logfile "/usr/local/redis-6.2.7/logs/redis_6379.log" dir /usr/local/redis-6.2.7/data dbfilename dump.rdb
启动Redis
cd /usr/local/redis-6.2.7/bin
- 前台启动(不推荐)
./redis-server
- 后台启动(推荐)
前提:将
conf/redis.conf
文件中的daemonize no
改成daemonize yes
./redis-server /usr/local/redis-6.2.7/conf/redis.conf
redis.conf 配置解析
daemonize no
:是否为后台进程,默认前台启动,如果需要后台启动,将其改成yes
bind 127.0.0.1 -::1
: 默认表示只能接受本机的访问请求,如果需要远程访问,需将其注释掉protected-mode yes
:默认开启保护模式,只能本机访问,如果需要远程访问,需将其改成no
port 6379
:端口号,默认6379tcp-backlog 511
:backlog 是一个连接队列,在高并发环境下,你需要一个高backlog值来避免慢客户端连接问题timeout 0
:默认客户端连接永不超时,可以设定超时时间N秒tcp-keepalive 300
:tcp心跳时间,默认300s。300s内检测到没有心跳,断开连接pidfile /var/run/redis_6379.pid
: redis 进程号保存到对应文件loglevel notice
: redis日志级别logfile ""
:redis日志输出路径databases 16
:redis默认16个数据库# requirepass foobared
:redis中默认不需要访问密码,如果需要密码鉴权,可编辑指定密码# maxclients 10000
:最大客户端连接数,即redis同时可以与多少个客户端进行连接# maxmemory <bytes>
:设置redis可以使用的内存(建议必须设置,否则将内存占满,造成服务器宕机)。一旦到达内存使用上限,redis将会试图移除内部数据,移除规则可以通过maxmemory-policy
来指定dir ./
: 指定本地数据库存放目录
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。