目录
1.Redis数据类型
1. 字符串
value的数据结构(数组)
字符串value数据结构类似于数组,采用与分配冗余空间来减少内存频繁分配
当字符串长度小于1M时,扩容就是加倍现有空间
如果字符串长度操作1M时,扩容时最多扩容1M空间,字符串最大长度为 512M
字符串的使用场景(缓存)
字符串一个常见的用途是缓存用户信息,我们将用户信息使用JSON序列化成字符串
取用户信息时会经过一次反序列化的过程
name: value (value=json.dumps([{‘11.12迟到’},{},{}]))
2. list(列表)
value的数据结构(双向链表)
列表的数据结构是双向链表,这意味着插入和删除的时间复杂度是0(1),索引的时间复杂度位0(n)
当列表弹出最后一个元素后,该数据结构会被自动删除,内存被回手
列表的使用场景(队列、栈)
3. hash(字典)
value的数据结构(HashMap)
redis中的字典也是HashMap(数组+列表)的二维结构
不同的是redis的字典的值只能是字符串
hash的使用场景(缓存)
hash结构也可以用来缓存用户信息,与字符串一次性全部序列化整个对象不同,hash可以对每个字段进行单独存储
这样可以部分获取用户信息,节约网络流量
hash也有缺点,hash结构的存储消耗要高于单个字符串
info={“name”:“zhs”,“age”:18}
字符串存:info={"name":"zhs","age":18} 一次全部读取
hash:info={"name":"zhs", "age":18} hash 可以根据key取值
4. set(集合)
value的数据结构(字典)
redis中的集合相当于一个特殊的字典,字典的所有value都位null
当集合中的最后一个元素被移除后,数据结构会被自动删除,内存被回收
set使用场景
set结构可以用来存储某个活动中中奖的用户ID,因为有去重功能,可以保证同一用户不会中间两次
set 是无序集合
sadd key member 添加一个 string 元素到 key 对应 set 集合中,成功返回 1,如果元素以及 在集合中则返回 0,key 对应的 set 不存在则返回错误
继续添加,返回0表示添加失败,说明set集合,不允许添加重复元素
smembers smembers smembers key 返回 key 对应 set 的所有元素,结果是无序的
5. zset(有序集合)
value的数据结构(跳跃列表)
zset一方面是一个set,保证了内部的唯一性
另一方面它可以给每一个value赋予一个score,代表这个value的权重
zset内部实现用的是一种叫做“跳跃列表”的数据结构
zset最后一个元素被移除后,数据结构就会被自动删除,内存也会被回收
zset应用场景
粉丝列表:value(粉丝ID),score(关注时间),这样可以轻松按关注事件排序
学生成绩:value(学生ID),score(考试成绩),这样可以轻松对成绩排序
2.Redis优点
redis为什么快
单线程避免上下文切换
纯内存操作
非阻塞IO多路复用
缺点
内存限制,不能存海量数据
3.持久化方式
RDB(快照)
全量同步:从服务器有的数据全部丢弃,主服务器把所有数据发给他。
redis把磁盘中原有数据全部丢弃,然后把redis内存中数据全部重新写入磁盘
缺点:
会丢失数据(当磁盘数据丢弃,正在写入时如果出现故障会导致数据丢失)
优点:
整个Redis数据库将只包含一个文件,一旦系统出现灾难性故障,我们可以非常容易的进行恢复。
性能最大化,它仅需要fork出子进程,由子进程完成持久化工作,极大的避免服务进程执行IO操作了。
AOF
增量同步:主服务器只发送从服务器缺少的数据。
把所有的修改操作先写入日志中,然后逐条的执行最后就写入磁盘
缺点:
- 对于相同数量的数据集而言,AOF文件通常要大于RDB文件,RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。
- AOF在运行效率上往往会慢于RDB
优点:
- 数据安全性高,Redis中提供了3中同步策略,即每秒同步、每修改同步和不同步
redis从主从同步应该采用哪种方式?
-
-
-
当然,如果有需要,slave在任何时候都可以发起全量同步
-
-
4. 智能dns
可以根据用户网络的出接口公网IP,解析出距离最近的服务器访问
nslookup www.baidu.com
tracert ip