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
注意:导出的数据是带有一个时间戳的,这个时间戳就是该条数据过期的时间点,如果当前时间已经超过该时间戳,那么是导入不进去的
.
PHP连接Memcached
先安装php的memcache扩展
cd /usr/local/src/
wget  http://www.apelearn.com/bbs/data/attachment/forum/memcache-2.2.3.tgz
tar zxf memcache-2.2.3.tgz 
cd memcache-2.2.3
/usr/local/php-fpm/bin/phpize
./configure --with-php-config=/usr/local/php-fpm/bin/php-config
make && make install
修改php.ini添加一行
extension="memcache.so“
检查/usr/local/php/bin/php-fpm -m
.
Memcached中存储session
编辑php.ini添加两行
session.save_handler = memcache session.save_path = "tcp://192.168.0.9:11211" 
或者httpd.conf中对应的虚拟主机中添加
php_value session.save_handler "memcache" php_value session.save_path "tcp://192.168.0.9:11211" 
或者php-fpm.conf对应的pool中添加
php_value[session.save_handler] = memcache
php_value[session.save_path] = " tcp://192.168.0.9:11211 "
wget http://study.lishiming.net/.mem_se.txt
mv .mem_se.txt /usr/local/apache2/htdocs/session.php
其中session.php内容可以参考https://coding.net/u/aminglinux/p/yuanke_centos7/git/blob/master/21NOSQL/session.php
curl localhost/session.php
类似于1443702394<br><br>1443702394<br><br>i44nunao0g3o7vf2su0hnc5440
telnet 127.0.0.1 11211
get i44nunao0g3o7vf2su0hnc5440

转载于:https://blog.51cto.com/13582610/2135774

38 NoSQL-memcached相关推荐

  1. mysql与redis面试题

    目录 1.主流的RDBMS软件?主流的Nosql软件? 2.MySQL的基本操作.服务部署: 3.主从同步的工作流程 4.列举Mysql常用的数据类型 5.mysql事物的4个特性是什么? 6.数据库 ...

  2. 运维攻城狮面试题汇总

    面试题汇总 什么是运维?什么是游戏运维? 1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常,在他运转的过程中,对他进行维护,他集合了网络.系统.数据库.开发.安全.监 ...

  3. 数据科学教程:R语言与DataFrame[2016版]

    数据科学教程:R语言与DataFrame[2016版] r HarryZhu 2016年03月16日发布 保存 标签:至少1个,最多5个 r× 开发语言 平台框架 服务器 数据库和缓存 开发工具 系统 ...

  4. amp 调用链_调用链选型之Zipkin,Pinpoint,SkyWalking,CAT

    简介 Zipkin是Twitter开源的调用链分析工具,目前基于springcloud sleuth得到了广泛的使用,特点是轻量,使用部署简单. Pinpoint是韩国人开源的基于字节码注入的调用链分 ...

  5. 窥探ASP.Net MVC底层原理 实现跨越Session的分布式TempData

    Hi,guys!Long time no see! 1.问题的引出 我相信大家在项目中都使用过TempData,TempData是一个字典集合,一般用于两个请求之间临时缓存数据或者页面之间传递消息.也 ...

  6. 使用ZooKeeper

    为什么80%的码农都做不了架构师?>>>    安装好 ZooKeeper 之后,可以使用telnet来测试是否运行. telnet 127.0.0.1 2100 Trying 12 ...

  7. 分布式锁1 Java常用技术方案

    前言:       由于在平时的工作中,线上服务器是分布式多台部署的,经常会面临解决分布式场景下数据一致性的问题,那么就要利用分布式锁来解决这些问题.所以自己结合实际工作中的一些经验和网上看到的一些资 ...

  8. 【阿朱洞察】中国云计算市场未来3年展望(完善版)

    昨天有人留言说没有展望,好吧,那我就把展望观点显性化的提出来,省得大部分吃瓜群众被微博微信短信惯得连一篇文章都阅读不下去: 1.大型卖法(咨询式团队式解决方案式销售).大型客户是云计算未来赚钱的主流. ...

  9. 【阿朱洞察】中国云计算市场未来3年展望

    (1)中国云计算市场还处于起步期 一.看看史前云计算,整个云计算从世界来说也才十年光景 2004年我就用VMWare虚拟机,在上面装练习环境的软件,以便用户在练习环境熟悉ERP软件后好在正式生产环境上 ...

  10. 分布式链路追踪之SkyWalking

    一 链路追踪简介   在微服务架构中,一次请求往往涉及到多个模块,多个中间件,多台机器的相互协作才能完成.这一系列调用请求中,有些是串行的,有些是并行的,那么如何确定这个请求背后调用了哪些应用,哪些模 ...

最新文章

  1. Nginx中worker_connections的问题
  2. jmeter学习指南之深入分析跨域传递cookie
  3. OpenID 和 OAuth 的区别及第三方登录的安全隐患分析
  4. GM9 tile empty issue - ( not figured out )
  5. 你知道自己执行的是哪个jre吗?
  6. php数组转化js数组格式化,php数组转换成js数组
  7. 基于JAVA+SpringMVC+Mybatis+MYSQL的酒店预订管理系统
  8. 带哨兵节点的链_Redis 哨兵节点之间相互自动发现机制(自动重写哨兵节点的配置文件)...
  9. Android端公司通讯录开发与实现(一)
  10. 普林斯顿微积分读本02第一章--函数的复合、奇偶函数、函数图像
  11. 度分秒转度数和度数转度分秒
  12. 案例|工业物联网解决方案•泵站智慧云平台
  13. 当 SegmentFault 遇上呼伦贝尔
  14. matlab中arccotx,微积分计算公式的推导过程
  15. win10照片查看器恢复办法
  16. 获取颜色值 抓取颜色值 获取颜色代码RGB
  17. gin embed打包静态资源文件
  18. 多元复合函数的求导法则
  19. PHP+JS+HTML 手机下拉加载分页
  20. 加工Altium Designer的PCB出现大部分丝印丢失

热门文章

  1. Git和Github之间的区别
  2. 本地未安装Oracle数据库,如何连接远程Oracle数据库
  3. Metasploit介绍
  4. 转(每天淘汰你自己)
  5. SpringBoot支持JSP教程
  6. JConsole监控远程linux下的JVM
  7. bug的定义,分类与要求
  8. python中isinstance是什么意思_isinstance在python中的意思是什么?
  9. web前端前景近几年怎么样,是否饱和?
  10. android在xml中加载大图,android – 如何在布局xml中添加循环视图