Redis简单总结

分类:非关系型数据库概述

作者:Stephen

什么是Redis?

Redis是一种以内存作为存储介质的NoSQL的非关系型数据库;对于Redis的存储,它是使用简单的KV键值对进行保存数据。最重要的是它具有很优秀的读取速率(官方数据:读:110000次/s,写:81000次/s)

使用场景:

1.缓存热点或常用数据
2.消息队列(支付)
3.高速读写场景(现场投票)

注意事项:

1.业务数据如果命中率很低,就没有必要使用Redis;
2.业务数据写操作远多于读,也没有必要使用Redis;
3.存储文件过大会给Redis带来很大压力,也不需要使用Redis

Redis的数据类型:

1.String(字符串)

  • set 【Key】 【value】存键值对
  • get 【Key】取值

2.Hash(哈希):值中也是键值对

  • hset 【Key】【field】【value】将键值对作为value存入Key中
  • hmset【Key】【field 1】【value 1】【field 2】【value 2】【field n】【value n】将多个键值对作为value存入Key中
  • hget 【Key】【field】根据Key获取值中相应字段的值
  • hmget 【Key】【field 1】【field 2】【field n】根据Key获取值中多个字段的值
  • hgetall 【Key】获取相应Key下的所有键值对
  • 容量:每一个hash可存储42亿个键值对(2的32次方)

3.List(列表)

  • lpush【key】【value 1】【value 2】【value n】将多个值存入key对应的列表
  • lrange【key】start stop 获取key列表中下标从start开始到stop结束的值
  • 容量:每一个list可存储42亿个键值对(2的32次方)

4.Set(集合)

  • sadd【key】【value 1】【value 2】【value n】将多个值存入key对应的集合里
  • smembers【key】获取集合中所有值

5.ZSet(有序集合)

  • zadd【key】【value 1】【value 2】【value n】将多个值存入key对应的有序集合里
  • zrange【key】start stop 获取key有序集合中下标从start开始到stop结束的值
  • zrangebyscore【key】开始分值 结束分值

常见问题

Redis高效率的因素

  • 1.采用内存作为存储介质
  • 2.KV键值对结构存储数据相对简单,不会带来 额外的性能开销
  • 3.单线程(不需要分配更多的资源出去)速度更快
  • 4.底层使用C/C++开发,数据库操作更贴近

缓存穿透

  • 缓存穿透是指缓存和数据库中都没有的数据,客户不断地请求这条数据,就会造成数据压力过大导致穿透。(例如查询id为-1的)
  • 如何解决?
  • 1.接口的时候直接对请求处理做校验
  • 2.可以将缓存中设置与请求key相同的值为null,并且设置有效期,这样就可以防止反复攻击,导致缓存击穿

缓存击穿

  • 缓存击穿是指缓存中没有但数据库中有的数据(一般会在缓存到期时发生),如果用户并发量很多,同时读缓存失效的数据,那就会全部去数据库中获取,会影响数据库的效率,给数据库造成压力
  • 如何解决?
  • 设置热点数据有效期为永久有效
  • 定时任务更新缓存数据
  • 加互斥锁

缓存雪崩

  • 缓存雪崩一般都是在缓存数据大批量过期的时候发生,查询数据的量又比较大,类似于缓存击穿,不过不是单个数据,而是大批量数据。
  • 如何解决?
  • 缓存数据的过期时间设置随机,防止同一时间大
    量数据过期现象发生。
  • 如果缓存数据库是分布式部署,将热点数据均匀分布在不同的缓存数据库中。
  • 设置热点数据永远不过期

你可能感兴趣的:(Redis简单总结)