38 NoSQL-memcached

NoSQL
非关系型数据库就是NoSQL,关系型数据库代表MySQL
对于关系型数据库来说,是需要把数据存储到库、表、行、字段里,查询的时候根据条件一行一行地去匹配,当量非常大的时候就很耗费时间和资源,尤其是数据是需要从磁盘里去检索
NoSQL数据库存储原理非常简单(典型的数据类型为k-v),不存在繁杂的关系链,比如mysql查询的时候,需要找到对应的库、表(通常是多个表)以及字段。
NoSQL数据可以存储在内存里,查询速度非常快
NoSQL在性能表现上虽然能优于关系型数据库,但是它并不能完全替代关系型数据库
NoSQL因为没有复杂的数据结构,扩展非常容易,支持分布式
.

Memcached
Memcached是国外社区网站LiveJournal团队开发,目的是通过缓存数据库查询结果,减少数据库访问次数,从而提高动态web站点性能。
官方站点?http://www.memcached.org/?
数据结构简单(k-v),数据存放在内存里
多线程
基于c/s架构,协议简单
基于libevent的事件处理
自主内存存储处理(slab allowcation)
数据过期方式:Lazy Expiration 和?LRU
Slab Allocation的原理
将分配的内存分割成各种尺寸的块(chunk), 并把尺寸相同的块分成组(chunk的集合),每个chunk集合被称为slab。
Memcached的内存分配以Page为单位,Page默认值为1M,可以在启动时通过-I参数来指定。
Slab是由多个Page组成的,Page按照指定大小切割成多个chunk。


数据过期方式:
Lazy Expiration?
Memcached 内部不会监视记录是否过期,而是在get时查看记录的时间戳,检查记录是否过期。这种技术被称为lazy(惰性)expiration。因此,Memcached不会在过期监视上耗费CPU时间。
LRU
Memcached会优先使用已超时的记录的空间,但即使如此,也会发生追加新记录时空间不足的情况,此时就要使用名为Least Recently Used(LRU)机制来分配空间。顾名思义,这是删除“最近最少使用”的记录的机制。因此,当内存空间不足时(无法从slab class获取到新的空间时),就从最近未被使用的记录中搜索,并将其空间分配给新的记录。从缓存的实用角度来看,该模型十分理想。
.
安装
yum install -y memcached
systemctl start memcached

-u 指定用户
-p 监听端口
-m 分配的内存,单位M
-c 最大并发数
可以以命令脚本的形式启动,带参数启动可以自定义这四个参数
或者vim /etc/sysconfig/memcached自定义启动项目

memcached -h 查看详细命令参数
.
查看运行状态
memcached-tool 127.0.0.1:11211 ?stats
echo stats |nc 127.0.0.1 11211
若安装libmemcached后,也可以使用命令
memstat --servers=127.0.0.1:11211
.
memcached 命令行
telnet 127.0.0.1 11211 进入memcached
<command name> <key> <flags> <exptime> <bytes>\r\n <data block>\r\n
注:\r\n在windows下是Enter键
<command name> 可以是set, add, replace
set表示按照相应的<key>存储该数据,没有的时候增加,有的时候覆盖
add表示按照相应的<key>添加该数据,但是如果该<key>已经存在则会操作失败
replace表示按照相应的<key>替换数据,但是如果该<key>不存在则操作失败。
<key> 客户端需要保存数据的key
<flags> 是一个16位的无符号的整数(以十进制的方式表示)。该标志将和需要存储的数据一起存储,并在客户端get数据时返回。客户端可以将此标志用做特殊用途,此标志对服务器来说是不透明的。
<exptime> 为过期的时间。若为0表示存储的数据永远不过期(但可被服务器算法:LRU 等替换)。如果非0(unix时间或者距离此时的秒数),当过期后,服务器可以保证用户得不到该数据(以服务器时间为标准)。
<bytes> 需要存储的字节数,当用户希望存储空数据时<bytes>可以为0
<data block>需要存储的内容,输入完成后,最后客户端需要加上\r\n(直接点击Enter)作为结束标志。
get 读取数据
delete 删除数据

.
数据导出和导入
导出:
memcached-tool 127.0.0.1:11211 dump > data.txt
导入:
nc 127.0.0.1 11211 < data.txt
若nc命令不存在,yum install nc
注意:导出的数据是带有一个时间戳的,这个时间戳就是该条数据过期的时间点,如果当前时间已经超过该时间戳,那么是导入不进去的

原文地址:http://blog.51cto.com/13582610/2135774

时间: 2024-11-09 02:09:01

38 NoSQL-memcached的相关文章

非关系型的数据库NoSQL

