基础知识
redis默认有16个数据库
默认使用第0个
Redis为什么单线程还那么快?
- 误区1:高性能的服务器一定是多线程
- 误区2:多线程(cpu上下文会切换)一定比单线程效率高
核心:Redis是将所有的数据放在内存中的,所以说使用单线程去操作效率就是最高的,多线程(cpu上下文会切换:耗时的操作!),对于内存系统来说,如果没有上下文切换效率就是最高的,多次读写都是在一个CPU上的,在内存存储数据情况下,单线程就是最佳的方案。
- Redis是单线程的,Redis是基于内存操作的。
- 所以Redis的性能瓶颈不是CPU,而是机器内存和网络带宽。
- 在Redis中无论什么数据类型,在数据库中都是以key-value形式保存,通过进行对Redis-key的操作,来完成对数据库中数据的操作。
五大数据类型
一、String(字符串)
String类似的使用场景:value除了是字符串还可以是数字,用途举例:
- 计数器
- 统计多单位的数量:uid:123666:follow 0
- 粉丝数
- 对象存储缓存
二、List(列表)
- Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
- 一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
- 首先我们列表,可以经过规则定义将其变为队列、栈、双端队列等。
总结
-
list实际上是一个链表,before Node after , left, right 都可以插入值。
-
如果key不存在,则创建新的链表。
-
如果key存在,新增内容。
-
如果移除了所有值,空链表,也代表不存在。
-
在两边插入或者改动值,效率最高!修改中间元素,效率相对较低。
应用:
消息排队!消息队列(Lpush Rpop),栈(Lpush Lpop)。
三、Set(集合)
- Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
- Redis中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
- 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
四 、Hash(哈希)
- Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
- Set就是一种简化的Hash,只变动key,而value使用默认值填充。可以将一个Hash表作为一个对象进行存储,表中存放对象的信息。
应用场景:
Hash变更的数据user name age,尤其是用户信息之类的,经常变动的信息!Hash更适合于对象的存储,Sring更加适合字符串存储!
五、Zset(有序集合)
- 不同的是每个元素都会关联一个double类型的分数(score)。redis正是通过分数来为集合中的成员进行从小到大的排序。
- score相同:按字典顺序排序
- 有序集合的成员是唯一的,但分数(score)却可以重复。
应用案例:
- set排序 存储班级成绩表 工资表排序!
- 普通消息,1.重要消息 2.带权重进行判断
- 排行榜应用实现,取Top N测试