memcached缓存数据库服务及Session共享

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介:

memcached缓存数据库服务
高性能的分布式缓存服务器
用来集中缓存数据库查询结果,减少数据库访问次数
以提高动态Web应用的响应速度
它不是在数据库中一行一行查找,而是直接去查找数据相对应的位置
采用内存分配机制,容易产生内存碎片并降低操作系统对内存的管理效率
缺点:掉电数据会丢失

Slab Allocation机制,它是按照预先规定的大小,将分配的内存分割成特定长度
的内存块(chunk),再把尺寸相同的内存块组成(chunk集合),这些内存块不会释放,可以重复利用。

memcached使用名为Least Recently Used (LRU)机制来分配空间
当内存不足时,删除“最近最少使用”的记录,来分配给新的记录

-M参数禁止LRU功能,当内存不足时会返回错误。

选项:
-p 指定memcached监听的端口号,默认11211

-l memcached服务器的IP地址

-u memcached程序运行时使用的用户身份必须是root用户

-m 指定使用本机的多少物理内存存数据,默认64M

-c memcached服务的最大连接数

-vvv 显示详细信息

-n chunk size 的最小空间是多少,单位为字节

-f chunk size 大小增长的倍数,默认1.25倍

-d 在后台启动

服务器 192.168.4.1/24
一、基础应用
1、安装
[root@vh01 ~]# yum install -y memcached
[root@vh01 ~]# systemctl start memcached
[root@vh01 ~]# systemctl enable memcached
2、测试
[root@vh01 ~]# yum install -y telnet
[root@vh01 ~]# telnet 127.0.0.1 11211
set name 0 180 3 # 设置变量名为name,0表示不压缩,
#180表示name变量的缓存时间是180秒,
#3指的是name变量占用3字节空间
zzg #变量name的值
get name #获取变量name的值
add myname 0 180 5 #添加变量myname,如果变量存在则报错
hello #myname的值
set name 0 180 10 #添加或替换变量
replace name 0 180 10 #替换
append name 0 180 10 #向变量中追加数据
delete name #删除变量
stats #查看状态
flush_all #清空所有
quit #退出登录

二、LNMP+MEMCHACHE
1、在memcache服务器上安装LNMP结构
yum install -y gcc gcc-c++ pcre-devel openssl-devel zlib-devel 
useradd -s /sbin/nologin nginx
tar xzf nginx-1.8.0.tar.gz 
cd nginx-1.8.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module
make && make install

2、安装mariadb
yum install -y mariadb-server mariadb-devel

3、安装php
yum install -y php php-mysql php-fpm-5.4.16-36.el7_1.x86_64.rpm

4、为 PHP 添加 memcache 扩展
yum install -y php-pecl-memcache

5、修改nginx配置文件
vim /usr/local/nginx/conf/nginx.conf
....
location ~ .php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi.conf;
}

6、检查nginx配置文件语法
/usr/local/nginx/sbin/nginx -t

7、起动相关服务
cp nginx.service /usr/lib/systemd/system/
systemctl start nginx.service 
systemctl start mariadb.service 
systemctl start php-fpm
systemctl enable nginx.service
systemctl enable mariadb.service
systemctl enable php-fpm
netstat -utnlp | grep :80

8、创建测试页面并访问
vim /usr/local/nginx/html/test.php
<?php
$memcache=new Memcache;
$memcache->connect('localhost', 11211) or die('could not connect');
$memcache->set('username', 'zhangsan');
$get_value=$memcache->get('username');
echo $get_value;
?>

firefox http://192.168.4.1/test.php

nginx负载均衡调度
1、配置nginx将用户请求发往后端的tomcat服务器
vim /usr/local/nginx/conf/nginx.conf
upstream tomcatgrp {
server 192.168.4.2:8080;
server 192.168.4.3:8080;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://tomcatgrp;
root html;
index index.php index.html index.htm;
}
}

启动Nginx服务
/usr/local/nginx/sbin/nginx -t
systemctl restart nginx.service

2、在vh02和vh03上安装tomcat
tar xzf apache-tomcat-8.0.30.tar.gz
mv apache-tomcat-8.0.30 /usr/local/tomcat
/usr/local/tomcat/bin/startup.sh 
netstat -utnalp | grep :8080

3、设置测试页可以显示Session ID信息
vim /usr/local/tomcat/webapps/ROOT/test.jsp
<html>
<body bgcolor="yellow"> 指定网页背景颜色
<%String s = session.getId();%> 获取SessionID
<%=s%>
<h1>tomcat web server A</h1> 固定字串信息
</body>
</html>

4、客户端(物理主机作为客户端)访问调度器
firefox http://192.168.4.1/test.jsp

Session:存储在服务端,保存用户名、密码等信息
Cookies:由服务器下发给客户端,保存在客户端的一个文件里。
保存的内容主要包括:SessionID、账户名、过期时间、路径和域

实现session共享

在两台后端Web服务器vh02和vh03上安装msm
一、安装msm

