Redis

2022-11-29 09:27:18 浏览数 (1)

简单介绍一下 redis

redis是一个key-value类型的非关系型数据库,基于内存也可持久化的数据库,相对于关系 型数据库(数据主要存在硬盘中),性能高,因此我们一般用redis来做缓存使用; Redis支持5种数据类型,string、hash、list、set、zset(sorted set);

Redis key过期的方式

被动删除:当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key。 只有key被操作时(如GET),REDIS才会被动检查该key是否过期,如果过期则删除之并且返回NIL。 主动删除:由于惰性删除策略无法保证冷数据被及时删掉,所以Redis会定期主动淘汰一批已过期的key。 maxmemory当前已用内存超过maxmemory限定时,触发主动清理策略。 volatile-lru:只对设置了过期时间的key进行LRU(默认值) allkeys-lru : 删除lru算法的key volatile-random:随机删除即将过期key allkeys-random:随机删除 volatile-ttl : 删除即将过期的 noeviction : 永不过期

基于 redis 的分布式锁

获取锁的时候调用 setnx,如果返回 0,则该锁正在被别人使用,返回 1 则成功获取 锁。 还设置一个获取的超时时间,若超过这个时间则放弃获取锁。

redis集群同步数据

一个集群只能有16384个槽,编号0-16383。这些槽会分配给集群中的所有主节点,分配策略没有要求。可以指定哪些编号的槽分配给哪个主节点。集群会记录节点和槽的对应关系。 接下来就需要对key求哈希值,然后对16384取余,余数是几key就落入对应的槽里。slot = CRC16(key) % 16384。 以槽为单位移动数据,因为槽的数目是固定的,处理起来比较容易,这样数据移动问题就解决了。 使用哈希函数计算出key的哈希值,这样就可以算出它对应的槽,然后利用集群存储的槽和节点的映射关系查询出槽所在的节点,于是数据和节点就映射起来了,这样数据分配问题就解决了。

0 人点赞