导图社区 Redis
redis知识点最详细的总结,--数据类型,相关配置
社区模板帮助中心,点此进入>>
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
css
CSS
计算机操作系统思维导图
计算机组成原理
IMX6UL(A7)
考试学情分析系统
Redis
数据类型
string(字符串)
常用命令
get
set
incr
decr
mget等
使用场景
常规计数: 微博数, 粉丝数
实现方式
String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int
hash(哈希)
hget
hset
hgetall 等
应用场景
用户ID为查找的key,存储的value用户对象包含姓名,年龄,生日等信息
存储方式
第一种
p
用户ID作为查找key,把其他信息封装成一个对象以序列化的方式存储
缺点
缺点是,增加了序列化/反序列化的开销
在需要修改其中一项信息时,需要把整个对象取回
修改操作需要对并发进行保护,引入CAS等复杂问题
第二种
用用户ID+对应属性的名称作为唯一标识来取得对应属性的值
list(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
lpush
rpush
rpop
lrange
set(集合)
Redis的Set是string类型的无序集合
sadd
返回值 被添加到集合中的新元素的数量,不包括被忽略的元素。
spop
用于移除并返回集合中的一个随机元素
smembers
命令返回集合中的所有的成员
sunion
自动排重
并且set提供了判断某个成员是否在一个set集合内的重要接口
案例
可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合
Redis还为集合提供了求交集、并集、差集等操作
可以非常方便的实现如共同关注、共同喜好、二度好友等功能
使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中
zset(sorted set:有序集合)
zadd
sorted
zrem
zcard
相关配置
port 端口号,例如6379
bind 实例绑定的访问地址127.0.0.1
requirepass 访问的密码
timeout:请求超时时间
databases:开启数据库的数量
dbfilename:数据快照文件名(只是文件名,不包括目录)
知识点
主从复制
支持一个master可以拥有多个slave,而一个slave又可以拥有多个slave,从而形成强大的多级服务器集群架构
Master以写为主,Slave以读为主
主节点定期把数据同步到从节点保证数据的一致性
数据的复制是单向的,只能由主节点到从节点
作用
数据冗余
数据的热备份
故障恢复
主节点出现问题时,可以由从节点提供服务
负载均衡
多个从节点分担读负载
读写分离
主库写、从库读
高可用基石
哨兵
监控redis主、从数据库是否正常运行
主出现故障自动将从数据库转换为主数据库
集群
至少需要3主3从
持久化
RDB持久化
概念
在指定的时间间隔内将内存中的数据集快照写入磁盘
触发方式
自动触发
命令
save命令
bgsave命令
手动触发
AOF持久化
缓存和数据库双写一致性问题
缓存雪崩问题
缓存击穿问题
缓存的并发竞争问题
单线程的redis为什么这么快
纯内存操作
避免了频繁的上下文切换
用了非阻塞I/O多路复用机制
redis采用序列化方案存对象
类实现了Serializable接口
目的
将一个实现了Serializable接口的对象转换成一个字节序,把该字节序列保存起来列
序列化过程
ByteArrayOutputStream bai=new ByteArrayOutputStream();
ObjectOutputStream obi=new ObjectOutputStream(bai);
obi.writeObject(obj);
byte[] byt=bai.toByteArray();
return byt;
反序列化
ObjectInputStream oii=null; ByteArrayInputStream bis=null; bis=new ByteArrayInputStream(byt); try { oii=new ObjectInputStream(bis); Object obj=oii.readObject(); return obj;