一. 什么是Redis?
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。redis是将数据存放到内存中,由于内容存取速度快所以redis被广泛应用在互联网项目中。
二. redis下载与安装
2.1 安装redis(linux系统)
-
准备
yum install gcc-c++
-
安装redis
将redis-3.0.0.tar.gz拷贝到/usr/upload下解压源码
tar -zxvf redis-3.0.0.tar.gz
-
进入解压后的目录进行编译
cd /usr/upload/redis-3.0.0
make
- 安装到指定目录
make install PREFIX=/usr/local/redis
2.2 启动和关闭redis(我们以守护模式启动)
第一步:进入源码目录,里面有一份配置文件 redis.conf,然后将其拷贝到安装路径下
第二步:修改/usr/java/redis/bin下的redis.conf,将daemonize由no改为yes
第三步:启动
第四步:关闭
到redis/bin目录下执行如下命令
./redis-cli -p 端口号 shutdown
三. redis的基本命令
./redis-cli -h 127.0.0.1 -p 6379
- 常用命令
四. redis五种数据类型
4.1 string: key-value
- 赋值:set key value
127.0.0.1:6379> set test 123 OK
- 取值:get key
127.0.0.1:6379> get test "123“
- 删除:del key
127.0.0.1:6379>del test (integer) 1
- 自增自减:incr key decr key
127.0.0.1:6379> incr num (integer) 1 127.0.0.1:6379> incr num (integer) 2 127.0.0.1:6379> incr num (integer) 3
4.2 hash: key-field-value( key: map )
- 赋值:HSET key field value
127.0.0.1:6379> hset user name zhangsan (integer) 1
- 取值:HGET key field
127.0.0.1:6379> hget user name "zhangsan“
- 删除:HDEL key field
127.0.0.1:6379> hdel user name (integer) 1
4.3 list: 有顺序可重复,内部是使用双向链表实现的
- 赋值:lpush || rpush
192.168.25.153:6379> lpush list a b c d (integer) 4 192.168.25.153:6379> rpush list 1 2 3 4 (integer) 8
- 获取: lrange
192.168.25.153:6379> lrange list 0 -1 1) "d" 2) "c" 3) "b" 4) "a" 5) "1" 6) "2" 7) "3" 8) "4"
- 删除:lrem
192.168.25.153:6379> lrem list 0 d (integer) 1 192.168.25.153:6379> lrange list1 0 -1 1) "c" 2) "b" 3) "a" 4) "1" 5) "2" 6) "3" 7) "4"
4.4 set: 元素无顺序,不能重复
- 赋值:sadd
192.168.25.153:6379> sadd set1 a b c c c d (integer) 4
- 取值; smembers
192.168.25.153:6379> smembers set1 1) "b" 2) "c" 3) "d" 4) "a"
- 删除: srem
192.168.25.153:6379> srem set1 a (integer) 1 192.168.25.153:6379> smembers set1 1) "b" 2) "c" 3) "d"
4.5 zset: 有顺序,不能重复
- 赋值:zadd
192.168.25.153:6379> zadd zset1 2 a 5 b 1 c 6 d (integer) 4
- 删除:zrem
192.168.25.153:6379> zrem zset1 a (integer) 1
- 获取:zrange && zrevrange
192.168.25.153:6379> zrange zset1 0 -1 1) "c" 2) "b" 3) "d" 192.168.25.153:6379> zrevrange zset1 0 -1 1) "d" 2) "b" 3) "c" 192.168.25.153:6379> zrange zset1 0 -1 withscores 1) "c" 2) "1" 3) "b" 4) "5" 5) "d" 6) "6" 192.168.25.153:6379> zrevrange zset1 0 -1 withscores 1) "d" 2) "6" 3) "b" 4) "5" 5) "c" 6) "1"
4.6 总结
数据类型 | 赋值 | 取值 | 删除 | 特点 |
---|---|---|---|---|
string | set | get | del | 二进制安全 |
hash | hset | hget | hdel | 集合数组无序唯一 |
list | lpush&&rpush | lrange mylist 0 -1(取出所有) | lrem | 集合数组 |
set | sadd | smembers | srem | 无序且唯一 |
zset | zadd | zrange(分数从小到大)&&zrevrange(分数从大到小) | zrem | 排序和隐藏分数 |
五. redis持久化
https://redis.io/topics/persistence
Redis的高性能是由于其将所有数据都存储在了内存中,为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化。
Redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式。可以单独使用其中一种或将二者结合用。
5.1 RDB【Redis DataBase】(数据)
5.1.1 RDB概述
RDB方式的持久化是通过快照(snapshotting)完成的,当符合一定条件时Redis会自动将内存中的数据进行快照并持久化到硬盘。
RDB是Redis默认采用的持久化方式,在redis.conf配置文件中默认有此下配置:
save 900 1 #900秒内容如果超过1个key被修改,则发起快照保存
save 300 10 #300秒内容如超过10个key被修改,则发起快照保存
save 60 10000 #表示60秒内如果超过10000个key被修改,则发起快照保存
在redis.conf中:
配置dir指定rdb快照文件的位置
Redis启动后会读取RDB快照文件,将数据从硬盘载入到内存。
5.1.2 总结
- 优点:让redis的数据存取速度变快
- 缺点:服务器断电时会丢失部分数据(数据的完整性得不到保证)
5.2 AOF(append only file )(命令)
5.2.1 AOF概述
以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件
appendonly yes
appendfilename appendonly.aof
- AOF持久化策略如下:
#appendfsync always #每次有数据修改发生时都会写入AOF文件。
appendfsync everysec #每秒钟同步一次,该策略为AOF的缺省策略。
#appendfsync no #从不同步。高效但是数据不会被持久化。
5.2.2 总结
- 优点:持久化良好,能包证数据的完整性
- 缺点:大大降低了redis系统的存取速度
六. redis主从复制
6.1 什么是主从复制
持久化保证了即使redis服务重启也会丢失数据,因为redis服务重启后会将硬盘上持久化的数据恢复到内存中,但是当redis服务器的硬盘损坏了可能会导致数据丢失,如果通过redis的主从复制机制就可以避免这种单点故障,如下图:
说明:
-
主redis中的数据有两个副本(replication)即从redis1和从redis2,即使一台redis服务器宕机其它两台redis服务也可以继续提供服务。
-
主redis中的数据和从redis上的数据保持实时同步,当主redis写入数据时通过主从复制机制会复制到两个从redis服务上。
-
主从复制不会阻塞master,在同步数据时,master可以继续处理client 请求
6.2 主从配置(linux系统)
6.3 主从复制过程
复制过程说明:
1、slave 服务启动,slave 会建立和master 的连接,发送sync 命令。
2、master启动一个后台进程将数据库快照保存到RDB文件中
3、master 就发送RDB文件给slave
4、slave 将文件保存到磁盘上,然后加载到内存恢复
5、master把缓存的命令转发给slave
注意:主死了,从只能读
原文地址:https://www.jb51.cc/wenti/3283302.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。