猿Why花了两周左右的时间,在阿里云开发者社区学习了一门Redis入门到精通课程:基础篇、进阶篇对Redis的知识点进行恶补、扫盲。这篇文章,我打算作为一个小结,以回忆的方式整理一下知识点。
Redis基础数据类型以及操作命令
string
数字、字符串,都是以string形式存储
命令
#> set key value
#> get key
hash
类似Java中的Map,key为字符串类型,field为字符串,value为string(没有对象这一说)
命令
#> hset key field value
#> hgetall key
#> hget key field
list
类似于Java中的List,存储结构是双向列表的形式。并且,list操作有方向性,以下命令,只记录left操作
命令
#> lpush key value
#> lrange key start end //lrange key 0 -1 查看全部数据
#> lpop key 移出并获取列表的第一个元素
set
无序不重复集合,存储结构与hash类型存储结构完全一样,只不过filed存储值,value存(nil),不起作用。并且,set类型也支持交、并、差操作(有命令)
命令
#> sadd key value
#> smembers key
#> srem key member //删除指定元素
zset
有序不重复集合,存储结构与set完全相同,value中存储用于排序的值(权重)
命令
#> zadd key score(权重) member(值)
#> zrange key start end withscores // 获取全部数据
#> zadd key member // 删除
通用命令
#> del key // 删除指定key
#> exists key // 获取key是否存在
#> type key // 获取key类型
#> expire key seconds // 为指定key设置有效期
#> pexpire key milliseconds // 为指定key设置有效时间
#> expireat key timestamp
#> pexpireat key millseconds-timestamp
#> ttl key // 获取key的有效时间(返回结果说明:-2 key不存在,-1 key存在但是没有设置时间,一个大于0的数字 剩于有效时间)
#> pttl key
#> persist key // 切换key从时效性转换为永久性
#> keys pattern // 查询key *匹配任意数量的任意符号 ?匹配一个任意符号 [] 匹配一个指定符号
#> rename key newkey // 为key改名(同名key值会被覆盖)
#> renamenx key newkey // 当修改不表key不存在的时候,执行重命名操作
#> sort // 为所有key排序
#> help @generic // 其他key通用操作
#> select index // 切换数据库(index 0-15,数据库size,可以在配置文件中配置)
#> quit // 退出客户端
#> ping // 测试服务器是否连同
#> echo message // 控制台输出日志
#> move key db // 当前库中key 剪切到 其他指定的db中(src存在且target不存在的情况下才可成功,否则失败)
#> dbsize // 查看当前数据库中key的数据量
#> flushdb // 清除当前所在数据库数据
#> flushall // 清除所有数据库的数据
持久化
数据持久化,可以做数据备份和灾备,分为RDB和AOF两种。RDB为数据快照存储,存储某一时间节点的所有数据。AOF存储命令,类似于日志记录记录执行过的命令,数据恢复的时候,就是重新执行命令。
Redis四种服务模式
单机版
redis-server直接启动,即可提供Redis服务,键值对存储与查询服务
#> redis-server redis.conf
提供服务
存储、查询
主从复制
master-slave结构,在slave节点服务启动时候,需要配置master的信息
提供服务
一般,主节点提供写服务,从节点提供读服务。master节点的写命令,同样会在从节点同步执行(缓冲区暂存命令)
哨兵模式
哨兵节点同样是Redis服务,启动命令不同
#> redis-sentinal sentinel.conf
提供服务
哨兵节点负责监控redis服务节点的健康状态,以及故障转移。Redis服务一样提供数据存储和数据查询服务,哨兵不提供存储 与查询
集群模式
集群模式,基于主从模式,依赖Ruby和gem,管理集群中的Redis节点。
#> ./redis-trib.rb create --repicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384
提供服务
以集群方式做数据存储,提出“槽”的概念,key值计算后存储到指定的redis node,每个node中有一张key-槽位置的列表,保证一个key最多两次就可以找到具体的redis node。
Redis常被提及的问题
缓存预热
Redis中没有准备数据,导致数据库访问初始访问量暴增,导致数据库处理不过来
缓存雪崩
Redis中大量key集中过期,导致数据库访问量暴增
缓存击穿
Redis中热点key过期,触发key值数据在数据库中集中访问和回写Redis,造成崩溃
缓存穿透
超级频繁访问不存在的业务数据(恶意),导致数据库、应用、Redis访问量剧增
本质上将
都是Redis没能起到预期的作用,造成数据库服务压力过大,导致系统崩溃。
现在达到程度
- 通过redis-cli进行redis服务命令操作
- 了解四种模式Redis服务模式提供的服务
- 在业务场景中使用Redis更加合理
下一步
从Redission配置为切入口,了解Redis在业务系统中的使用方式