使用memcache 和 redis 、 实现session 会话复制和保持

news2024/11/16 20:43:31

一、NoSQL介绍

NoSQL是对Not Only SQL、非传统关系型数据库的统称

NoSQL一词诞生于1998年,2009年这个词汇再次提出指非关系型、分布式、不提供ACID的数据库设计模式

随着互联网时代的数据爆发时增长、数据库技术发展的日新月异,要适应新的业务需求,大数据技术中的NoSQL也同样重要

NoSQL分类

KV型(key-value):性能好(O1),如redis   memcached(优势:数据的存储和缓存写入内存当中去)

文档数据库(Document):mogodb(索引、分片机制作为导向,所以其很适合关联大数据领域,搜索领域)、CouchDB、ES(分布式、restful风格的搜索和数据分析引擎)

Column Store列存数据库:HBase、Cassandra、大数据领域应用广泛

Graph DB数据库:Neo4j

Time Series(时序数据库):InfluxDB   Prometheus

Memcached

Memcached只支持能序列化的数据类型,不支持持久化,基于key-value的内存缓存系统

memcached虽然没有像redis具有数据持久化功能,但是可以通过做集群同步的方式,让Memcached服务器的数据进行同步,从而实现数据的一致性,即保证各memcached的数据是一样的,即使又任何一台memcached发生故障,只要集群中有一台memcached可用就不会出现数据丢失。当其他mem加入集群,可以从已有的mem中自动获取数据并提供服务。

memcached借助了操作系统的Libevent工具做高效的读写,其支持动I/O。libevent是个程序库,它将Linux的epoll、BSD类操作系统的kqueue等事件处理机制封装成统一的调用接口。即使对服务器的连接数量增加,也能发挥高性能。mem适应这个库,可以在Linux、BSD、Solaris等操作系统上发挥其高性能。

memcached支持最大的内存存储对象为1M,redis可达512M(不代表其内存缓存为1M),超过1M的数据可以使用客户端压缩或拆分放到多个KEY中,比较大的数据在进行读取的时候需要消耗的时间比较长,memcached最适合保存用户的session实现session共享

memcached存储数据时,会申请1M的内存,把该内存称为一个slab,也称为一个page

memcached支持多种开发语言,包括JAVA  C  PYTHON   C#  PHP   Ruby  Perl等

相同键值对数据库Redis和Memcached的比较

数据结构:

Redis:哈希、列表、集合、有序集合、消息队列    memcached:纯key-value

是否支持持久化:

        Redis:支持                                  memcached:不支持

是否支持高可用:

        Redis:支持,也支持读写分离、主从复制,官方还有集群管理功能,能实现主从监控、故障转移,无需人工干预。                          memcached:不支持,但可以二次开发。

存储容量:

        Redis:最大512M                          memcached:最大1M

内存分配:

        Redis:临时申请,可能导致碎片    memcached:预分配内存池,节省内存分配时间

单机QPS:

        Redis:10w                          memcached:60w

memcached工作机制

①:Memcached内存分配机制

      应用程序运行时需要使用内存存储数据,但是对于一个缓存系统来说,申请内存、释放内存将十分频繁,非常容易导致大量的内存碎片,最后导致无连续内存可用。

      memcached采用了slab Allocator机制来分配和管理内存。

      Page:分配给slab的内存空间,默认为1M,memcached中存储数据的最大单位。分配后就得到了一个slab,slab分配之后内存按照固定字节大小等分成chunk

      Chunk:内存块,用于缓存记录K/V值的内存空间。Memcached会根据数据大小选择存到哪一个chunk中,假设chunk有128byte、64byte等多种,数据只要100byte存储在128byte中,存在少许浪费。

      chunk最大就是Page的大小,即一个Page中就一个chunk

      Slab Class:Slab按照chunk的大小分组,就组成了不同的Slab Class,diyige Chunk大小为96B的Slab为Class1,Chunk 120B为Class 2,如果有100bytes要存,那么Memcached会选择下图中Slab class 2存储,因为它是120byte的chunk。slab之间的差异可用使用Growth Factor(增长因子)控制,默认为1.25。

 

 

 

②:缓存清理机制

缓存过期并且访问只是才会清理缓存,不会主动清理缓存(懒过期机制)

提取出stats的指标:

memcached安装

1:yum安装

yum -y install memcached

配置文件:/etc/sysconfig/memcached

 

