应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

redis介绍

  redis学习
  Redis现在基本上java项目都在使用,Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过RedisSentinel提供高可用,通过RedisCluster提供自动分区。1、redis与memcache区别
  Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例片、视频等等
  Redis不仅仅支持简单的kv类型的数据,同时还提供list,set,zset,hash等数据结构的存储。而memcache只支持简单数据类型,需要客户端自己处理复杂对象。
  Redis只使用单核,而Memcached可以使用多核。所以平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis在存储大数据的性能上进行优化,但是比起Memcached,还是稍有逊色。2、Redis常用的五大数据类型
  Redis不仅仅支持简单的kv类型的数据,同时还提供list,set,zset,hash等数据结构的存储
  String(字符串):string是redis最基本的类型,一个key对应一个value
  应用场景:
  String是最常用的一种数据类型,普通的keyvalue存储都可以归为此类,value其实不仅是String,也可以是数字:比如存放字典
  Hash(哈希):Redishash是一个键值(keyvalue)对集合,Redishash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
  使用场景:存储、读取、修改对象属性
  List(列表):Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
  使用场景:实现最新消息排行等功能。Lists的另一个应用就是消息队列,可以利用Lists的PUSH操作,将任务存在Lists中,然后工作线程再用POP操作将任务取出进行执行。
  Set(集合):Redis的Set是string类型的无序集合。Redisset对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。set的内部实现是一个value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。
  应用场景:
  l共同好友、二度好友
  l利用唯一性,可以统计访问网站的所有独立IP
  zset(sortedset:有序集合):Rediszset和set一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。
  应用场景:
  l带有权重的元素,比如一个游戏的用户得分排行榜
  l比较复杂的数据结构,一般用到的场景不算太多3、redis持久化
  Redis的读写都是在内存中,所以它的性能较高,但在内存中的数据会随着服务器的重启而丢失,为了保证数据不丢失,我们需要将内存中的数据存储到磁盘,以便Redis重启时能够从磁盘中恢复原有的数据,而整个过程就叫做Redis持久化。
  Redis被称为是内存数据库,那是因为它会将其所有数据存储在内存里,因此Redis具有强劲的速度性能,但是,也正因为数据存储在内存中,当Redis重启后,所有存储在内存的数据就会丢失。为了使得数据持久化,Redis提供了两种方式:RDB方式和AOF方式。
  RDB方式
  RDB方式的持久化是通过快照(snapshotting)完成的,当符合一定条件时,Redis会自动将内存中所有的数据生成一份副本并存储在硬盘中,这个过程被称为快照。快照,就类似于拍照,摁下快门那一刻,所定格的照片,就称为快照。
  AOF方式
  通过RDB方式实现持久化,一旦Redis异常退出,就会丢失最后一次快照之后更改的所有数据。为了降低因进程中止导致的数据丢失风险,可以使用AOF方式实现数据持久化。
  AOF持久化是以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,文件中可以看到详细的操作记录。4、redis分布式锁
  分布式锁其实就是,控制分布式系统不同进程共同访问共享资源的一种锁的实现。如果不同的系统或同一个系统的不同主机之间共享了某个临界资源,往往需要互斥来防止彼此干扰,以保证一致性。比如日常开发中,秒杀下单、抢红包等等业务场景,都需要用到分布式锁。而Redis非常适合作为分布式锁使用。
  l互斥性:任意时刻,只有一个客户端能持有锁。
  l锁超时释放:持有锁超时,可以释放,防止不必要的资源浪费,也可以防止死锁。
  l可重入性:一个线程如果获取了锁之后,可以再次对其请求加锁。
  l高性能和高可用:加锁和解锁需要开销尽可能低,同时也要保证高可用,避免分布式锁失效。
  l安全性:锁只能被持有的客户端删除,不能被其他客户端删除
  redis中的事务并不像mysql中那么完美,只是简单的保证了原子性。redis中提供了四个命令来实现事务,MULTI:类似于mysql中的BEGIN;EXEC:类似于COMMIT;DISCARD类似于ROLLBACK;WATCH则是用于来实现mysql中类似锁的功能。
  方案一:SETNXEXPIRE
  使用setnx抢锁,如果抢到之后,再用expire给锁设置一个过期时间,防止锁忘记了释放。
  假设某电商网站的某商品做秒杀活动,key可以设置为keyresourceid,value设置任意值,伪代码如下:
  但是这个方案中,setnx和expire两个命令分开了,不是原子操作。如果执行完setnx加锁,正要执行expire设置过期时间时,进程crash或者要重启维护了,那么这个锁就长生不老了,别的线程永远获取不到锁啦。
  方案二:SETNXvalue值是(系统时间过期时间)
  为了解决方案一,发生异常锁得不到释放的场景,把过期时间放到setnx的value值里面。如果加锁失败,再拿出value值校验一下即可。
  这个方案的优点是,巧妙移除expire单独设置过期时间的操作,把过期时间放到setnx的value值里面来。解决了方案一发生异常,锁得不到释放的问题。但是这个方案还有别的缺点:
  l过期时间是客户端自己生成的(System。currentTimeMillis()是当前系统的时间),必须要求分布式环境下,每个客户端的时间必须同步。
  l如果锁过期的时候,并发多个客户端同时请求过来,都执行jedis。getSet(),最终只能有一个客户端加锁成功,但是该客户端锁的过期时间,可能被别的客户端覆盖
  l该锁没有保存持有者的唯一标识,可能被别的客户端释放解锁。
  方案三:使用Lua脚本(包含SETNXEXPIRE两条指令)
  Redis是高性能的keyvalue内存数据库,在部分场景下,是对关系数据库的良好补充。
  Redis提供了非常丰富的指令集,官网上提供了200多个命令。但是某些特定领域,需要扩充若干指令原子性执行时,仅使用原生命令便无法完成。
  Redis为这样的用户场景提供了lua脚本支持,用户可以向服务器发送lua脚本来执行自定义动作,获取脚本的响应数据。Redis服务器会单线程原子性执行lua脚本,保证lua脚本在处理的过程中不会被任意其它请求打断。
  使用方式:
  redis在服务器端内置lua解释器(版本2。6以上)
  rediscli提供了EVAL与EVALSHA命令执行Lua脚本:
  redis内置lua执行命令
  EVAL命令语法
  EVALscriptnumkeyskey〔key〕arg〔arg〕
  EVALlua程序的运行环境上下文
  scriptlua脚本
  numkeys参数的个数(key的个数)
  keyredis键访问下标从1开始,例如:KEYS〔1〕
  argredis键的附加参数
  EVALSHA命令语法
  EVALSHASHA1numkeyskey〔key〕arg〔arg〕
  EVALSHA命令允许通过脚本的SHA1来执行(节省带宽)
  Redis在执行EVALSCRIPTLOAD后会计算脚本SHA1缓存,EVALSHA根据SHA1取出缓存脚本执行。
  Redis中管理Lua脚本
  scriptloadscript将Lua脚本加载到Redis内存中(如果redis重启则会丢失)
  scriptexistssh1〔sha1〕判断sha1脚本是否在内存中
  scriptflush清空Redis内存中所有的Lua脚本
  scriptkill杀死正在执行的Lua脚本。(如果此时Lua脚本正在执行写操作,那么scriptkill将不会生效)
  Redis提供了一个luatimelimit参数,默认5秒,它是Lua脚本的超时时间,如果Lua脚本超时,其他执行正常命令的客户端会收到BusyRedisisbusyrunningascript错误,但是不会停止脚本运行,此时可以使用scriptkill杀死正在执行的Lua脚本。
  lua函数
  主要有两个函数来执行redis命令
  redis。call()出错时返回具体错误信息,并且终止脚本执行
  redis。pcall()出错时返回luatable的包装错误,但不引发错误
  使用流程如下:
  1。编写脚本
  2。脚本提交到REDIS并获取SHA
  3。使用SHA调用redis脚本
  实例:
  需求:实现一个访问频率控制,某个IP在短时间内频繁访问页面,需要记录并检测出来,就可以通过Lua脚本高效的实现。
  Lua优点:
  减少网络开销。可以将多个请求通过脚本的形式一次发送,减少网络时延。
  原子操作。Redis会将整个脚本作为一个整体执行,中间不会被其他请求插入。因此在脚本运行过程中无需担心会出现竞态条件,无需使用事务。
  复用。客户端发送的脚本会永久存在redis中,这样其他客户端可以复用这一脚本,而不需要使用代码完成相同的逻辑。
  lua缺点:
  因为RedisLUA,等于是在C里面调LUA,然后LUA里面再去调C,返回值会有两次的转换,先从Redis协议返回值转成LUA对象,再由LUA对象转成C的数据返回。
  有很多LUA解析,VM处理,包括lua。vm内存占用,会比一般的命令时间慢。建议用LUA最好只写比较简单的,比如if判断。尽量避免循环,尽量避免重的操作,尽量避免大数据访问、获取。因为引擎只有一个线程,当CPU被耗在LUA的时候,只有更少的CPU处理业务命令,所以要慎用。
  方案四:SET的扩展命令(SETEXPXNX)
  除了使用,使用Lua脚本,保证SETNXEXPIRE两条指令的原子性,我们还可以巧用Redis的SET指令扩展参数!(SETkeyvalue〔EXseconds〕〔PXmilliseconds〕〔NXXX〕),它也是原子性的!
  伪代码:
  方案存在问题:
  l锁过期释放了,业务还没执行完。假设线程a获取锁成功,一直在执行临界区的代码。但是100s过去后,它还没执行完。但是,这时候锁已经过期了,此时线程b又请求过来。显然线程b就可以获得锁成功,也开始执行临界区的代码。那么问题就来了,临界区的业务代码都不是严格串行执行的啦。
  l锁被别的线程误删。假设线程a执行完后,去释放锁。但是它不知道当前的锁可能是线程b持有的(线程a去释放锁时,有可能过期时间已经到了,此时线程b进来占有了锁)。那线程a就把线程b的锁释放掉了,但是线程b临界区业务代码可能都还没执行完呢。
  方案五:SETEXPXNX校验唯一随机值,再释放锁
  方案四锁可能被别的线程误删,那我们给value值设置一个标记当前线程唯一的随机数,在删除的时候,校验一下
  缺点:锁过期释放,业务没执行完
  方案六:开源框架Redisson
  开源框架Redisson解决,每隔一段时间检查锁是否还存在,存在则对锁的过期时间延长,防止锁过期提前释放。
  Redission使用流程:
  watchdog自动延期机制
  客户端1加锁的锁key默认生存时间才30秒,如果超过了30秒,客户端1还想一直持有这把锁,怎么办呢?
  简单!只要客户端1一旦加锁成功,就会启动一个watchdog看门狗,他是一个后台线程,会每隔10秒检查一下,如果客户端1还持有锁key,那么就会不断的延长锁key的生存时间。
  如果时集群的话还有一个问题:就是redis的master节点宕机了,而锁没来得及复制到slave节点
  先拿setnx来争抢锁,抢到之后,再用expire给锁加一个过期时间防止锁忘记了释放;抢到锁后会开辟一个分线程看门狗去续时,最后在finally代码快中删除锁。
  缺点:基于单机版实现
  方案七:多机实现的分布式锁Redlock
  Redis一般都是集群部署的
  如果线程一在Redis的master节点上拿到了锁,但是加锁的key还没同步到slave节点。恰好这时,master节点发生故障,一个slave节点就会升级为master节点。线程二就可以获取同个key的锁啦,但线程一也已经拿到锁了,锁的安全性就没了
  为了解决这个问题,Redis作者antirez提出一种高级的分布式锁算法:Redlock。Redlock核心思想是这样的:
  搞多个Redismaster部署,以保证它们不会同时宕掉。并且这些master节点是完全相互独立的,相互之间不存在数据同步。同时,需要确保在这多个master实例上,是与在Redis单实例,使用相同方法来获取和释放锁。
  假设有N个redis的master节点,这些节点是相互独立的(不需要主从或者其他协调的系统)。N推荐为奇数。具体算法如下:
  缺点:
  RedissonRedLock是基于联锁MultiLock实现的,但是使用过程中需要自己判断key落在哪个节点上,对使用者不是很友好。RedissonRedLock已经被弃用,直接使用普通的加锁即可,会基于wait机制将锁同步到从节点,但是也并不能保证一致性。仅仅是最大限度的保证一致性。5、redis和数据库的一致性问题的解决方案
  使用到缓存的场景:
  同时有一个请求A进行更新操作,另一个请求B进行查询操作。那么会出现如下情形:
  (1)请求A进行写操作,删除缓存
  (2)请求B查询发现缓存不存在
  (3)请求B去数据库查询得到旧值
  (4)请求B将旧值写入缓存
  (5)请求A将新值写入数据库
  上述情况就会导致不一致的情形出现。而且,如果不采用给缓存设置过期时间策略,该数据永远都是脏数据。
  采用读取biglog异步删除缓存
  重试删除缓存机制还可以,就是会造成好多业务代码入侵。其实,还可以通过数据库的binlog来异步淘汰key。
  以mysql为例可以使用阿里的canal将binlog日志采集发送到MQ队列里面,然后通过ACK机制确认处理这条更新消息,删除缓存,保证数据缓存一致性
  推荐使用先更新数据库,再删除缓存。只有很低的概率会出现数据不一致的情况,而且使用redis就是为了快速,保证强一致性一定会有性能上的损失,只能保证最终一致性。
  6、缓存设计
  1)穿透优化
  缓存穿透是指查询一个根本不存在的数据,缓存层和存储层都不会命中,通常出于容错的考虑,如果从存储层查不到数据则不写入缓存层。整个过程分为如下3步:
  缓存层不命中。
  存储层不命中,不将空结果写回缓存。
  返回空结果
  解决办法:
  缓存空对象
  存储层不命中后,仍然将空对象保留到缓存层中,之后再访问这个数据将会从缓存中获取,这样就保护了后端数据源。
  缓存空对象会有两个问题:
  第一,空值做了缓存,意味着缓存层中存了更多的键,需要更多的内存空间(如果是攻击,问题更严重),比较有效的方法是针对这类数据设置一个较短的过期时间,让其自动剔除。
  第二,缓存层和存储层的数据会有一段时间窗口的不一致,可能会对业务有一定影响。例如过期时间设置为5分钟,如果此时存储层添加了这个数据,那此段时间就会出现缓存层和存储层数据的不一致,此时可以利用消息系统或者其他方式清除掉缓存层中的空对象。
  类似代码实现如下:
  2)布隆过滤器拦截
  bloomfilter就类似于一个hashset,用于快速判某个元素是否存在于集合中,其典型的应用场景就是快速判断一个key是否存在于某容器,不存在就直接返回。布隆过滤器的关键就在于hash算法和容器大小,下面先来简单的实现下看看效果,我这里用guava实现的布隆过滤器:
  由于缓存层承载着大量请求,有效地保护了存储层,但是如果缓存层由于某些原因不能提供服务,于是所有的请求都会达到存储层,存储层的调用量会暴增,造成存储层也会级联宕机的情况。
  击穿
  击穿与雪崩的不同在于缓存key失效的量级上。击穿是对于单个key值的缓存失效过期,雪崩则是大面积key同时失效。
  解决办法:
  l若缓存数据基本不会发生更新,则可尝试将热点数据设置为永不过期。
  l若缓存的数据更新不频繁,且缓存刷新的整个流程耗时较少的情况下,则可以采用基于Redis、zookeeper等分布式中间件的分布式互斥锁,或者本地互斥锁以保证仅少量的请求能请求数据库并重新构建缓存,其余线程则在锁释放后能访问到新缓存。
  l若缓存的数据更新频繁或者在缓存刷新的流程耗时较长的情况下,可以利用定时线程在缓存过期前主动地重新构建缓存或者延后缓存的过期时间,以保证所有的请求能一直访问到对应的缓存。
  缓存雪崩
  由于缓存层承载着大量请求,有效地保护了存储层,但是如果缓存层由于某些原因不可用(宕机)或者大量缓存由于超时时间相同在同一时间段失效(大批key失效热点数据失效),大量请求直接到达存储层,存储层压力过大导致系统雪崩。
  解决办法:
  l可以把缓存层设计成高可用的,即使个别节点、个别机器、甚至是机房宕掉,依然可以提供服务。利用sentinel或cluster实现。
  l采用多级缓存,本地进程作为一级缓存,redis作为二级缓存,不同级别的缓存设置的超时时间不同,即使某级缓存过期了,也有其他级别缓存兜底
  l缓存的过期时间用随机值,尽量让不同的key的过期时间不同(例如:定时任务新建大批量key,设置的过期时间相同)7、Rediscluster集群介绍
  常见的几种模式对比:
  模式
  版本
  优点
  缺点
  主从模式
  redis2。8之前1、解决数据备份问题
  2、做到读写分离,提高服务器性能
  1、master故障,无法自动故障转移,需人工介入
  2、master无法实现动态扩容
  哨兵模式
  redis2。8级之后的模式1、Master状态监测
  2、master节点故障,自动切换主从,故障自愈
  3、所有slave从节点,随之更改新的master节点
  1、slave节点下线,sentinel不会对一进行故障转移,连接从节点的客户端因为无法获取到新的可用从节点
  2、master无法实行动态扩容
  rediscluster模式
  redis3。0版本之后1、无中心架构。
  2、数据按照slot存储分布在多个节点,节点间数据共享,可动态调整数据分布。
  3、可扩展性,可线性扩展到1000个节点(官方推荐不超过1000个),节点可动态添加或删除。
  4、高可用性,部分节点不可用时,集群仍可用。通过增加Slave做standby数据副本,能够实现故障自动failover,节点之间通过gossip协议交换状态信息,用投票机制完成Slave到Master的角色提升。
  5、降低运维成本,提高系统的扩展性和可用性。
  1、Client实现复杂,驱动要求实现SmartClient,缓存slotsmapping信息并及时更新,提高了开发难度,客户端的不成熟影响业务的稳定性。
  2、节点会因为某些原因发生阻塞(阻塞时间大于clutsernodetimeout),被判断下线,这种failover是没有必要的。
  数据通过异步复制,不保证数据的强一致性。
  3、多个业务使用同一套集群时,无法根据统计区分冷热数据,资源隔离性较差,容易出现相互影响的情况。
  4、Slave在集群中充当冷备,不能缓解读压力,当然可以通过SDK的合理设计来提高Slave资源的利用率。
  一个RedisCluster由多个Redis节点构成,不同节点组服务的数据没有交集,也就是每个一节点组对应数据sharding的一个分片。
  节点组内部分为主备两类节点,对应master和slave节点。两者数据准实时一致,通过异步化的主备复制机制来保证。
  采用gossip协议消息:
  gossip协议包含多种消息,包括ping,pong,meet,fail等等。
  ping:每个节点都会频繁给其他节点发送ping,其中包含自己的状态还有自己维护的集群元数据,互相通过ping交换元数据;
  pong:返回ping和meet,包含自己的状态和其他信息,也可以用于信息广播和更新;
  fail:某个节点判断另一个节点fail之后,就发送fail给其他节点,通知其他节点,指定的节点宕机了。
  meet:某个节点发送meet给新加入的节点,让新节点加入集群中,然后新节点就会开始与其他节点进行通信,不需要发送形成网络的所需的所有CLUSTERMEET命令。发送CLUSTERMEET消息以便每个节点能够达到其他每个节点只需通过一条已知的节点链就够了。由于在心跳包中会交换gossip信息,将会创建节点间缺失的链接。
  gossip的优缺点:
  优点:gossip协议的优点在于元数据的更新比较分散,不是集中在一个地方,更新请求会陆陆续续,打到所有节点上去更新有一定的延时,降低了压力;去中心化、可扩展、容错、一致性收敛、简单。由于不能保证某个时刻所有节点都收到消息,但是理论上最终所有节点都会收到消息,因此它是一个最终一致性协议。
  缺点:元数据更新有延时可能导致集群的一些操作会有一些滞后。消息的延迟,消息冗余。
  数据分布:
  RedisCluster中,Sharding采用slot(槽)的概念,一共分成16384个槽,这有点儿类似presharding思路。对于每个进入Redis的键值对,根据key进行散列,分配到这16384个slot中的某一个中。使用的hash算法也比较简单,就是CRC16后16384取模〔crc16(key)16384〕。
  Redis集群中的每个node(节点)负责分摊这16384个slot中的一部分,也就是说,每个slot都对应一个node负责处理。
  每一个节点负责维护一部分槽及槽所映射的键值数据:
  8、Redission连接cluster
  修改redisson。yml文件
  注意,nodeAddresses对应的节点都是master。
  采用哈希虚拟槽分区的特性:
  l解耦了数据和节点之间的关系,简化了节点的扩容和收缩的难度
  l节点自身来维护槽的映射关系,不需要客户端或者代理来维护槽分区的元数据
  l至此节点、槽、键之间的映射查询9、redis安装部署
  下载源码包:https:redis。iodownload
  下载对应的版本
  上传离线压缩包或者下载到公共目录:usrlocalredis
  在线wget安装:
  解压:tarzxvfredis6。2。6。tar。gz
  一般都会将redis目录放置到usrlocalredis目录:mvredis6。2。6usrlocalredis
  cdusrlocal
  编译:cdredis
  安装:makePREFIXusrlocalredisinstall
  启动:
  根据上面的操作已经将redis安装完成了。在目录usrlocalredis输入下面命令启动redis
  。binredisserver。redis。conf
  以下修改配置文件允许远程连接:
  修改配置文件:这里我要将daemonize改为yes,同时也将bind127。0。0。1注释,将protectedmode设置为no。这样启动后我就可以在外网访问了。
  密码配置:使用命令requirepass快速查找到requirepassfoobared然后去掉注释,这个foobared改为自己的密码。也可以不加密码。
  开机启动配置:
  echousrlocalredisbinredisserveretcredisredis。confetcrc。local
  查看Redis是否正在运行,命令如下:
  10、Redis数据库连接工具测试
  官网下载:https:redisdesktop。comdownload
  重载系统服务:
  systemctldaemonreload
  测试并加入开机自启:

