怎么设计有一个高并发的系统:https://baijiahao.baidu.com/s?id=1640985022622385094&wfr=spider&for=pc
http://www.360doc.com/content/17/1015/00/30466290_695002234.shtml
http://www.360doc.com/content/17/1015/00/30466290_695002481.shtml
Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。有字符串,链表,集 合和有序集合。支持在服务器端计算集合的并,交和补集(difference)等,还支持多种排序功能。所以Redis也可以被看成是一个数据结构服务 器。
Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”);也可以把每一次数据变化都写入到一个append only file(aof)里面(这称为“全持久化模式”)。
由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据。redis提供两种方式进行持久化,一种是RDB持久化(原理是将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化),另外一种是AOF(append only file)持久化(原理是将Reids的操作日志以追加的方式写入文件)。那么这两种持久化方式有什么区别呢,改如何选择呢?网上看了大多数都是介绍这两种方式怎么配置,怎么使用,就是没有介绍二者的区别,在什么应用场景下使用。
命令
参考:https://blog.csdn.net/jiangchunhui2009/article/details/81504073
-
设置生存时间(键可以存在多久)
expire : 将键的生存时间设为 ttl 秒
Pexpire :将键的生存时间设为 ttl 毫秒 -
设置过期时间(键什么时候被删除)
EXPIREAT :将键的过期时间设为 timestamp 所指定的秒数时间戳
PEXPIREAT : 将键的过期时间设为 timestamp 所指定的毫秒数时间戳. -
移除过期时间
PERSIST 命令可以移除一个键的过期时间
计算并返回剩余生存时间
ttl命令以秒为单位返回指定键的剩余生存时间。
pttl以毫秒返回
支持的数据类型:
String:字符串
hash:哈希,是一个键值(key=>value)对集合
List、
Set:string 类型的无序、不重复集合
Sorted Set:有序、不重复集合
过期键的删除策略
redis使用的过期键值删除策略是:惰性删除加上定期删除,两者配合使用。
如果一个键是过期的,那它到了过期时间之后是不是马上就从内存中被被删除呢??如果不是,那过期后到底什么时候被删除呢??
其实有三种不同的删除策略:
(1):立即删除。在设置键的过期时间时,创建一个回调事件,当过期时间达到时,由时间处理器自动执行键的删除操作。
(2):惰性删除。键过期了就过期了,不管。每次从dict字典中按key取值时,先检查此key是否已经过期,如果过期了就删除它,并返回nil,如果没过期,就返回键值。
(3):定时删除。每隔一段时间,对expires字典进行检查,删除里面的过期键。
可以看到,第二种为被动删除,第一种和第三种为主动删除,且第一种实时性更高。下面对这三种删除策略进行具体分析。
为什么Redis需要把所有数据放到内存中
Redis为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。所以redis具有快速和数据持久化的特征。如果不将数据放在内存中,磁盘I/O速度为严重影响redis的性能。在内存越来越便宜的今天,redis将会越来越受欢迎。
Redis有哪几种数据淘汰策略:
noeviction:返回错误当内存限制达到并且客户端尝试执行会让更多内存被使用的命令(大部分的写入指令,但DEL和几个例外)
allkeys-lru: 尝试回收最少使用的键(LRU),使得新添加的数据有空间存放。
volatile-lru: 尝试回收最少使用的键(LRU),但仅限于在过期集合的键,使得新添加的数据有空间存放。allkeys-random: 回收随机的键使得新添加的数据有空间存放。
volatile-random: 回收随机的键使得新添加的数据有空间存放,但仅限于在过期集合的键。
volatile-ttl: 回收在过期集合的键,并且优先回收存活时间(TTL)较短的键,使得新添加的数据有空间存放。
Redis提供了哪几种持久化方式
RDB持久化(原理是将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化),
AOF(append only file)持久化(原理是将Reids的操作日志以追加的方式写入文件)。