2:memcached简单命令操作

stats    set     add     replace      get       delete

连接测试

Python3连接memcached

apt-get update

apt install python3-pip -y

pip3 install python3-memcached

3:memcache高可用(需要基于第三方解决方案)

memagent高可用    反向代理memcached

二、memcache实现session会话复制和保持

基于集群,将tomcat的会话信息保存至memcached中,可用基于两种模式

sticky模式(tomcat和memcached有关联关系)

 【注】:适用于相对规模小的模式下。

t1 和 m1 在一台机器上 t2 和 m2 在一台机器上 t1 的会话存储在 m2 上 t2 的会话 存储在 m1 上 交叉存储 因为在同一个机器 因此 如果一个机器坏掉 另一个 msm 也会顶上 进行保持会 

non-sticky模式(tomcat和memcached没有关系,tomcat自身不需要存放任何session信息)

SetupAndConfiguration · magro/memcached-session-manager Wiki · GitHub

【注】:kryo版本有严格的要求。 

安装tomcat和memcached

将所有的jar包放置tomcat的库目录,并修改context.xml

启动memcached服务,查看session会话

尝试故障一台memcache,查看会话故障迁移效果。

2:non-sticky模式

会话进行访问 会存储到内存中 自己是异步的 但是这里选择同步 异步就是在空余时 间在复制 这里直接复制到另一个 memcache 中 即使她宕机 另一个机器也能  

tomcat自身不存任何session信息,完全依赖于后端数据库缓存。(其默认做异步,为了数据不丢失,禁止其做异步:sessionbackupasync=false)

 

3:使用Redis实现tomcat的session会话保持

Redis 对会话记录进行管理 当有会话访问以后 会存储到内存中 同时他在异步的情况下 会将会话存储到硬盘中 这里选择的 

基于epel源安装redis

yum -y install redis

更改配置文件:

Home · ran-jit/tomcat-cluster-redis-session-manager Wiki · GitHub

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1643815.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaWeb_请求响应_简单参数实体参数

一、SpringBoot方式接收携带简单参数的请求 简单参数:参数名与形参变量名相同,定义形参即可接收参数。并且在接收过程中,会进行自动的类型转换。 启动应用程序后,在postman中进行测试: 请求成功,响应回了O…

eve 导入linux

mkdir /opt/unetlab/addons/qemu/linux-centos7 cd /opt/unetlab/addons/qemu/linux-centos7 上传hda.qcow2 /opt/unetlab/wrappers/unl_wrapper -a fixpermissions Linux images - (eve-ng.net) Due to very high demand of this section and problems with how to crea…

# 在 Windows 命令提示符(cmd)中,可以通过以下方法设置长命令自动换行

在 Windows 命令提示符(cmd)中,可以通过以下方法设置长命令自动换行 1、点击 cmd 窗口左上角标题栏,选择【属性】。 2、在【属性】菜单中,依次点击【选项】,找到【编辑选项】下面的【自动换行】&#xff…

Vue CLI脚手架项目目录和运行流程介绍

