windsearcher同学
一蓑烟雨任平生。料峭春风吹酒醒,微冷,山头斜照却相迎。回首向来萧瑟处,归去,也无风雨也无晴。
1.redis是什么
reids是一个开源的缓存框架,基于K-V对的内存缓存框架,具有丰富的数据结构,支持分布式,可持久化。
2.为什么要用redis
也就是说redis 的适用场景,在什么情况下采用缓存呢?
1.存储的数据类型不适合用关系型数据库,以关注的人为例,对应的是一个用户ID列表,适用关系型数据库只能将列表拆成多行,然后再查询出来组装
2.单机情况下的MySQL已经优化到极致了,依旧无法支持日渐增加的并发量,从软件到硬件层次去优化MySQL。软件层面最常见的加索引、硬件层面的换成固态硬盘,读写速度更快。
此时才开始考虑是否引入缓存,那为什么选择redis?
简单稳定,这点笔者觉得很重要,如果三天两头出问题,我想也没有哪个公司会用它
速度快,官方称10W QPS
支持分布式,redis3.x推出了redis cluster
持久化,也就是数据会被落地到磁盘中
丰富的数据结构,字符串、哈希、列表、集合、有序集合、bitmaps、geo、hyperloglog
3.redis基础
字符串
set key value [ex seconds] [px milliseconds] [nx|xx]设置值,可以用set key value ex seconds nx来实现分布式锁,nx表示只能为不存在的key设置值
get key 获取某个key的值
mset key1 value1 key2 value2 批量设置并且是原子的,可以用来减少网络时间消耗
mget key1 key2 批量获取并且是原子的,可以用来减少网络时间消耗
哈希
其实我们可以理解 hash 为 小型Redis ,Redis 在底层实现上和 Java 中的 HashMap 差不多,都是使用 数组 + 链表 的二维结构实现的。
下面我们来看一下关于 hash 的基本操作。
hset key field value 设置字典中某个key的值
hmset key field1 value1 field2 value2 ... 批量设置
hget k