第161次(Redis)
学习主题:Redis
学习目标:
1 掌握什么是Redis
2 掌握Redis存储的各种数据类型
1. Redis介绍
(1) 什么是Redis?
开源的使用C语言编写的 基于内存 的可持久化的日志型 Key-Value数据库
数据结构服务器(Value可以是 字符串(String) ,哈希(Map),列表(list),集合(sets)和有序集合(sorted sets)等类型)
(2) Redis有哪些特点?
1. 支持多种数据结构 如:String List dict(hash表) set(集合) zset(有序集合) hyperloglog(基数估算)
2. 支持持久化操作 aof和rdb数据持久化到磁盘 (数据备份和数据恢复)
3. 支持数据复制(通过master-slave)
4. 单进程请求 (单线程)
2. 安装Redis单机版
(1) 如何安装Redis单机版?
1. 在linux系统中安装gcc (因为redis是c语言编写的)
Yum install -y gcc-c++
2. 将下载好的redis压缩包添加到linus服务器中(temp目录(新建的)下最好)
版本:redis-3.0.0.tar.gz
注意: 副版本号(就是3后面那个数字)是奇数,说明是测试版,不建议用来开发,偶数是稳定版,建议使用
Redis 3.0版本之后 才可以使用集群技术
3. 解压安装包
Tar -zxf redis...
4. 编译redis
在redis的根目录下 执行make命令就会自动编译
5. 安装
进入redis的解压目录的根目录下
执行 make install PREFIX=/usr/local/redis
6. 启动redis
5.1:前端启动
直接在bin目录下执行命令 ./redis-server (ctrl+c退出redis)
5.2:后端启动
5.2.1先将 redis目录下的redis.conf文件拷贝到 安装好的redis的bin目录下
Cp redis.conf/usr/local/redis/bin
5.2.2 修改拷贝过来的redis.conf配置文件
Vim redis.conf 将daemonize no 改为yes
5.2.3启动redis
在bin目录下执行命令 ./redis-server redis.conf 让redis启动时去加载redis.conf配置文件
5.2.4测试redis
在bin目录下启动redis自带的客户端 ./redis-cli
输入redis命令
Ping-->pong
5.2.4关闭redis
./redis-cli shutdown
3. Redis数据类型 -String类型
(1) set/get命令的作用是什么?
在redis库中存入数据string类型 键值对的形式
(2) mset/mget命令的作用是什么?
批量取值和赋值
(3) incr/decr命令的作用是什么?
Incr :让当前键的值以1的数量递增
Decr:让当前键的值以1的数量递减
4. Redis数据类型 -Hash类型
(1) hset/hget命令的作用是什么?
将数据以hash表的结构存储
(2) hmset/hmget命令的作用是什么?
存储多个或取出多个hash表中的key 的值
(3) hexists命令的作用是什么?
判断当前hash的字段名是否存在,存在返回1 ,不存在返回0
(4) hkeys/hvals命令的作用是什么?
获取当前hash表中的所有键名,或所有键的值
5. Redis数据类型 -List类型
(1) lpush/rpush命令的作用是什么?
Lpush在首节点的左侧添加一个值
Rpush在尾节点的右侧添加一个值
(2) lpop/rpop命令的作用是什么?
Lpop:移除当前list中最左侧的节点
Rpop:移除当前list中最右侧的节点
(3) lrange命令的作用是什么?
遍历 list 根据范围查询值0开始
(4) llen命令的作用是什么?
查询该list下值的总数
分享/讲解/扩展思考
点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。
第162次(Redis)
学习主题:Redis
学习目标:
1 掌握Redis的常用命令
2 掌握Redis的配置文件 数据的存储方式
对应视频:
http://www.itbaizhan.cn/course/id/85.html
对应文档:
无
对应作业
6. Redis数据类型 -Set类型
(1) sadd/smembers命令的作用是什么?
Sadd:在指定set集合中添加数据
Smembers:查询指定set集合中的所有数据
(2) scard命令的作用是什么?
Scard:查询set集合中数据的总数
(3) sismember命令的作用是什么?
Sismember:判断value是否在指定set集合中 存在返回1 ,不存在返回0
(4) srem命令的作用是什么?
Srem:移除指定set集合中的指定元素 成功返回1,不存在返回0
7. Redis数据类型 -SortedSet类型
(1) zadd命令的作用是什么?
添加有序集合zset
(2) zrange命令的作用是什么?
查询指定范围
(3) zremrangebyscore命令的作用是什么?
查询指定范围 对应的分值也会查询
8. Redis的常用命令
(1) ping命令的作用是什么?
验证redis是否链接成功的,成功则返回pong
(2) echo命令的作用是什么?
验证redis是否链接成功的,成功则返回输入的值
(3) keys命令的作用是什么?
Keys;查询key是否存在
Keys *: 查询所有的key
(4) exists命令的作用是什么?
判断string类型的指定的key是否存在 ,存在返回1,不存在返回0
(5) expire命令的作用是什么?
Expire key time 给指定key设置过期时间 ,时间一到,redis就会把此key和value删除
(6) ttl命令的作用是什么?
查询指定key的过期时间的剩余时间
Persist:移除给定key的过期时间
(7) flushdb命令的作用是什么?
删除当前选择的数据库中所有的key(有16个数据库 select number 切换)
(8) dbsize命令的作用是什么?
返回当前数据库中的key的数量
(9) info命令的作用是什么?
获得服务器的信息和统计
9. Redis配置文件
(1) 如何配置Redis启动时为后置启动?’
Daemonize yes
(2) 如何配置Redis监听端口?
port
(3) 如何修改Redis的日志文件的保存位置?
Logfile 保存路径
10. Redis数据持久化方式-RDB
(1) 什么是Redis的RDB备份方式?
将Redis在内存中的数据库状态保存到磁盘里.是经过压缩二进制文件
通过该文件可以还原RDB文件时的数据库状态(默认,持久到dump.rdb文件,并且在redis重启后,自动读取该文件,这些配置项都可以在redis.conf中修改)
(2) RDB的生成方式?
两种方式
Save: 该命令会阻塞Redis服务器线程,直到RDB文件创建完毕为止,阻塞期间,服务器不能处理任何请求
BGSAVE:该命令会派生一个子线程,子线程负责创建RDB文件,父线程继续执行请求
在RDB创建成功之前,执行BGSAVE和Save命令会被服务器拒绝
(3) RDB的备份策略是什么?
Save 900 1
Save 300 10
Save 60 10000
那么只要满足以下三个条件中的任意一个,BGSAVE 命令就会被执行
服务器在 900 秒之内,对数据库进行了至少 1 次修改
服务器在 300 秒之内,对数据库进行了至少 10 次修改
服务器在 60 秒之内,对数据库进行了至少 10000 次修改
(4) 如果修改RDB的备份策略?
可以设置服务器配置(redis.conf)的save选项,让服务器按条件自动执行一次BGSAVE命令
(5) RDB备份方式所生成的备份文件默认的会放到什么位置?
默认放在打开服务器服务的根目录下(在哪里打开的就生成在哪里)
11. Redis数据持久化方式-AOF(默认时关闭的,需要修改配置文件开启该方式)
(1) 什么是Redis的AOF备份方式?
把每一天命令都写入文件
(2) AOF的备份策略是什么?
通过保存Redis服务器所执行的写的命令(查询命令不会记录)来记录数据库状态的文件
(3) AOF备份方式所生成的备份文件默认的会放到什么位置?
Bin目录下
(4) AOF方式是如何做数据恢复的?
服务器启动时,通过载入和执行AOF文件中班车的命令来还原服务器关闭之前的数据库状态
载入AOF文件
创建模拟客户端
从AOF文件中读取一条命令
使用模拟客户端执行命令
循环读取直到完成
同时开启了RDB和AOF AOF优先,而且只加载AOF文件恢复数据
12. Redis集群介绍(Redis3.0版本之后才支持cluster(集群),集群要求集群节点中必须要支持主备模式,也就是说集的主节点(Master)至少要有一个从节点(Slave))
(1) Redis的集群原理是什么?
客户端可以与任何一个节点相链接,然后就可以访问集群中的任何一个节点,对其进行存取和其他操作
(2) Redis集群的容错原理是什么?
Redis之间通过相互的ping-pong判断是否节点可以连接上,如果有一半以上的节点去ping一个节点的时候没有回应,集群就认为这个节点挂了(宕机),然后去连接他的从节点,如果某个节点和所有从节点全部挂掉,我们集群就进入fail(失败)状态,还有就是如果有一半以上的主节点挂了,集群同样进入fail状态, 这就是redis的容错原理
(3) 在Redis集群中是如何做数据分片存储的?
我们将16384个插槽分配给所有的集群
当我们需要存取key-value时,redis会根据crc16算法算出一个值
然后对这个值进行取余 值%16384 =插槽的编号
然后我们找到该插槽的Node节点,执行value的存取操作