Redis(二)-----数据分区 : https://cloud.tencent.com/developer/article/1744809
Redis(三)-----集群方案 : https://cloud.tencent.com/developer/article/1744811
Redis(四)-----持久化 : https://cloud.tencent.com/developer/article/1744791
Redis(五)-----应用场景 : https://cloud.tencent.com/developer/article/1744816
Redis(六)-----缓存穿透/缓存雪崩/缓存击穿 : https://cloud.tencent.com/developer/article/1744796
Redis(七)—淘汰删除策略 : https://cloud.tencent.com/developer/article/1744827
Redis的字符串、哈希表两种数据结构适合用来储存大量的键值对信息,从而实现高速缓存。合理的利用缓存不仅能够提升网站访问速度,还能大大降低数据库的压力。Redis提供了键过期功能,也提供了灵活的键淘汰策略,所以,现在Redis用在缓存的场合非常多。
很多网站都有排行榜应用的,如淘宝的月度销量榜单、商品按时间的上新排行榜等。Redis提供的有序集合数据类构能实现各种复杂的排行榜应用。Redis sorted set的使用场景与set类似,区别是set不是自动有序的,而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。当你需要一个有序的并且不重复的集合列表,那么可以选择sorted set数据结构
127.0.0.1:6379> zadd books 9.0 "Python"
(integer) 1
127.0.0.1:6379> zadd books 8.8 "JavaScript"
(integer) 1
127.0.0.1:6379> zadd books 8.1 "Golang"
(integer) 1
127.0.0.1:6379> zadd books 8.0 "Golang"
(integer) 0
(integer) 0
127.0.0.1:6379> zrange books 0 -1 # 0 表示有序集第一个成员, -1 表示最后一个成员
1) "Golang"
2) "JavaScript"
3) "Python"
127.0.0.1:6379> zrange books 0 10
1) "Golang"
2) "JavaScript"
3) "Python"
127.0.0.1:6379> zrevrange books 0 10 # 倒序
1) "Python"
2) "JavaScript"
3) "Golang"
什么是计数器,如电商网站商品的浏览量、视频网站视频的播放数等。为了保证数据实时效,每次浏览都得给+1,并发量高时如果每次都请求数据库操作无疑是种挑战和压力。Redis提供的incr命令来实现计数器功能,内存操作,性能非常好,非常适用于这些计数场景。
127.0.0.1:6379> SET rank 50
OK
127.0.0.1:6379> INCRBY rank 20
(integer) 70
127.0.0.1:6379> GET rank
"70"
总结
Redis列表结构,RPUSH/LPUSH可以在列表插入一个内容ID作为关键字,LTRIM可用来截取列表的数量,每插入一条数据就调用一次LTRIM(这也是官方给的方法),就可以获取最近的数据。
127.0.0.1:6379> RPUSH mylist "hello"
(integer) 1
127.0.0.1:6379> RPUSH mylist "hello"
(integer) 2
127.0.0.1:6379> RPUSH mylist "foo"
(integer) 3
127.0.0.1:6379> RPUSH mylist "bar"
(integer) 4
127.0.0.1:6379> LTRIM mylist 1 -1
OK
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "foo"
3) "bar"
127.0.0.1:6379> RPUSH mylist "haha"
(integer) 4
127.0.0.1:6379> RPUSH mylist "xoxo"
(integer) 5
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "foo"
3) "bar"
4) "haha"
5) "xoxo"
分布式技术带来的技术挑战是对同一个资源的并发访问,如全局ID、减库存、秒杀等场景,并发量不大的场景可以使用数据库的悲观锁、乐观锁来实现,但在并发量高的场合中,利用数据库锁来控制资源的并发访问是不太理想的,大大影响了数据库的性能。可以利用Redis的setnx功能来编写分布式的锁,如果设置返回1说明获取锁成功,否则获取锁失败,实际应用中要考虑的细节要更多