目录 一、项目目录介绍 二、运行流程介绍 一、项目目录介绍 二、运行流程介绍 项目在启动时会先运行main.js main.js的核心代码如下 1.导入Vue import Vue from vue 2.导入App.vue import App from ./App.vue 3.实例化Vue,将App.vue渲染到index.html容器中 new Vue({r…

为什么说虚拟化技术是现代网络安全的重要组成部分?

虚拟化技术是一种对计算机资源的抽象和资源管理技术,将电脑的各种实体资源(CPU、内存、磁盘空间、网络适配器等)予以抽象、转换后呈现出来,并可供分割、组合为一个或多个电脑配置环境。今天德迅云安全带您了解为什么虚拟化技术能成…

dp 动态规划 力扣

64. 最小路径和 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例 1: 输入:grid [[1,3,1],[1,5,1],[4,2,1]] 输…

实时聊天系统设计

设计一个聊天系统最主要是保证消息能够及时可靠的从一端传入到另外一端,同时要支持对历史消息的查看。按照同时聊天人数聊天系统可以分,一对一(one on one)和群聊(group chat),按照消息传递的及…

.排序总讲.

在这里赘叙一下我对y总前四节所讲排序的分治思想以及递归的深度理解。 就以788.逆序对 这一题来讲(我认为这一题对于分治和递归的思想体现的淋淋尽致)。 题目: 给定一个长度为 n𝑛 的整数数列,请你计算数列中的逆序对…

C++进阶 | [2] 多态

摘要:多态的概念,多态的条件,虚函数的重写,抽象类,多态的原理,虚函数与虚函数表,与多态有关的问答题 1. Concept 多态的概念:通俗来说,就是多种形态,具体点就…

Redis(Jedis和SpringBoot整合Redis)

文章目录 1.Jedis1.介绍2.环境配置1.创建maven项目2.pom.xml引入依赖3.新建一个包并创建一个文件 3.Jedis远程连接到Redis1.Redis放到服务器可以连接的前提条件2.为Redis设置密码1.编辑配置文件2.找到 requirepass3.设置密码为root4.重启Redis,在shutdown的时候报错…

C语言写一个终端进度条

C语言写一个终端进度条 这个功能挺简单的,主要有以下两点: 如何获取终端宽度如何让字符在原地闪烁 如何获取终端宽度 这里用到了设备控制接口函数ioctl(),下面简单的介绍一下这个函数的用法: ioctl是一个在Unix和类Unix系统中…

[C语言]指针进阶详解

指针是C语言的精髓所以内容可能会比较多,需要我们认真学习 目录 1、字符指针 2、指针数组 3、数组指针 3.1数组指针的定义 3.2&数组名vs数组名 3.3数组指针的使用 4、数组传参和指针传参 4.1一维数组传参 4.2二维数组传参 4.3一级指针传参 4.4二级指…

如何使用SSH密钥克隆仓库

1.创建SSH Key 在用户目录下查看有没有.ssh目录。如果有且该.ssh目录下有id_rsa(私钥),和id_rse_pub(公钥)这俩文件,那么这一步就可以跳过。否则使用以下指令创建SSH Key ssh-keygen -t rsa -C "xxxqq.com" "xx…

【C语言】详解预处理

、 最好的时光,在路上;最好的生活,在别处。独自上路去看看这个世界,你终将与最好的自己相遇。💓💓💓 目录 •✨说在前面 🍋预定义符号 🍋 #define • 🌰1.#define定义常…

解决HTTP 403 Forbidden错误:禁止访问目录索引问题的解决方法

解决HTTP 403 Forbidden错误:禁止访问目录索引问题的解决方法 过去有人曾对我说,“一个人爱上小溪,是因为没有见过大海。”而如今我终于可以说,“我已见过银河,但我仍只爱你一颗星。” 在Web开发和服务器管理中&#x…

3-qt综合实例-贪吃蛇的游戏程序

引言: 如题,本次实践课程主要讲解贪吃蛇游戏程序。 qt贪吃蛇项目内容: 一、功能需求 二、界面设计 各组件使用: 对象名 类 说明 Widget QWidge 主窗体 btnRank QPushButton 排行榜-按钮 groupBox QGroupBox 难…

C/C++开发,opencv-ml库学习,ml模块代码实现研究

目录 一、opencv-ml模块 1.1 ml简介 1.2 StatModel基类及通用函数 1.3 ml模块各算法基本应用 二、ml模块的实现原理 2.1 cv::ml::StatModel的train函数实现原理 2.2 cv::ml::StatModel的predict函数实现原理 2.3 cv::ml::StatModel的save函数和load函数 一、opencv-ml模…

Nginx(搭建高可用集群)

文章目录 1.基本介绍1.在微服务架构中的位置2.配置前提3.主从模式架构图 2.启动主Nginx和两个Tomcat1.启动linux的tomcat2.启动win的tomcat3.启动主Nginx,进入安装目录 ./sbin/nginx -c nginx.conf4.windows访问 http://look.sunxiansheng.cn:7777/search/cal.jsp 3…

力扣 647. 回文子串

题目来源:https://leetcode.cn/problems/palindromic-substrings/description/ C题解1:暴力解法。不断地移动窗口,判断是不是回文串。 class Solution { public:int countSubstrings(string s) {int len s.size();int res 0;for(int i 0;…

【机器学习-21】集成学习---Bagging之随机森林(RF)

【机器学习】集成学习---Bagging之随机森林(RF) 一、引言1. 简要介绍集成学习的概念及其在机器学习领域的重要性。2. 引出随机森林作为Bagging算法的一个典型应用。 二、随机森林原理1. Bagging算法的基本思想2. 随机森林的构造3. 随机森林的工作机制 三…