1、Redis的高并发和快速原因
1.redis是基于内存的,内存的读写速度非常快;
2.redis是单线程的,省去了很多上下文切换线程的时间;
3.redis使用I/O多路复用技术,可以处理并发的连接。(客户端的连接不占用 线程资源,只有当命令成功发送的时候,才会进入单线程,然后依次执行)
解释:多路:多个socket、多个客户端、多个黑窗口
复用:复用那一个线程
2、为什么Redis是单线程的 划重点 !!!!!
1.官方答案
因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了。
3、 Redis单线程的优劣势 划重点 !!!!
1)单进程单线程优势
代码更清晰,处理逻辑更简单
2)单进程单线程弊端
无法发挥多核CPU性能,不过可以通过在单机开多个Redis实例来完善。
4、redis中的数据类型有哪些?
1 String:字符串类型,一个key对应一个值,可以存储任何内,图片、视频都行,但是大小限制在512m以内
2 List:一个key对应多个值,值可以重复
3 set:一个key对应多个值,值不可以重复
4 Hash:key后面继续跟field属性,从而确定一个值
5 zSet:有序不重复集合,可以自动排序,一个key对应多个值
5、跳表的原理是什么?
答:跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。 redis的zset类型的底层就是用了这种数据结构
6.redis关键命令
Redis key
1.exists key判断某个key是否存在
2.expire key 10 10秒钟:为给定的key设置过期时间
String
1.setnx key value :只有在key不存在的时候设置key的值
常用来做分布式锁
2.incrby / decrby <步长>将 key 中储存的数字值增减。自定义步长
划重点 !!!
List
1.lpop/rpop 从左边/右边吐出一个值。值在键在,值光键亡。
2.lrange
Set
1.sadd <key><value1><value2>
将一个或多个 member 元素加入到集合 key 中,已经存在的 member 元素将被忽略
2.smembers
。
3.set类型数据的扩展操作
sinter <key1><key2>
返回两个集合的交集元素。
sunion <key1><key2>
返回两个集合的并集元素。
sdiff <key1><key2>
返回两个集合的差集元素(key1中的,不包含key2中的)
smove <source><destination>
value把集合中一个值从一个集合移动到另一个集合
Hash
1.hset 给集合中的 键赋值
2.hget 从集合取出 value
3.hexists 查看哈希表 key 中,给定域 field 是否存在。
Zset 划重点 !!!!
1.zrangebyscore key minmax [withscores] [limit offset count]
返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。
2…zrevrangebyscore key maxmin [withscores] [limit offset count]
同上,改为从大到小排列。
3.zincrby <key><increment><value>
为元素的score加上增量
4.zcount <key><min><max>
统计该集合,分数区间内的元素个数