redis:
-
是非关系型数据库---
-
性能优秀,吞吐量 能达到 10万条/s
-
为什么性能这么好的:
- redis是直接操作内存的
- redis是单线程执行的,减少线程竞争与资源的占用(IO多路复用)
- redis命令简单: set key value,语法规则考究,存储的数据结构合理
- 使用nio的方式---设置固定槽点,每一个槽点针对某一种数据的请求,减少服务端的不必要开销
再就是基本指令的学习,没有捷径,只有熟能生巧
有五种数据存储结构: string hash list set zset
string | key-value:适合做统计,比如页面访问总数 |
hash | 类似map --适合存储实体信息,比如 用户基本信息:name age height phone |
list | 队列 ,比较适合做列表展示,访问记录/朋友圈消息展示 |
set | 集合,不能有重复,那就是查重的场景,抢红包/投票数统计 |
zset | score:member ,附带一个数值,比较适合做排行榜,一些需要排序的场景 |
(1)多路 I/O 复用模型
多路I/O复用模型是利用 select、poll、epoll 可以同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有 I/O 事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll 是只轮询那些真正发出了事件的流),并且只依次顺序的处理就绪的流,这种做法就避免了大量的无用操作。
这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程。采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络 IO 的时间消耗),且 Redis 在内存中操作数据的速度非常快,也就是说内存内的操作不会成为影响Redis性能的瓶颈,主要由以上几点造就了 Redis 具有很高的吞吐量。----出处
在使用redis的过程中需要注意的一些问题::
1 | Q 1 .redis进行快照的时候,对于内存的使用也会达到当前redis占用的内存比,也就是如果现在redis使用了51% 的内存,执行了快照,内存使用就会达到 102% ,系统就会卡死 A 1:那可以设定redis的内存使用阀值-redis.conf 中设置maxminmun =45% |
2 | Q 2 ..而其实redis 在内存使用达到95% 的时候就会自动执行一个swap 操作,将一部分redis的内容存储到磁盘中,可想而知,在运行过程中,操作到那部分磁盘中的文件时必然慢的要死,影响用户体验----读操作: 内存-us级 磁盘 ms 级 ---- A 2 : 在设定redis内存使用阀值的情况下,在加一个内存到达阀值之后的redis使用内存自动清理策略----- utl 从最少使用的开始删除/ ttl 从最近过期的删除 /random 从最近过期的里面随机删除 / none 不删除任何,使用swap磁盘化 |
3 | Q 3 .在运行很长一段时间之后redis必然出现很多内存碎片,这时候最简单做法就是重启redis ,那是不是要先备份呢,可以rdb 快照,那就要注意上面的第一个问题了。或者是AOF 日志 - A 3 :那要知道一点restart ,即使在开启aof的情况下,重启redis前不会自动执行aof的,需要手动先快照一份 |
一些测试信息:
Redis数据结构详解之List(二) - 张龙豪 - 博客园
操作spring 的redisTemplate ---API: