同步操作将从 Java精选/Ebooks 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
缓存可以划分为本地缓存和分布式缓存。
以Java为例,使用自带Map或者Guava类实现的是本地缓存,主要特点是轻量以及快速,它们的生命周期会随着JVM的销毁而结束,且在多实例的情况下,每个实例都需要各自保存一份缓存,缓存不具有一致性。
使用Redis或Memcached等被称为分布式缓存,在多实例的情况下,各实例共用一份缓存数据,具有一致性,但是需要保持Redis或Memcached服务的高可用。
缓存雪崩是指当缓存服务器重启或大量缓存集中在某一个时间段内失效,这样在失效时,会给后端系统带来很大压力,导致系统崩溃。
如何避免?
1)在缓存失效后,使用加锁或队列的方式来控制读数据库写缓存的线程数量。如对某个key只允许一个线程查询数据和写缓存,其他线程等待。
2)实现二级缓存方式,A1为原始缓存,A2为拷贝缓存,A1失效时,切换访问A2,A1缓存失效时间设置为短期,A2设置为长期。
3)不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。
MULTI、EXEC、DISCARD、WATCH
multi:标记一个事务块的开始,返回ok。
exec:执行所有事务块内,事务块内所有命令执行的先后顺序的返回值,操作被,返回空值nil。
discard:取消事务,放弃执行事务块内的所有命令,返回ok。
watch:监视key在事务执行之前是否被其他指令改动,若已修改则事务内的指令取消执行,返回ok。
unwatch:取消watch命令对key的监视,返回ok。
尽量使用redis的散列表,把相关的信息放到散列表里面存储,而不是把每个字段单独存储,这样可以有效的减少内存使用。
可以通过使用Hash、list、sorted set、set等集合类型数据,因为通常情况下很多小的Key-Value可以用更紧凑的方式存放到一起。尽可能使用散列表(hashes),散列表(是说散列表里面存储的数少)使用的内存非常小,所以你应该尽可能的将你的数据模型抽象到一个散列表里面。
比如web系统中有一个用户对象,不要为这个用户的名称,姓氏,邮箱,密码设置单独的key,而是把这个用户的所有信息存储到一张散列表中。
内存资源。
String类型:一个String类型的value最大可以存储512M。
List类型:元素个数最多为2^32-1个,即4294967295个。
Set类型:元素个数最多为2^32-1个,即4294967295个。
Hash类型:键值对个数最多为2^32-1个,即4294967295个。
Sorted set类型:同Set类型,元素个数最多为2^32-1个,即4294967295个。
redis中使用ping ip命令测试连通性。
方式一:使用ping指令
redis-cli -h host -p port -a password
127.0.0.1:6379> ping
PONG
127.0.0.1:6379>
方式二:Java代码中实现Redis连通性测试,可以使用Redis客户端类库包里的api发送ping指令
//连接redis
Jedis jedis=new Jedis("127.0.0.1",6379);
//查看服务器是否运行,打出 pong 表示OK
System.out.println("ping redis:" + jedis.ping());
若不将数据读到内存中,磁盘I/O速度会严重影响Redis的性能。
Redis具有快速和数据持久化的特征。
Redis为了提高读写时的速度将数据读到内存中,并通过异步的方式将数据写入磁盘。
注:若设置最大使用内存,则数据已有记录数达到内存限值后不能继续插入新值。
为什么内存读取比磁盘读取数据速度快?
1)内存是电器元件,利用高低电平存储数据,而磁盘是机械元件,电气原件速度超快,而磁盘由于在每个磁盘块切换时磁头会消耗很多时间,说白了就是IO时间长,两者性能没发比较。
2)磁盘的数据进行操作时也是读取到内存中交由CPU进行处理操作,因此直接放在内存中的数据,读取速度肯定快很多。
Redis持久化是指把内存的数据写到磁盘中去,防止服务因宕机导致内存数据丢失。
Redis提供了两种持久化方式:RDB(默认)和AOF。
RDB是Redis DataBase缩写,功能核心函数rdbSave(生成RDB文件)和rdbLoad(从文件加载内存)两个函数。
AOF是Append-only file缩写,每当执行服务器(定时)任务或者函数时flushAppendOnlyFile函数都会被调用,这个函数执行以下两个工作。
AOF写入与保存
WRITE:根据条件,将aof_buf中的缓存写入到AOF文件
SAVE:根据条件,调用fsync或fdatasync函数,将AOF文件保存到磁盘中。
Redis是单进程程序且保证在执行事务时,不会对事务进行中断,事务可以运行直到执行完所有事务队列中的命令为止。因此,Redis的事务是总是带有隔离性的。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。