Redis入门
Redis概述
- Redis是单线程(读写内存)模型。
- 线程是用来读写内存的。
- Redis持久化的方式:rdb(内存快照)和aof(追加日志)。
- Redis的数据结构:
Redis所有的数据结构都是以唯一的key字符串作为名称,然后通过这个唯一的key值来获取相应的value数据。不同类型的数据结构的差异就在于value的结构不一样。
#### string(字符串)
Redis最简单的数据结构。
1 | set name wangafeng |
缓存用户信息,将用户信息使用JSON序列化为字符串,存入Redis来缓存。当用户从Redis中取数据时,会经过一次反序列化过程。
list(列表)
类似于Java中的LinkedList,是链表,则插入和删除操作非常快。当列表弹出最后一个元素之后,该数据结构被自动删除,内存被回收。
右进左出:队列(先进先出)1
2
3
4
5rpush books python java golang
llen books //3
lpop books //python
lpop books //java
lpop books //golang
右进右出:栈(先进后出)1
2
3
4rpush books python java golang
rpop books //golang
rpop books //java
rpop books //python
set(集合)
相对于Java中的HashSet,它内部的键值对是无序且唯一的。内部实现是一个特殊的自动,字典中的所有value的值都是null。
1 | sadd books python |
set集合的应用场景
去重功能,可以用来存储活动中奖用户ID,去重,可以保证同一个用户不会中奖两次。
zset(有序集合)(跳跃链表实现的有序集合,score进行排序)
类似于Java中的SortedSet和HashMap的集合体,一方面它是set,保证了内部value的唯一性。另一方面,它可以给每个value赋予一个score,代表这个value的排序权重。
zset内部实现是一种叫做跳跃链表的数据结构。
1 | zadd key score value //score代表一个权重,排序的权重 |
zset,可排序去重集合,可以用来存储粉丝列表,value值是粉丝的用户ID,score则是关注时间,可以对粉丝列表按关注时间进行排序。
zset有序集合的应用场景
zset还可以用来存储学生的成绩,value是学生的id,score是他们的考试成绩。可以按分数进行排序得到他们的名次。
hash(字典)
类似于Java中的HashMap,无序字典。不同的是,Redis中字典的值只能是字符串。
1 | hset books java "think in java" |