您的位置:首页 > 数据库 > Redis

redis总概

2021-10-17 23:40 429 查看

Redis优势

  • 性能极高–Redis能读的速度是110000次/s,写的速度是81000次/s。
  • 丰富的数据类型–Redis支持二进制案例的Strings, Lists, Hashes, Sets 及Ordered Sets 数据类型操作。
  • 原子性-Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
  • 丰富的特性– Redis还支持publish/subscribe,通知, key过期等等特性。

Redis数据类型
Redis支持五种数据类型:

  • string(字符串)
  • hash(哈希)
  • list(列表)
  • set(集合)
  • setsorted set (有序集合)

我们实际项目中比较常用的是string , hash如果你是Redis 中高级用户,还需要加上下面几种数据结构HyperLogLog、Geo、Pub/Sub。
如果你说还玩过Redis Module,像BloomFilter,RedisSearch ,Redis-ML,面试官得眼睛就开始发亮了。

 

Redis是单进程的
Redis是单进程单线程的,redis利用队列技术并发访问变为串行访问,消除了传统数据库串行控制的开销。

一个字符串类型的值能存储最大容量是多少?
512M

 

一、缓存雪崩
我们可以简单的理解为︰由于原有缓存失效,新缓存未到期间(例如∶我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存过期),所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。

 

三、缓存预热
缓存预热这个应该是一个比较常见的概念,相信很多小伙伴都应该可以很容易的理解,缓存预热就是系统上线后,将相关的缓存数据直接加载到缓存系统。这样就可以避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题!用户直接查询事先被预热的缓存数据!

 

单线程的redis为什么这么快

  • (一)纯内存操作
  • (二)单线程操作,避免了频繁的上下文切换
  • (三)采用了非阻塞I/O多路复用机制

Redis支持的Java客户端都有哪些﹖官方推荐用哪个?
Redisson、Jedis、lettuce等等,官方推荐使用Redisson

 

redis的持久化策略   RDB,即 Redis DataBase,以快照形式将数据写入一个临时文件,持久化结束后,用这个临时文件替换上次持久化的dump文件,达到数据恢复。

默认开启,见redis.conf。

  AOF,即 appendonly file,将执行过的指令记录下来,数据恢复时按照从前到后的顺序再将指令执行一遍,实现数据恢复。 默认关闭,开启方法,修改配置文件redis.conf:appendonly yes。

 

应用场景

4,排行榜/计数器
Redis在内存中对数字进行递增或递减的操作实现的非常好。集合(Set )和有序集合( Sorted Set )也使得我们在执行这些操作的时候变的非常简单,Redis,只是正好提供了这两种数据结构。所以,我们要从排序集合中获取到排名最靠前的10个用户-我们称之为"user_scores”,我们只需要像下面一样执行即可∶当然,这是假定你是根据你用户的分数做递增的排序。如果你想返回用户及用户的分数,你需要这样执行︰ZRANGE user_scores 010 WITHSCORES Agora Games就是一个很好的例子,用Ruby实现的,它的排行榜就是使用Redis 来存储数据的,
你可以在这里看到。

 

5、发布/订阅
最后(但肯定不是最不重要的)是Redis的发布/订阅功能。发布/订阅的使用场景确实非常多。我已看见人们在社交网络连接中使用,还可作为基于发布/订阅的脚本触发器,甚至用Redis的发布/订阅功能来建立聊天系统!

 

48、如果有大量的key需要设置同一时间过期,一般需要注意什么?
如果大量的key过期时间设置的过于集中,到过期的那个时间点,redis可能会出现短暂的卡顿现象。一般需要在时间上加一个随机值,使得过期时间分散一些。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: