Redis基础简介
为什么使用Redis?
随着互联网的快速发展,传统的关系型数据库如Mysql已经不能适⽤所有的场景了,⽐如秒杀的库存扣减,APP⾸⻚的访问流量⾼峰等等,都很容易把数据库打崩,所以引⼊了缓存中间件,⽬前市⾯上⽐较常⽤的缓存中间件有Redis 和 Memcached 不过中和考虑了他们的优缺点,最后选择了Redis。
Redis有哪些数据结构?
常用五种: 字符串String、字典Hash、列表List、集合Set、有序集合SortedSet。(HyperLogLog、Geo、Pub/Sub。)
- Redis 哈希(Hash)
-Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。
首先,我们从作用上理解hash存在的意义:Redis hash 是一个 string 类型的 field 和 value
的映射表,hash 特别适合用于存储对象。从另一个方面来说是,hash可以聚合很多类似的属性,这是string中难以实现的。
hset 设置单个 field -> value ;hmset 批量添加元素 ;hget 获取某字段值
hmget 批量获取值 ;hgetall 获取所有hash的kv ;hincrby 增加x某字段;hdel 删除某字段
如何进行存储获取
看下源码实现
public boolean hset(String key, String item, Object value) { try { this.redisTemplate.opsForHash().put(key, item, value); return true; } catch (Exception var5) { var5.printStackTrace(); return false; } } ```
如果有⼤量的key需要设置同⼀时间过期,⼀般需要注意什么?
如果⼤量的key过期时间设置的过于集中,到过期的那个时间点,redis可能会出现短暂的卡顿现象。严重的话会出现缓存雪崩,我们⼀般需要在时间上加⼀个随机值,使得过期时间分散⼀些。
电商⾸⻚经常会使⽤定时任务刷新缓存,可能⼤量的数据失效时间都⼗分集中,如果失效时间⼀样,⼜刚好在失效的时间点⼤量⽤户涌⼊,就有可能造成缓存雪崩
Redis是怎么持久化的?
- RDB 快照 将某一时刻的所有数据写入硬盘中
- AOF 日志 记录服务器的写操作 每次重启服务器会执行这些命令来恢复数据