一,Redis简介
-
redis官网 这是官网!!!!!!!
-
Redis是一个开放源码(bsd许可),内存中。数据结构存储,用作数据库、缓存和消息代理。它支持数据结构,例如弦, 散列, 列表, 集, 排序集对于范围查询,位图, 超长日志, 地理空间指数具有RADIUS查询和溪流。Redis内置了复制, Lua脚本, LRU驱逐, 交易和不同级别的磁盘上持久化,并通过红哨和自动分区红系簇.
-
你可以跑原子运算在这些类型上,就像附加到字符串; 递增散列中的值; 将元素推到列表中; 计算集交点, 友联市和差异;或获取排序集中排名最高的成员.
-
为了获得出色的表现,Redis使用了内存数据集。根据用例的不同,可以通过以下两种方法将其持久化将数据集转储到磁盘每隔一段时间,或者将每个命令附加到日志中。如果您只需要一个功能丰富的、联网的、内存中的缓存,则可以选择禁用持久性。
-
Redis还支持琐碎的设置。主从异步复制,具有非常快的非阻塞第一同步,自动重连接与部分重新同步上的网络分裂.
-
其他特点包括:
自动故障转移
您可以使用Redis大多数编程语言在外面。
红色是用Ansi C并且可以在大多数POSIX系统中工作,如Linux、*BSD、OSX,而不需要外部依赖。Linux和OSX是Redis开发和测试最多的两个操作系统,我们推荐使用linux部署。Redis可以在Solaris派生的系统(如SmartOS)中工作,但支持的是尽最大努力。Windows版本没有官方支持。
二,非关系性数据库
- 非关系数据库也被称作NoSQL(not only SQL)
- 存储数据不以关系模型为依据,不需要固定的表格式
- 非关系型数据库的优点
- 数据库可高并发读写
- 对海量数据高效率存储于访问
- 数据具有高扩展性与高可用性
- 支持数据的持久化
- 原子性(要么成功,要么失败)
- 支持数据备份
- 数据库之间具有隔离性,数据不共享
常用的非关系数据库:redis mongoDB…等
- redis 基于内存运行并支持持久化
- 采用K-V (key-value)键值对的存储形式
- Redis支持string、list、set、zset(sorted set)和hash类型数据,这些数据类型都支持push/pop、add/remove及取交集、并集和差集及更丰富的操作,对这些数据的操作都是原子性的。
三,Redis持久化
Redis提供了两种持久化的方式:RDB(Redis DataBase)和AOFAppend Only File)。
RDB,简而言之,就是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上。
AOF,则是将redis执行过的所有写指令记录下来,在下次redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。
RDB和AOF两种方式也可以同时使用,在这种情况下,如果redis重启,则会优先采用AOF方式来进行数据恢复,这是因为AOF方式的数据恢复完整度更高。如果没有数据持久化的需求,也可以完全关闭RDB和AOF,这样的话,redis将变成一个纯内存数据库,就像memcached一样。
cat /etc/redis/6379.conf //默认的开启方式
save 900 1 #表示900s内发生了1次更改
save 300 10 #表示300s内发生了10次更改
save 60 10000 #表示60s内发生了10000次更改
决定RDB什么时候将数据写入磁盘是由这些参数决定的。三选一,我们就保持默认即可。
- AOF也有三种选择:
cat /etc/redis.conf
# appendfsync always #一直记录,每次有变更就记录
appendfsync everysec #每秒记录一次
# appendfsync no #每隔一段时间记录一次,根据系统里面算法决定,不安全
四,Redis数据类型
前面已经讲过,Redis的数据类型有五种:string、list、set、zset、hash
-
string
string是最简单的类型,与Memcached一样的类型,一个key对应一个value,其支持的操作与Memcached的操作类似,不过功能更丰富,可以存二进制的对象。 -
list
list是一个链表结构,主要功能是push、pop、获取一个范围的所有值等。操作中key可理解为链表的名字。
使用list结构,可以轻松实现最新消息排行等功能(比如新浪微博的TimeLine)。list的另一个应用就是消息队列,可以利用list的push操作将任务存在list中,然后工作线程再用pop操作将任务取出执行。
- set
set是集合,和我们数学中的集合概念相似,对集合的操作有添加、删除元素,有对多个集合求交并差等操作。操作中key可理解为集合的名字。
比如在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合中。因为Redis非常人性化地为集合提供了求交集、并集、差集等操作,那么可以很方便地实现如共同关注、共同爱好、二度好友等功能,对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中。
- zset
zset是有序集合,它比set多了一个权重参数score,使集合中的元素能够按score进行有序排列。
比如一个存储全班同学成绩的Sorted Sets,其集合中value可以是同学的学号,而score就可以是其考试分数,这样在数据插入集合的时候,就已经进行了天然的排序。
- hash
hash,Redis和Memcached类似,在Memcached中,我们经常将一些结构化的信息打包成hashmap,在客户端序列化后存储为一个字符串的值(一般是JSON格式),比如用户的昵称、年龄、性别、积分等。
五,Redis安装部署
- 安装步骤
- 官网下载软件包,解压软件包
- make && make install
- 设置redis的相关配置文件
- 启动,查看运行状态
1.安装编译环境
yum -y install gcc gcc-c++ make
2.将软件包拖到目录,解压到/opt/目录
tar zxvf redis-5.0.7.tar.gz -C /opt
3.编译,不需要模块支持,可以直接make
cd /opt/redis-5.0.7/
make
make install //未指定编译安装目录,可指定安装目录make prefix=/usr/local/redis install
4.启动配置redis
cd /opt/redis-5.0.7/utils //到软件包目录下的utils执行服务脚本
[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] //默认端口,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] //redis可执行文件路径
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 //远程登录命令文件
Is this ok? Then press ENTER to go on or Ctrl-C to abort. //直接回车完成配置
Copied /tmp/6379.conf => /etc/init.d/redis_6379 //启动控制文件
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful! //完成!
5.进程控制文件,启动文件
[root@localhost utils]# /etc/init.d/redis_6379 start //启动
Starting Redis server...
[root@localhost utils]# /etc/init.d/redis_6379 status //查看服务状态
Redis is running (7480)
[root@localhost utils]# /etc/init.d/redis_6379 stop //暂停
Stopping ...
Redis stopped
[root@localhost utils]# /etc/init.d/redis_6379 restart //重启
Stopping ...
Redis stopped
Starting Redis server...
//方便操作的话,可以将控制文件做软连接,让系统能够识别!
ln -s /etc/init.d/redis_6379 /usr/local/bin
[root@localhost ~]# redis_6379 restart
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
Starting Redis server...
6.主配置文件解释
bind:监听的主机地址
port:端口
daemonize yes:启动守护进程
pidfile:指定PID文件
loglevel notice: 日志级别
logfile:指定日志文件
vim /etc/redis/6379.conf
70 bind 127.0.0.1 //监听的ip地址
89 protected-mode yes //关闭安全保护
93 port 6379 //服务端口号
137 daemonize yes //独立的守护进程
159 pidfile /var/run/redis_6379.pid //pid文件位置
167 loglevel notice //开启日志级别通知
172 logfile /var/log/redis_6379.log //日志文件位置
7.登录redis,搭建成功
7. 登录redis
[root@localhost utils]# redis-cli -h 127.0.0.1 -p 6379 //采用本地登录,-h指定主机ip,-p端口
127.0.0.1:6379> //进入数据库
六,redis-benchmark测试工具
-h:指定服务器主机名
-p:指定服务端口
-c:指定并发连接数
-n:指定请求数
-d:以字节的形式指定set/get值的大小
-q:强制退出redis,仅显示query/sec值
测试:
想ip地址20.0.0.19 端口为6379的redis服务器发送100个并发连接与100000个请求测试性能
[root@localhost ~]#redis-benchmark -h 20.0.0.19 -p 6379 -c 100 -n 10000
.......省略部分........
====== LRANGE_600 (first 600 elements) ======
10000 requests completed in 0.66 seconds
100 parallel clients
3 bytes payload
keep alive: 1
0.05% <= 1 milliseconds
0.51% <= 2 milliseconds
24.03% <= 3 milliseconds
81.67% <= 4 milliseconds
95.08% <= 5 milliseconds
98.01% <= 6 milliseconds
98.81% <= 7 milliseconds
99.43% <= 8 milliseconds
99.75% <= 9 milliseconds
99.97% <= 10 milliseconds
100.00% <= 10 milliseconds
15128.59 requests per second
====== MSET (10 keys) ======
10000 requests completed in 0.08 seconds
100 parallel clients
3 bytes payload
keep alive: 1
92.50% <= 1 milliseconds
99.69% <= 2 milliseconds
100.00% <= 2 milliseconds
123456.79 requests per second