Redis數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)系統(tǒng):第四章:底層實(shí)現(xiàn)原理

應(yīng)用場(chǎng)景:

設(shè)置限制的優(yōu)惠活動(dòng)的信息;
一些及時(shí)需要更新的數(shù)據(jù),積分排行榜;
手機(jī)驗(yàn)證碼的時(shí)間;
限制網(wǎng)站訪客訪問(wèn)頻率;

Redis數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)系統(tǒng):第四章:底層實(shí)現(xiàn)原理

Redis 以什么形式存儲(chǔ)數(shù)據(jù)? 什么是hash槽?

String(字符串) List(列表) Hash(字典) Set(集合) Sorted Set(有序集合)

Redis 集群中內(nèi)置了 16384 個(gè)哈希槽,當(dāng)需要在 Redis 集群中放置一個(gè) key-value時(shí),redis 先對(duì) key 使用 crc16 算法算出一個(gè)結(jié)果,然后把結(jié)果對(duì) 16384 求余數(shù),這樣每個(gè) key 都會(huì)對(duì)應(yīng)一個(gè)編號(hào)在 0-16383 之間的哈希槽,redis 會(huì)根據(jù)節(jié)點(diǎn)數(shù)量大致均等的將哈希槽映射到不同的節(jié)點(diǎn)。Redis 集群沒有使用一致性hash, 而是引入了哈希槽的概念。每個(gè)key通過(guò)CRC16校驗(yàn)后對(duì)16384取模來(lái)決定放置哪個(gè)槽.集群的每個(gè)節(jié)點(diǎn)負(fù)責(zé)一部分hash槽。這種結(jié)構(gòu)很容易添加或者刪除節(jié)點(diǎn),并且無(wú)論是添加刪除或者修改某一個(gè)節(jié)點(diǎn),都不會(huì)造成集群不可用的狀態(tài)。當(dāng)需要增加節(jié)點(diǎn)時(shí),只需要把其他節(jié)點(diǎn)的某些哈希槽挪到新節(jié)點(diǎn)就可以了;當(dāng)需要移除節(jié)點(diǎn)時(shí),只需要把移除節(jié)點(diǎn)上的哈希槽挪到其他節(jié)點(diǎn)就行了;

使用RedisTemplate 進(jìn)行緩存

@Autowired
private RedisTemplate redisTemplate;

添加到緩存,TbItemCatOneExample:給的名字,0表示通過(guò)0找到TbItemCatOneExample中以0為標(biāo)識(shí)的數(shù)據(jù)

//從庫(kù)中獲取的數(shù)據(jù)
List selectAll = itemCatMapper.selectAll();

redisTemplate.boundHashOps(“TbItemCatOneExample”).put(0, selectAll);

redisTemplate.boundHashOps(“TbItemCatOneExample”).delete(0);

redisTemplate.boundHashOps(“TbItemCatOneExample”).get(0);