redis-介绍
1、前置知识常识
磁盘和内存中常识
1、寻址
内存中ns级别
磁盘中ms级别
2、带宽
磁盘:百兆到G的的级别,现在的固态硬盘可以达到1-3G中
io buffer
磁盘磁道、扇区,一个扇区是512byte,索引4k
2、为什么使用
1、常见的关系型数据库是硬盘型数据库、随着数据的的增加,磁盘的IO就成为了瓶颈,为了加快数据查询效率,于是有了数据分而治之和索引
2、为了加快查询速率引入了索引,但是索引本身也是数据,由此磁盘存储带来了一个致命的硬伤
3、SAP HAHA公司发明了内存数据库,和硬盘数据库相比,寻址效率高,相同的数据量下,内存级别比硬盘数据量小,但是内存数据库也有一个致命的缺点,就是太贵了
在做数据分析的时候,发现经常查询的数据其实只有一部分,也就是热点数据,那么我们是不是可以只把这部分放置到内存数据库中,相对于的我们产生了一个新的技术-redis
3、介绍
1、redis是一个开源的内存中的存储系统,它可以用作数据库,缓存,消息中间件,他支持多种数据结构类型
2、redis是健值对K-V型数据库
4、数据结构
--题外话:
memcached 也是K-V结构 但是value没有数据类型的概念 memcache 只有String ,存储复杂类型依赖于json.获取想要的值依赖于客户端 redis 有多种数据类型,根据一些偏移可以直接拿到数据,根据偏移获取数据由redis-server处理 计算向数据移动 世界上只有三种数据结构 k=x,k=(x,y), k = {x=y} k= [{},{}] memcached 需要拿到全部的数据,然后再自行解析解吗 redis 可以根据类型获取数据(redis的server中每个类型都是自己的方法)-->计算向数据偏移
1、string 字符串
bitmap
SETBIT k2 1 offset value(二进制 0,1) BITPOS BITCOUNT BITOP 使用场景: 1、统计用户登录天数 2、统计某天登陆的用户
字符类型
1、set 设置一个key 2、get 3、mset 设置多个key和value 4、append 往key后面添加value 5、getrange 获取key的范围 6、setrange (SETRANGE s5 0 4)将s5的下标0的值或改为4 7、srtlen 获取key的长度
数值类型
incr
2、hash 散列
hset/hmset
HKEYS
HVALS
HGETALL
HINCRBYFLOAT
3、list 列表
结构
head,tail
lpush
LRANGE
LPOP
LINDEX
LSET
LTRIM
4、set 集合
SADD
SMEMBERS
SINTER
SUNION
SRANDMEMBER
5、sorted set 有序集合
zadd
ZRANGE
ZRANGEBYSCORE
ZREVRANGE
ZUNIONSTORE
排序底层
双向链表
跳表
type/encoding
5、事务
exec
命令负责触发并执行事务中的所有命令
在redis缓冲区的队列中,谁的exec先到达,那么整个客户端的命令就先执行
watch
标记所有指定的key 被监视起来,在事务中有条件的执行(乐观锁)
6、lru算法缓存
回收策略
allkey-lru
回收使用 最少使用过的key(长时间没有使用的key)
volatilet-lru
在过期集合中,使用最少的key进行回收(如果大量的key设置了过期时间)
整体使用的次数少
过期时间
set k1 aaa ex 30