String,Hash,List,Set,Zset五种数据类型
1、string数据类型
redis最基本的数据类型,最大存储512MB的数据,string类型是上进制安全的,即可存储任何数据,比如数字,图片,序列化对象等。INCR key:key值递增加1(key值必须为整数),DECR key:key值递增减1(key值必须为整数),GETSET key Value:获取ky值并返回,同时给key设置新值。
2、Hash数据类型(散列类型)
hash用于存储对象。可以采用这样啊名方式:对象类别和ID构成键名,使用字段表示对象的属性,而字段值则存储属性值。如:存储ID为2白勺汽车对象。如果Hash中包含很少白勺字段,那么该类型白勺数据也将仅占用很少白勺磁盘空间。每一个Hash可以存储4294967295个键值对。
3、Sorted set数据类型
有序集合,元素类型为string,元素具有唯一性,不能重复每个元素都会关联一个double类型白勺分数score(表示权重),可以通过权重的大小排序,元素的score可以相同应用范围:可以用于一个大型在线游戏的积分排行榜。
4、redis雪崩
指redis在某一时间大量失效,突然造成数据库访问压力急剧增加,像雪崩,可能造成服务器宕机。
解决方案
设置超时时间的时候要设置随机值,不要设置固定值。
5、缓存穿透
指缓存和数据库中都没有数据,而用户不断发起请求。由于缓存是不命中时被动写的,并且出于容错考虑,如果以存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求郁要到存储层去查询,失去了缓存的意义。 在流量大时,可能DB京龙挂掉了,要是有人利用不存在的key频繁攻击应用服务,这就是漏洞,例如发起id为-1的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,会导致数据库压力过大。
解决方案
1、设置并发锁,防止请求大量请求数据库,如果获取到锁了,去数据库查询,如果没有说明有其他线程在查询数据库,那么就只需要重试下即可 2、设置拦截器,对于不存在的key进行拦截。
6、缓存击穿
指缓存中没有但数据库中有的数据(般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去查数据库,引起数据库压力瞬间增大造成过大压力。
解决方案
1、设置热点数据永不过期 2、加互斥锁
|