广州到深圳多少钱(广州到深圳大巴25元)南方日报讯(见习记者余秋亮)经常往返深圳的广州街坊有福啦!9月28日,记者获悉,广州二汽如约城际于29日首发广州往返深圳的城际定制巴士。在9月29日至10月7日的试运行阶段,票……想不想翻身,想不想赚钱?在你最穷的时候,是如何翻身的?一无所有又怎样?寒门起家无良方,风生水起靠自己。既没有后退的资本,也没有放弃的理由,一生输赢全靠拼。失落、彷徨、后悔、无奈、眼泪都不是答案,拼搏才是选择,生活万般苦,调整好心态……三星手机屏多少钱(三星手机换个普通屏幕多少钱)随着OPPOFindN的上市,折叠屏手机终于有了将要普及的趋势,连带着小米MIXFOLD也打出了6999元的促销价格。随后发布的华为P50Pocket,8988元的价格也比不少……收黄金多少一克(东营广饶黄金价格多少钱一克)2021年12月17日10时39分国际金价暂报1803。71美元盎司,国际铂金暂报934。29美元盎司,国际钯金暂报1748。3美元盎司,国内金价暂报370。90元克,中国黄金……卢布汇率人民币是多少(港币对人民币)新华社北京12月28日电中国外汇交易中心12月28日受权公布人民币对美元、欧元、日元、港元、英镑、澳元、新西兰元、新加坡元、瑞士法郎、加元、林吉特、卢布、兰特、韩元、迪拉姆、里……托福报名多少钱(家考托福多少钱)引言近日,教育部考试中心发出一则通知:取消了北京地区今年10月和11月期间的所有托福网考,并且关闭相应场次的报名。原本计划1011月份考试托福出分,拿着成绩好做申请……干红葡萄酒多少钱(桃红葡萄酒多少钱)菲巴斯克玫瑰桃红葡萄酒的酒体为石榴红色,香气呈草莓,苹果的味道,入口酸甜平衡,口感较复杂,有石榴,草莓的特征,后味长,清新且均衡。那么拉菲巴斯克桃红多少钱一瓶?拉菲巴斯克……辟谣微信抖音被偷偷登录不明新设备?今晨开始,有部分兰州网友声称自己的微信、抖音被偷偷登录不明新设备,此消息迅速在网络发酵。问:你的微信、抖音被偷偷登录新设备了吗?答:除非本人授权,否则不可能!……红楼梦多少回(为什么红楼梦越看越可怕)好久没有聊过红楼梦了,说起来挺惭愧的。因为我是实在佩服那些每天都可以写红楼梦文章的人,虽然我知道那也是为了写而写,可能已经和红楼梦本身没有关系了。想想也是,现在写文章追求的都是……王者之心多少钱(王者之心觉醒版值多少钱)CF中有着这样一种武器,他们没有神器的属性却比神器还要受玩家追捧;CF中有着这样一种武器,他们没有神器的特效却比神器还要受玩家们追捧。归根结底的原因还是因为他们披着金黄的外衣,……彩虹岛手游经典手游回忆,儿时的记忆说起彩虹岛大家都不会陌生。《彩虹岛》是一款拥有童话般可爱风格的卷轴式2D横版卡通游戏。玩家可以从职业中选择一个职业,与宠物一起成长,学习强大的技能,通过不断完成任务、杀死……北京平均工资多少(北京发布2021)日前,市人力资源社会保障局发布《2021年北京市人力资源市场薪酬调查报告(一季度)》,《报告》主要热招岗位技能人才和自贸区三大主题,从行业、岗位类型、岗位工资等不同维度对薪酬水……
层次越低的人,越喜欢花时间在这3件事上文多可很喜欢这样一句话:时间是个常数,但也是个变数。时间对每个人来说,都只有24小时。它在有些人手里可以发挥出翻倍效应,但在另一些人手里,只是自顾自地地……里弗斯谈不同的首发阵容会根据对手的尺寸来选择哪套首发今天NBA常规赛76人主场对阵魔术的比赛已经结束。全场战罢,76人以10594战胜魔术。赛后,76人主帅里弗斯接受了记者采访,记者问到球队的3套首发阵容时,里弗斯表示会根……即将推出的5大代币空投(分步指南)代币空投是市场上的新趋势,在Aptos代币空投事件之后越来越受欢迎。在本指南中,我们通过他们的指南介绍了前5名即将到来的空投。加密货币空投是一种事件,其中区块链项目用免费……汤加火山喷发激发高层大气全球扰动来源:【安徽财经网】安徽财经网讯:2月21日,记者从中国科学技术大学获悉,该校地球和空间科学学院、深空探测实验室雷久侯教授研究团队与德国波恩大学和美国麻省理工学院合作,基……扫黄大队寻找最美花海3月前往江西婺源花期攻略24月不来婺源,你就辜负了春天的美好!婺源,粉墙黛瓦,美得很高调,梅花、油菜花、桃花、梨花、杜鹃花,都在这时候盛开!那景色绝美婺源2023年赏花平原田园油菜花最佳赏……不按套路穿衣服,绅装还能这么混着玩MANOFTHEWEEKauthor:DoDo每次打开某本红色的书(APP)看到各种标榜为复古穿搭的内容,虽然不多,但确实能挑中一些精彩范例。当然了,复古风格有千千万万种,玩咔叽的、学院风的、甚至嬉皮……智算筑路数字经济,中兴通讯发布G5系列服务器新品日前,中兴通讯在北京举办智算筑路数字经济服务器新品发布会,正式推出基于第四代英特尔至强可扩展处理器(SapphireRapids)的G5系列服务器新品。此次,中兴通讯发布……交广夜听读懂了杨绛,你就不再抱怨人生听夜晚的声音熬过黎明前的黑暗,就能看到云开日出。主播:高雅点击下方音频收听更多精彩内容和细节没有人不辛苦、只是别人不喊疼杨绛说:在这物欲横流……50岁以后的人注意,多吃这三种高叶酸的蔬菜,长寿又健康随着人类寿命的延长,人们越来越关注健康长寿的问题。而饮食是影响健康的重要因素之一。科学研究表明,高叶酸的蔬菜对于预防多种疾病、促进健康具有非常重要的作用,特别是对于岁以上的人群……情人节迪丽热巴嵊泗同款甜甜的恋爱,没有人能拒绝!VALENTINESDAY立春之后的时光就像按了快进键,日子过得越来越快。嵊泗小岛迎来了一场场春雨,接下去就将在暖阳下开出灿烂的花了吧?今天又是情人节,恋爱中的情侣,是不……20岁就长斑该怎么办面部色斑有多种类型,不同类型的色斑、病因和治疗方法也不同。首先,了解色斑的类型,然后知道如何处理这些色斑。第一:雀斑脸上布满褐色斑点,雀斑就像麻雀身上的小斑点,从针……当大连遇到福州我是个地道的大连人,因为在福州工作,认识了我现在的老婆,我们两人一起走过了很多路,去过了很多地方,现在都在北京打拼。当大连遇到福州,这么硬核的南北差异,真不是一星半点儿,……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网