Redis数据库
关系型数据库
关系型数据库就是一个结构化的表格之间联系组成的数据,一般面向记录。
sql用于执行对关系型数据库中数据的检索和操作。
mysql,Oracle(Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小微机环境。它是一种高效率的、可靠性好的、适应高吞吐量的数据库方案。)sql server,等
非关系型数据库
统称为nosql,就是不仅仅是sql的意思。除了有固定模式的数据库。
redis:是跨平台的非关系型数据库。Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。
mengodb:基于分布式文件存储的数据库,高性能、可扩展、易部署、易使用,存储数据非常方便
非关系型数据库产生背景
随着web2.0(数据海量化,动态网站)的兴起,也就有着很多数据库难以及时存储的问题
-
high performance(对数据库的高并发读写需求)
因为页面的多元化,导致数据库的并发负载非常高,硬盘i/o无法承受,导致系统瘫痪。此时nosql数据库因然而生,高达十万次上限的读写请求,可以轻松支撑。 -
huge storage(对数据库的高校存储以及访问需求)
因为网络的普遍大众化,导致会产大量的用户动态信息,此时sql命令查询信息时,效率十分底下,而由于nosql是存储于内存中,查询速度会是它的百倍以上。 -
hig scalability && high availabilit(数据库的高展性和高可用需求)
由于数据的大量化,导致数据库的扩展需要不断更新,最难的就是横向扩展。横向扩展:多增加几台API服务器,一起服务。
纵向扩展:把API服务器换成性能更好的机器。
横向扩展 也叫 水平扩展,用更多的节点支撑更大量的请求。 如成千上万的蚂蚁完成一项搬运工作
纵向扩展 又叫 垂直扩展,扩展一个点的能力支撑更大的请求。如利用1个人的能力,如蜘蛛侠逼停火车纵向扩展:在数量不变的前提下提高单硬件的性能
横向扩展:通过增加数量来提高集群的性能
在硬件的性能比较低的时候,纵向比横向更便宜 2T<21T
在硬件的性能比较高的时候,横向比纵向更便宜 16T > 28T
Redis简介
AOF,RDB:可持久化的日志类型。
因为Redis的所有数据都是存储于内存汇总,然后呢不定期/不定量的通过异步保存到磁盘上(RDB半持久化,有时间空隙,安全性低),也可以把每次的数据变化都写到一个AOF里面(全持久化,压力太大,安全)。
Redis的工作原理
一个单进程模型,可以使用多实例(一台多服)
一台一服:速率慢,轻松
一台多服:速率快,cup压力大
Redis的优点
- 极高的数据读写速度最高可达到十一万次,写入最高可达到八万次
- 支持吩咐的数据类型,
- 持久化
- 原子性:一体性
- 支持数据备份主从复制
Redis | 可以支持多种数据结构的存储 | 持久化 | 单线程多实例根据数据顺序提交 | 键值对限制最长键长521 |
---|---|---|---|---|
memcached | 只能支持简单的k/v类型数据 | 没有持久化 | 多线程且cas保证数据的一致性 | 键值对限制最长键长250 |
Redis的安装部署
wget http://download.redis.io/releases/redis-6.0.8.tar.gz
tar xzf redis-6.0.8.tar.gz -C /usr/src
cd /usr/src
make && make PREFIX=/usr/local install #配置了Makefile文件
#make install 只是生成了二进制文件,没有启动脚本与配置文件,而且里面自带脚本生成
[root@localhost local]# cd /usr/src/redis-4.0.10/
[root@localhost redis-4.0.10]# ls
00-RELEASENOTES COPYING Makefile redis.conf runtest-sentinel tests
BUGS deps MANIFESTO runtest sentinel.conf utils
CONTRIBUTING INSTALL README.md runtest-cluster src
[root@localhost redis-4.0.10]# cd utils/
[root@localhost utils]# ls
build-static-symbols.tcl hashtable redis_init_script.tpl
cluster_fail_time.tcl hyperloglog redis-sha1.rb
corrupt_rdb.c install_server.sh releasetools
create-cluster lru speed-regression.tcl
generate-command-help.rb redis-copy.rb whatisdoing.sh
graphs redis_init_script
[root@localhost utils]# ./install_server.sh #执行安装脚本
Welcome to the redis service installer
This script will help you easily set up a running redis server
Please select the redis port for this instance: [6379] #端口
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf]
Selected default - /etc/redis/6379.conf #配置文件
Please select the redis log file name [/var/log/redis_6379.log]
Selected default - /var/log/redis_6379.log #日志文件
Please select the data directory for this instance [/var/lib/redis/6379]
Selected default - /var/lib/redis/6379 #数据目录
Please select the redis executable path [/usr/local/bin/redis-server]
Selected config:
Port : 6379
Config file : /etc/redis/6379.conf
Log file : /var/log/redis_6379.log
Data dir : /var/lib/redis/6379
Executable : /usr/local/bin/redis-server #服务端命令
Cli Executable : /usr/local/bin/redis-cli #客户端命令
[root@localhost utils]# netstat -lnptu | grep 6379
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 11617/redis-server
[root@localhost utils]# which redis-server
/usr/local/bin/redis-server
[root@localhost utils]# vim /etc/redis/6379.conf
70:bind 192.168.200.10 127.0.0.1 #监听地址
93:port 6379 #端口
137,159,167,172
167:日志级别
ALL(关闭) < TRACE(致命) < DEBUG(错误) < INFO(信息) < WARN(警告) < ERROR(调试:事件信息) < FATAL(追踪:程序运行轨迹) < OFF(所有)
187:数据库数量:默认16个,可以使用SELECT <dbid> 命令指定数据库id
219:save 900 1 RDB持久化:900秒进行一次持久化
220 save 300 10 RDB持久化:300秒进行10次持久化
221 save 60 10000 :60秒有一万个数据变化进行一个持久化
242:rdbcompression yes:默认压缩,Redis使用lzf压缩,可以关闭节cpu时间
254:指定本地数据库文件名
264:指定本地数据库存放目录
282:主从复制数据同步
[root@localhost usr]# redis-cli --raw #启动命令,--raw避免中文乱码
redis-cli -h host -p port -a password #远程连接命令
[root@localhost ~]# redis-cli -h 192.168.200.10
192.168.200.10:6379> ping #测试是否启动
PONG #ok
[root@localhost ~]# redis-cli
127.0.0.1:6379> ping
PONG
##docker安装Redis
docker pull redis:latest
docker run -itd --name redis-test -p 6379:6379 redis
[root@localhost ~]# docker exec -it redis-test /bin/sh
/data # redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379>