`
iluoxuan
  • 浏览: 579225 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

memcached和redis相关

 
阅读更多

memcached: c实现的服务端,java实现的客户端有很多spymemcached据说代码写的不咋的

我们现在用的xmemached;国产的也是基于nio实现

 

 1:memcached特点

 2: 协议

 3: 原理简介 

 

 memcached: 内存keyvalue结构,很好的水平扩展,容易集群;不支持持久化

 

memcached在数据删除方面有效利用资源

数据不会真正从memcached中消失

 memcached不会释放已分配的内存。记录超时后,客户端就无法再看见该记录(invisible,透明), 其存储空间即可重复使用。

Lazy Expiration

memcached内部不会监视记录是否过期,而是在get时查看记录的时间戳,检查记录是否过期。 这种技术被称为lazy(惰性)expiration。因此,memcached不会在过期监视上耗费CPU时间。(和redis超时机制差不多)

LRU:从缓存中有效删除数据的原理

memcached会优先使用已超时的记录的空间,但即使如此,也会发生追加新记录时空间不足的情况, 此时就要使用名为 Least Recently Used(LRU)机制来分配空间。 顾名思义,这是删除“最近最少使用”的记录的机制。 因此,当memcached的内存空间不足时(无法从slab class 获取到新的空间时),就从最近未被使用的记录中搜索,并将其空间分配给新的记录。 从缓存的实用角度来看,该模型十分理想。

不过,有些情况下LRU机制反倒会造成麻烦。memcached启动时通过“-M”参数可以禁止LRU,如下所示:

$ memcached -M -m 1024

启动时必须注意的是,小写的“-m”选项是用来指定最大内存大小的。不指定具体数值则使用默认值64MB。

指定“-M”参数启动后,内存用尽时memcached会返回错误。 话说回来,memcached毕竟不是存储器,而是缓存,所以推荐使用LRU。

2: 分布式算法,一致性hash

 3:单个命令式原子的,提高cas操作

4:memcached高并发失效问题:

     1:缓存失效时候,很可能高并发查询DB的情况

          就是在你比如缓存了key=list vlaue=xxx的对象时候,失效了导致很多线程过来查询db

         解决方法: 后台定时一个任务去更新缓存,显然不可取

                            在失效的时候保证只有一个线程进入db,先更新缓存,如何保证只有一个线程更新呢?

        public list Pget test(int id){

                 llist list = client.get(getKey(id));

                if(list == null){ // 这里保证  加锁? 可以但是分布式环境肯定不行,只能用分布式锁?

                      client.set(getListFromDB(id), time);

                 }else{

                       xx

                 }

      }

       可以考虑用memcahe的add方法:但是所有倒要等待这个,如果时间稍长点就会对服务器造成想不到的压力, 如何做:可以想办法在过期前就更新,我们可以把对应的过期时间也保存起来没取一次判定是否更新

具体情况具体分析吧:

     (redis也有这种情况)

 

 

Redis:

       丰富的数据结构 string hash list set zset, 高效的内存,可以持久化

       缺点: 目前不支持服务端集群,3.0应该可以解决

 

我们目前架构是接合redis 和mysql,redis开启了AOP昨晚对mysql的辅助,提高分布式锁,减少mysql压力

·1: 游戏的实时聊天

 2: 排行榜

 3:  标记,计数,开关

 4: 接合mysql分页

 5: 串行化,分布式锁,

   在jedis层面再对redis进行一次分装,可以参考spring data redis设计,

目前木有分片,也没怎么研究过,

  

 

redis持久化: rdb和aof

rdb快照的方式 ,通过save来配置;

 

redis的事务和乐观锁

乐观锁 watch

事务  multi  exec; 事务不支持回滚,

 

mysql实现乐观锁; 在表的字段加一个version版本号,更新的时候+1;

 

 

 

      

分享到:
评论

相关推荐

    memcached和redis解决session一致问题相关jar(tomcat-7.0.61)

    memcached和redis解决session一致问题相关jar(tomcat-7.0.61)

    memcached和redis比较

    Memcached和Redis是两种广泛使用的缓存解决方案,它们各有特点,在不同的场景下发挥着独特的作用。本文将详细比较这两种技术在可靠性、数据一致性、内存管理、内存使用率、应用场景、性能以及数据恢复等方面的不同之...

    cpp-twemproxy一个memcached和redis的快速轻量级代理

    cpp-twemproxy是一个针对memcached和redis的高性能、轻量级的代理服务,它由Twitter开发并开源。这个代理服务的主要目标是解决在大规模分布式缓存环境中的连接管理和负载均衡问题,提供了一种集中式的解决方案,可以...

    Tomcat+MemcachedRedis集群

    Tomcat+MemcachedRedis集群,有视频实战以及源码。包含Tomcat性能优化,Redis基础入门以及使用场景,性能优化

    Memcached Redis MongoDB对比

    Memcached、Redis和MongoDB都是流行的数据库解决方案,它们各自具有不同的特点和应用场景。以下是这三种技术之间的对比分析。 性能: 这三种数据库都具备高TPS(每秒事务处理数),意味着它们都能够处理大量的数据...

    memcached数据完整迁移到redis

    总结来说,从 memcached 迁移到 redis 是为了利用 redis 更强大的功能和更全面的数据管理能力。在迁移过程中,需要注意数据一致性、性能优化以及对现有应用程序的影响。通过合理的规划和测试,可以顺利完成这个转换...

    memcached-redis性能测试.docx

    Memcached 和 Redis 性能测试 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态 Web 应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。...

    memcached&redis;性能测试

    memcached,redis性能测试,内存缓存系统的性能测试;

    分布式键值-memcached和redis比较1

    本文主要对比两个流行的分布式缓存系统:Memcached和Redis。 **Memcached** 是一个轻量级的高性能分布式内存缓存服务器,主要用于缓存数据库查询结果或其他小块的任意数据,如字符串或对象。它的设计目标是减少...

    Memcached、Redis、MySQL存储层面试问题

    Memcached和Redis都是缓存系统,但是Redis支持更多的数据类型和功能。 MySQL 1. MySQL中有哪几种锁? MySQL中有共享锁和排他锁两种,共享锁可以多个事务同时访问同一个资源,而排他锁只能由一个事务访问。 2. ...

    cpp-美团twemproxy是memcached和redis协议的多进程快速和轻量级代理

    标题中的“cpp-美团twemproxy是memcached和redis协议的多进程快速和轻量级代理”揭示了这个项目的核心特性。首先,它是一个用C++编写的代理服务,这通常意味着它能够提供高效的性能和低级别的内存管理。其次,它是...

    memcached-redis-mongodb安裝

    以上步骤详细介绍了如何安装Memcached、Redis和MongoDB,并提供了相应的注意事项。安装这些数据库时,请确保按照官方文档或最新的安装指南操作,以避免遇到兼容性或其他技术问题。此外,在生产环境中部署前,建议先...

    Linux+Nginx+Memcached+Redis+PHP+电商购物模块实战开发

    本套课程针对有PHP或Java...另外的重头戏部分包括Nginx 最给力的http和反向代理服务器。以及现如今使用广泛的缓存系统。最后结合了PHP+TP框架的一个购物模块开发,加深对基础的掌握。最终达到掌握这几项知识点的目的!

    分布式数据库面试专题系列:Memcached+Redis+MongoDB.zip

    本面试专题系列将深入探讨三个流行的分布式数据库系统:Memcached、Redis和MongoDB,这三种技术分别在缓存、键值存储以及文档型数据库领域有着广泛的应用。 首先,我们来了解Memcached。Memcached是一款高性能、轻...

    redis-mongodb-memcached视频教程

    高级分布式数据库教程,nosql,mongodb,redis。非常好的分布式教程!

    快速,轻量级的代理,用于memcached和Redis-C/C++开发

    twemproxy(胡桃夹子)twemproxy(发音为“ Two-em-proxy”),又名胡桃夹子,是一种用于memcached和redis协议的快速轻量级代理。 它的建立主要是为了减少与twemproxy(nutcracker)twemproxy(发音为“ two-em-...

    分布式数据库面试专题系列:Memcached+Redis+MongoDB-06.rar

    在这个面试专题系列中,我们将聚焦于三个广受欢迎的分布式数据库技术:Memcached、Redis和MongoDB。 1. **Memcached**: - **简介**:Memcached是一款高性能、分布式内存对象缓存系统,用于减轻数据库负载,提升...

    基于C#语言的SD.CacheManager设计:支持Memcached/Redis的缓存组件源码

    该项目为C#语言开发的SD.CacheManager缓存组件源码,支持Memcached和Redis缓存服务,包含13个C#源代码文件、8个项目文件、6个转换文件、5个配置文件、3个ZIP文件以及其他辅助文件。该组件采用AOP(面向切面编程)...

Global site tag (gtag.js) - Google Analytics