1、拷贝msm相关的jar包
cp session/*.jar /usr/local/tomcat/lib/

2、修改tomcat,使其可以连接到memcache服务器
vim /usr/local/tomcat/conf/context.xml 
<Context> 在原有的Context中加入以下说明
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="mem1:192.168.4.1:11211"
requestUriIgnorePattern=".*.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.JavaSerializationTranscoderFactory"/>
</Context>

3、重启tomcat
/usr/local/tomcat/bin/shutdown.sh 
netstat -taulnp | grep :8080
/usr/local/tomcat/bin/startup.sh

4、客户端测试
客户端使用浏览器访问调度服务器。


     本文转自夜流璃雨 51CTO博客,原文链接:http://blog.51cto.com/13399294/2061824,如需转载请自行联系原作者


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
4天前
|
存储 缓存 Oracle
崖山数据库YashanDB的共享集群机制初探
YashanDB共享集群是崖山数据库系统的核心特性,支持单库多实例并发读写,确保强一致性与高可用性。基于Shared-Disk架构和Cohesive Memory技术,实现数据页协同访问及资源控制。其核心组件包括YCK、YCS和YFS,提供金融级RPO=0、RTO&lt;10秒的高可用能力。通过自研“七种武器”(如页内锁、去中心化事务管理等),优化性能并解决读写冲突。相比Oracle RAC,YashanDB在TPC-C测试中性能高出30%,适用于金融、电信等关键领域,推动国产化替代进程。
崖山数据库YashanDB的共享集群机制初探
|
14天前
|
存储 缓存 API
自研一款共享集群数据库,有多难?
共享集群数据库管理系统是一种单库多实例的多活数据库管理系统,用户连接任意实例都可以访问同一个数据库,具备透明多写、高可用、高性能等特性。共享集群技术因其开发难度高,一直被国外垄断,也被称为数据库领域的“塔尖”技术。
|
21天前
|
人工智能 Cloud Native 多模数据库
实力见证!数据管理服务DMS、云原生多模数据库Lindorm荣获“2024技术卓越奖”
实力见证!数据管理服务DMS、云原生多模数据库Lindorm荣获“2024技术卓越奖”
|
23天前
|
数据管理 关系型数据库 MySQL
数据管理服务DMS支持MySQL数据库的无锁结构变更
本文介绍了使用Sysbench准备2000万数据并进行全表字段更新的操作。通过DMS的无锁变更功能,可在不锁定表的情况下完成结构修改,避免了传统方法中可能产生的锁等待问题。具体步骤包括:准备数据、提交审批、执行变更及检查表结构,确保变更过程高效且不影响业务运行。
49 2
|
1月前
|
关系型数据库 分布式数据库 PolarDB
PolarDB开源数据库进阶课1 搭建共享存储集群
在笔记本上构建PolarDB RAC环境,本文介绍了一种适用于Windows、macOS和Linux的方法:通过将宿主机上的文件模拟为块设备,并在多个Docker容器中使用loop设备共享该文件。此方法解决了macOS不支持直接挂载块设备的问题。
36 2
|
1月前
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课3 共享存储在线扩容
本文继续探讨穷鬼玩PolarDB RAC一写多读集群系列,介绍如何在线扩容共享存储。实验环境依赖《在Docker容器中用loop设备模拟共享存储》搭建。主要步骤包括:1) 扩容虚拟磁盘;2) 刷新loop设备容量;3) 使用PFS工具进行文件系统扩容;4) 更新数据库实例以识别新空间。通过这些步骤,成功将共享存储从20GB扩容至30GB,并确保所有节点都能使用新的存储空间。
31 1
|
2月前
|
关系型数据库 OLAP API
非“典型”向量数据库AnalyticDB PostgreSQL及RAG服务实践
本文介绍了非“典型”向量数据库AnalyticDB PostgreSQL及其RAG(检索增强生成)服务的实践应用。 AnalyticDB PostgreSQL不仅具备强大的数据分析能力,还支持向量查询、全文检索和结构化查询的融合,帮助企业高效构建和管理知识库。
133 19
|
2月前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的大学生就业服务平台设计与实现(系统源码+文档+数据库+部署等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
|
3月前
|
运维 监控 Cloud Native
云原生之运维监控实践:使用 taosKeeper 与 TDinsight 实现对 时序数据库TDengine 服务的监测告警
在数字化转型的过程中,监控与告警功能的优化对保障系统的稳定运行至关重要。本篇文章是“2024,我想和 TDengine 谈谈”征文活动的三等奖作品之一,详细介绍了如何利用 TDengine、taosKeeper 和 TDinsight 实现对 TDengine 服务的状态监控与告警功能。作者通过容器化安装 TDengine 和 Grafana,演示了如何配置 Grafana 数据源、导入 TDinsight 仪表板、以及如何设置告警规则和通知策略。欢迎大家阅读。
96 0
|
4月前
|
存储 数据库
快速搭建南大通用GBase 8s数据库SSC共享存储集群
本文介绍如何GBase8s 数据库 在单机环境中快速部署SSC共享存储集群,涵盖准备工作、安装数据库、创建环境变量文件、准备数据存储目录、修改sqlhost、设置onconfig、搭建sds集群及集群检查等步骤,助你轻松完成集群功能验证。

热门文章

最新文章