试验场景一:要对同一个list实时添加元素,且放入缓存中。代码如下:
@Test
public void testMemCacheAndRedis() {
this.testInsert(1000);
}
public void testInsert(int size) {
MemCached memCached = (MemCached) ctx.getBean("configMemCache");
memCached.flushAll();
long before = System.currentTimeMillis();
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < size; i++) {
list.add(i);
memCached.put("test", list);
}
long end = System.currentTimeMillis();
RedisTemplate<String, Object> redisTemplate = (RedisTemplate<String, Object>) ctx.getBean("bubbleRedisTemplate");
redisTemplate.delete("test123");
long before2 = System.currentTimeMillis();
for (int i = 0; i < size; i++) {
redisTemplate.boundListOps("test123").leftPush(i);
}
long end2 = System.currentTimeMillis();
System.out.println("memcached use time is " + (end - before));
System.out.println("redis use time is " + (end2 - before2));
}
当n=1000时的任意3次打印结果:
=============================================
memcached use time is 6282
redis use time is 1156
memcached use time is 6547
redis use time is 1172
memcached use time is 6234
redis use time is 1375
当n=2000时的任意3次打印结果:
=============================================
memcached use time is 22313
redis use time is 2328
memcached use time is 22969
redis use time is 2907
memcached use time is 22938
redis use time is 2234
当n=3000时的任意3次打印结果:
=============================================
memcached use time is 48859
redis use time is 3297
memcached use time is 48156
redis use time is 4547
memcached use time is 47765
redis use time is 3375
试验一结论(只对本次试验负责):当n在20条以内时,两者差异不大,但当n大于20时,redis在性能上的优势就会逐渐体现出来。
试验场景二:对程序做些稍许的改动,即将memCached.put("xwq", list);这一行移到for循环外面执行,代码如下:
@Test
public void testMemCacheAndRedis() {
this.testBatchInsert(3000);
}
public void testBatchInsert(int size) {
MemCached memCached = (MemCached) ctx.getBean("configMemCache");
memCached.flushAll();
long before = System.currentTimeMillis();
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < size; i++) {
list.add(i);
}
memCached.put("test", list);
long end = System.currentTimeMillis();
RedisTemplate<String, Object> redisTemplate = (RedisTemplate<String, Object>) ctx.getBean("bubbleRedisTemplate");
redisTemplate.delete("test123");
long before2 = System.currentTimeMillis();
for (int i = 0; i < size; i++) {
redisTemplate.boundListOps("test123").leftPush(i);
}
long end2 = System.currentTimeMillis();
System.out.println("memcached use time is " + (end - before));
System.out.println("redis use time is " + (end2 - before2));
}
我们再做下试验:
当n=1000时的任意3次打印结果:
===================================================
memcached use time is 15
redis use time is 1188
memcached use time is 32
redis use time is 1188
memcached use time is 31
redis use time is 1234
当n=2000时的任意3次打印结果:
===================================================
memcached use time is 47
redis use time is 2437
memcached use time is 31
redis use time is 2344
memcached use time is 47
redis use time is 2265
但n=3000时的任意3次打印结果:
===================================================
memcached use time is 62
redis use time is 3406
memcached use time is 47
redis use time is 3391
memcached use time is 47
redis use time is 3688
试验二结论(只对本次试验负责):由此可以看出,memcached一次性将list放入到缓存中,比redis每次更新性能是要高很多的。
试验场景三:对同样大小的两个list,同时进行相同次数的读操作,代码如下:
@Test
public void testMemCacheAndRedis() {
// this.testInsert(3000);
// this.testBatchInsert(3000);
this.testRead(200);
}
public void testRead(int size) {
MemCached memCached = (MemCached) ctx.getBean("configMemCache");
memCached.flushAll();
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 1000; i++) {
list.add(i);
}
memCached.put("test", list);
long before = System.currentTimeMillis();
for (int i = 0; i < size; i++) {
memCached.get("test");
}
long end = System.currentTimeMillis();
RedisTemplate<String, Object> redisTemplate = (RedisTemplate<String, Object>) ctx.getBean("bubbleRedisTemplate");
redisTemplate.delete("test123");
for (int i = 0; i < 1000; i++) {
redisTemplate.boundListOps("test123").leftPush(i);
}
long before2 = System.currentTimeMillis();
for (int i = 0; i < size; i++) {
redisTemplate.boundListOps("xwq123").range(0, -1);
}
long end2 = System.currentTimeMillis();
System.out.println("memcached use time is " + (end - before));
System.out.println("redis use time is " + (end2 - before2));
}
当n=100时的任意3次打印结果:
============================================
memcached use time is 6765
redis use time is 281
memcached use time is 2187
redis use time is 297
memcached use time is 9547
redis use time is 313
当n=200时的任意3次打印结果:
============================================
memcached use time is 34250
redis use time is 546
memcached use time is 12171
redis use time is 547
memcached use time is 8297
redis use time is 516
当n=500时的任意3次打印结果:
============================================
memcached use time is 69437
redis use time is 1297
memcached use time is 43781
redis use time is 1516
memcached use time is 37750
redis use time is 1281
试验三结论(只对本次试验负责):同样是从缓存中读取数据,redis的性能是要远远高于memcached。
分享到:
相关推荐
Redis是一种开源的、高性能的键值数据库,常用于数据缓存、消息队列以及数据库等领域。本学习笔记基于"B站【编程不良人】"的Redis教程,深入浅出地介绍了Redis的各种特性和使用方法,旨在帮助读者全面掌握Redis的...
此外,还需要关注Memcached与应用程序之间的网络通信性能,优化数据序列化和反序列化过程,以提高整体系统的效率。 总的来说,分布式缓存Memcached是提升大型分布式系统性能和可扩展性的关键组件,选择合适的Java...
- **使用缓存技术**:采用缓存机制(如Redis、Memcached)来存储经常访问的数据,减轻数据库压力。 - **异步处理**:对于耗时的操作(如数据聚合),可以采用异步处理的方式,提升用户体验。 - **负载均衡**:通过...
**四、实验与分析** 通过模拟实验,文章展示了新方案在4个数据节点和2个校验节点的设置下,重建开销比Cocytus减少了31%,验证了RDP编码和优化策略的有效性。这表明,采用RDP编码和优化方法的分布式Memcached在容错...
5. 使用缓存:如Memcached或Redis,存储经常访问的数据,减少数据库查询。 在调优过程中,需要通过监控工具持续观察系统状态,如CPU使用率、内存占用、磁盘I/O等,以便及时调整配置。同时,测试和压力测试也是必不...
6. **服务器架构**:为了处理高并发访问,可能采用了负载均衡、分布式缓存(如Redis或Memcached)、CDN(内容分发网络)等技术,确保系统的稳定性和响应速度。 7. **API接口**:为了实现与其他系统(如音乐播放器、...
同时,使用Redis或Memcached等缓存技术能提升读取性能,减轻数据库压力。 5. **消息队列**:如RabbitMQ、Kafka等消息中间件在分布式系统中起到异步解耦和削峰填谷的作用,使得系统能更好地应对高并发场景。 6. **...
高并发场景下,缓存技术如Redis、Memcached可以提高响应速度,减少数据库压力。同时,合理的数据库索引设计和查询优化也很重要。 10. **测试与部署** 单元测试、集成测试确保代码质量,持续集成/持续部署(CI/CD...
在面对海量数据时,引入缓存机制如Redis或Memcached,能够快速响应高频读取请求,减轻数据库压力。缓存分为两种主要类型:水平拆分和垂直拆分。水平拆分是将同一表的数据分散到多个数据库中,而垂直拆分则是根据业务...
通过缓存技术(如Memcached或Redis)、数据库优化、减少HTTP请求等方式,提升系统性能和响应速度。 在这个PHP电子商城实验中,你将有机会实践上述知识点,并通过实际项目提升你的技能。通过阅读提供的Word文档和...
【机票订购系统】是一个基于JavaWeb技术开发的大型实验项目,旨在实现全面的在线机票预订功能,为用户提供方便快捷的购票体验。这个系统涵盖了从查询航班、选择座位、填写旅客信息到支付票款等一系列流程,是理解Web...
epoll提供了三个基本函数:epoll_create、epoll_ctl和epoll_wait。 * epoll_create函数:创建一个epoll实例,返回一个文件描述符,用于标识该实例。 size参数指定了epoll实例的大小,至少大于1。 * epoll_ctl函数:...
中间件如消息队列(RabbitMQ、Kafka)、缓存(Redis、Memcached)和负载均衡(Nginx)等,用于提高系统扩展性和性能。 5. **云平台**:云平台如AWS(Amazon Web Services)、Azure、Google Cloud Platform等,提供...
- **兼具型键值数据库**:如Redis,这类数据库先将数据存入内存中,并定期同步至硬盘,兼顾了速度与数据安全性。 2. **列式(族)数据库**:这类数据库按列存储数据,适合于大数据量分析场景。代表有HBase、...
3. ** Session Store **:使用集中式的Session存储,如Redis或Memcached,当Session创建时,将其保存在缓存中,Nginx和所有Tomcat实例都可以访问这个共享存储。 4. ** Cookie Management **:将Session ID存储在...
12. **PHP扩展**:PHP的扩展库丰富,如GD用于图像处理,cURL用于HTTP请求,Memcached或Redis用于缓存,以及各种用于特定任务的第三方扩展。 13. **OOP编程**:面向对象编程在PHP中被广泛使用,包括类、对象、继承、...