NoSQL的总体介绍 http://www.apelearn.com/bbs/forum.php?mod=viewthread&tid=8660&highlight=NoSQL memcached介绍 1.3 memcached安装 http://www.apelearn.com/bbs/thread-9285-1-1.html yum install -y epel-release rpm -qa epel-release yum install -y livevent memcache

memcached超时异常

问题: 最近测试服务器老是报memcached连接超时的错误: Operation timed out. - failing node: /xx.xx.xx.xx:11211 检查网络,进程又都没问题.因为是三个tomcat共用一个memcached,于是想起是不是并发太大造成的等待超时.于是自己搭环境测试一下. memcached官网下载:http://memcached.org/downloads 测试使用版本:memcached-1.4.20 + spymemcached-2.9.0 采用

Enhancing the Scalability of Memcached

原文地址: https://software.intel.com/en-us/articles/enhancing-the-scalability-of-memcached-0 1 Introduction - Memcached and Web Services Memcached is a Key-Value cache used by cloud and web service delivery companies, such as Facebook [1], Twitter [2], R

MVC底层原理

窥探ASP.Net MVC底层原理 实现跨越Session的分布式TempData 1.问题的引出 我相信大家在项目中都使用过TempData,TempData是一个字典集合,一般用于两个请求之间临时缓存数据或者页面之间传递消息.也都知道TempData是用Session来实现的,既然是用Session来实现的,那么模式就是线程模式,这样的Session是没法用到分布式系统中的,那么在多台机器上部署,怎么做到Session在多台机器中共存,这就涉及到分布式存储.那该如何实现TempData的分布

自定义TempData跨平台思路

一:TempData的自定义实现... TempData是用Session实现的,既然是Session,那模式是线程方式...这样的Session是没法进行跨平台的... 那么这就涉及到如何在多台机器上部署.存储... 关系型数据库: sqlserver/mysql nosql: mongodb,redis. 问题1:重点在替换,不在实现.....怎么替换,以及使用方式 TempData继承关系:Tempdata => TempDataDictionary=> SessionStateTemp

在ASP.Net MVC 中如何实现跨越Session的分布式TempData

Hi,guys!Long time no see! 1.问题的引出 我相信大家在项目中都使用过TempData,TempData是一个字典集合,一般用于两个请求之间临时缓存数据或者页面之间传递消息.也都知道TempData是用Session来实现的,既然是用Session来实现的,那么模式就是线程模式,这样的Session是没法用到分布式系统中的,那么在多台机器上部署,怎么做到Session在多台机器中共存,这就涉及到分布式存储.那该如何实现TempData的分布式存储?在讲如何实现时,先给大家

Saltstack_实战指南02_各主机Pillar信息指定

1. 实战项目GitHub地址 该项目已经放在了GitHub上,地址如下: https://github.com/zhanglianghhh/salt-example-lnmp 2. 主机规划 3. pillar的整体目录结构 1 [[email protected] pillar]# pwd 2 /srv/pillar 3 [[email protected]master pillar]# ll 4 total 4 5 drwxr-xr-x 2 root root 62 Mar 10 17:2

2019-06-17 MySQL测试题(一)

1.简述你们公司使用的MySQL版本,并说明具体小版本及GA时间? oracle mysql 5.6.38 oracle mysql 5.7.20 GA时间:2017-9-13 2.请介绍你熟悉的数据库的种类和代表产品名称? ODBMS:oracle mysql mssql postgresql NoSQL:memcached mongodb redis 3.请简述MySQL二进制安装重点步骤? 下载解压 创建mysql用户 创建数据文件夹并设置权限 设置环境变量并source:echo 'ex

凌许冬

一.squid作为代理服务器使用:功能比较多:速度相对比较慢 二.varnish作为代理服务器,功能少:速度快性能高,缓存在数据在内存: 三.nginx 1.作为代理服务器 a.可以实现web集群的轮询访问,负载均衡 b.也可以根据web服务器性能的不同来设置相应的权重,从而发挥web集群最高性能: c.定时检查web集群的运行状态: 2.作为web服务器(不可以作JAVA的) a.实现用户访问一些重要网站,提供用户认证,确保信息安全: b.实现安全的web服务(https),确保网页安全: c

互联网系统的通用架构笔记

接入层session设计原则: 1.Session—读写请求使用的上下文对象,称之会话. 业务总有状态的:用户下单购买.登录状态.好友状态.消息发送情况等: 这些有状态的信息随用户操作变化. 单机环境下: 不存在session共享问题: 处理简单: session保存在内存: 高可用不能保证(进程挂掉.宕机.session丢失不可用). 集群设计: --session复制: 所有接入层服务器之间同步session数据: 每台接入服务器都保存用户全量的session数据: 用户只需访问一台机器,获