本章是整理知识内容,为强化知识长期更新。
Redis
- Redis是一个速度非常快的
非关系型数据库(non-relationl databases)
,它可以是存储键对值(key-vakue)方式存储数据。它拥有5中数据类型。同时可以将存储在内存中的数据持久化到因硬盘中。 - Redis所有的数据都是以唯一的key字符串为名称,然后可以通过这个key来获取对应的value。
结构类型 | 结构存储的值 | 结构的读写能力 |
---|---|---|
STRING | 可以是字符串、整数或者浮点类型 | 对整个字符串或者字符串的其中一部分执行操作;对整数和浮点数据执行自动 或者自减 操作 |
LIST | 一个链表、链表每个节点上都包含了一个字符串 | 从链表的两端推入或者弹出元素;根据偏移量对链表记性修剪trim ;读取单个或者多个元素;根据值查询或者移除元素。 |
SET | 包含字符串的无序集合,并且每个被包含的字符串都是唯一约束 | 添加、查询、移除单个元素;检查一个元素是否存在于集合中;计算交集、并集、差集;从集合里面随机获取元素。 |
HASH | 包含键值对的无序散列表 | 添加、查询、移除单个键值对;获取全部键对值。 |
ZSET(有序集合) | 字符串与浮点分数之间的有序映射,元素的排列顺序由分值大决定。 | 添加、查询、移除单个元素;根据分值范围或者成员来获取元素。 |
String
- 字符串是Redis当中最简单的数据结构。Redis的字符串是动态的字符串,可以被反复修改。内部实现类似Java的ArrayList,采用预分配空间的方式来减少内存频繁分配。预分配大小方式根据字符串的大小决定,字符串小于1m则扩容空间是加倍。若字符串超过1m,扩容一次只会多扩1m的空间。字符串最大长度是512m。
1 | 192.168.31.7:6379> keys * # 检查当前空间key |
过期时间
1 | # 给key添加过期时间 |
创建时是否存在判断
1 | # 创建时候条件判断 |
计数
1 | # 如果value 就是一个整数,可以使用inrc对value进行累加。这里了解下自增范围 就是signed long的取值范围。 |
List
- Redis中的List有点类似Java中的LinkedList的结构,也是一个链表,所以插入和删除速度很快O(1)。索引很慢O(n)。这一特性导致Redis中的列表经常用来做列队。
1 | # 压栈的效果,后进先出。 |
获取List元素
- 这个操作非常慢,类似LinkedList的get的操作。
1 | 192.168.31.7:6379> lindex coding 1 |
Hash
- Redis的hash和Java中的Hashmap类似的结构,数组+链表,碰撞hash就进桶。但是redis字典值只能是字符串。
1 | # 仍进去三条 |
计数
1 | 192.168.31.7:6379> hset books count 1 |
- 和字符串一样value是数字的时候也可以计数。在很多常见都可以用的哈。
set
- Redis中的set类似Java中HashSet的数据结构,key是唯一无序的,但是它的value都null。当集合中最后一个元素被删除的时候,集合也就自动删除了。
1 | # 一次写入多个key |
zset
- 划重点,这个比较特殊。类似Java中的SortSet和HashMap的结合体,实现有点复杂。它是一个set,内部的value都是唯一的,它又可以给每个value 赋予score,代表这个value的权重。内部是一个
跳表列表
的数据结构。
1 | # 插入三个数据 |