Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave模式的数据备份。
视频学习链接:
www.bilibili.com/video/BV13U…
1. 阶段性学习总结:
** 建议自己部署一个redis进行操作**
1:redis基础信息:
①info 查看信息
②keys 查看所有键值对
③:scan查看 ,exists key 判断key值是否存在,select 1,查询第二个库.
④redis配置修改信息redis.cof
⑤redis客户端redis_cli
⑥redis 启动关闭
2:redis五种数据结构:string list,set集合, 有序集合zset,hash
3:redis的特点:
①:支持持久化,将内存数据保存到磁盘中,重启的时候可以再次加载进行使用
②:支持多种数据结构存储:如:string ,list,set集合,有序集合zset,hash等
③:redis支持数据的备份,即:主从模式的数据备份
4:redis常用命令
String 类型
string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一value。
string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。
string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。
**注意:** 一个键最大能存储 512MB。
1)ttl查询key剩余时间 如:ttl k1 即查看k1这个键的剩余时间
>>如果返回 -2,则说明没有这个k1键
>>如果返回 -1,则说明没有设置过期时间,只要不宕机就说明存在
2)exists key 查看key 是否存在多个值用空格隔开
3)expire key seconds 设置过期时间
4)type key 查看key 的数据类型,String,list,hash ,set zset等
5)重命名key rename key newkey
6)del key 删除指定的key 多个用空格隔开
7)set key val 保存键数据
8)get key 获取key值
9)append key val 往key值追加字符串
>>返回追加之后字符串长度
>>如果key 不存在相当set key
10)strlen key 获取字符串长度
2. list列表 类型
-Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
1)del key 删除键
2)lpush key value 像key值添加list数据,有序可以重复的数据
3)lrange key start stop 查看key 的list数据 开始下标和结束下标从零开始
3. set集合类型
Redis 的 Set 是 string 类型的无序集合。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
将一个或者多个元素添加到集合 sadd key value value ...
1)del key 删除键
2)sadd key value 添加一个 string 元素到 key 对应的 set 集合中,成功返回 1,如果元素已经在集合中返回 0。
3)smembers key 查看key 的set数据 所有数据
4. zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
1)加元素到集合,元素在集合中存在则更新对应score zadd key score member
2)zrange key 0 10 查询set键值0-10个无序值
5. Hash(哈希)
Redis hash 是一个键值(key=>value)对集合。
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
1)hmset key filed value filed value.... 创建一个hash建
2)hget key field1 获取指定key 域的值
2. 阶段性学习总结:
Redis 事务
Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:
- 批量操作在发送 EXEC 命令前被放入队列缓存。
- 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
- 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。
一个事务从开始到执行会经历以下三个阶段:
- 开始事务。 开启事务命令:multi
- 命令入队。 事务队列命令,set key , get key, sadd key... smember key 等命令成功返回queued
- 执行事务。 执行事务命令 exec
- 清楚已存在的事务命令. discard
1)单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执
行并不是原子性的。
2)事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指
令的回滚,也不会造成后续的指令不做
3)如果一组命令中,在压入队列中,发生错误,则可以保证redis事务的原子性
4)如果一组命令中,在压入队列中,不发生错误,执行时候,有错误,则不能保证redis事务的原子性
Redis 发布订阅
Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。
Redis 客户端可以订阅任意数量的频道。
- 开启本地 Redis 服务,开启两个 redis-cli 客户端。
- 在**第一个 redis-cli 客户端**输入 SUBSCRIBE runoobChat,意思是订阅 `runoobChat` 频道。
- 在**第二个 redis-cli 客户端**输入 PUBLISH runoobChat "Redis PUBLISH test" 往 runoobChat 频道发送消息,这个时候在第一个 redis-cli 客户端就会看到由第二个 redis-cli 客户端发送的测试消息。
定义频道命令: subscribe key 订阅一个频道
发布频道命令: publish key "消息内容"
下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:
当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:
Redis 其他命令相关
在 Redis2.4 中,最大连接数是被直接硬编码在代码里面的,而在2.6版本中这个值变成可配置的。
maxclients 的默认值是 10000,你也可以在 redis.conf 中对这个值进行修改。
config get maxclients
redis 主从服务相关
1)redis 主从一般都是一主多从,正常情况可以需要在三个机器上进行处理,网络互通情况.
如果是测试使用,可以在同个机器启动三个不同端口服务进行测试调试,然后选择一个主机作为主服务(master service )其他作为从服务(slave service),默认情况下都是master 服务
redis 服务作为其他服务从服务命令
如三台服务都是 1)127.0.0.1:6379
2)127.0.0.1:6380
3)127.0.0.1:6381
正常情况下服务都是主服务:可以通过info replication 查看当前服务的redis是否主从信息
在6380和6381服务分别执行 saveof 127.0.0.1:6379 执行之后,从新查看就可以看到6380和6381已经作为从服务器情况了, 如果redis 服务需要断开主从关系用命令:saveof no one
redis 单哨兵模式
哨兵模式原理:说白了就是在一主多从的情况下,盯着主服务,一旦主服务宕机,从机上位的自动切换的过程,达到高可用的情况.
sentinel monitor dc-redis 127.0.0.1 6379 1 (监听主机配置),1代表从机投票机制,有找到1个从机有一票马上切换为主机.
sentinel.conf redis 默认有一个哨兵配置,也可以创建一个哨兵的配置文件.
启动哨兵服务命令: redis-sentinel sentinel.conf
主机宕机从机上位之后,主机恢复,原来主机自动变为从机服务
执行之后启动情况:
