Caching(一)|学习笔记

简介: 快速学习 Caching(一)

开发者学堂课程【高校精品课-上海交通大学-企业级应用体系架构:Caching】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/75/detail/15833


Caching (一)

 

内容介绍

Memcached

MemCached - Storage Commands

、MemCached - Memory Management

Redis

、Clusterina

 

一、Memcached

Free & open source, high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load.

Memcached is an in-memory key-value store for small chunks of arbitrary data (strings, objects) from results of database calls, API calls, or page rendering.

Memcached is simple yet powerful.

Its simple design promotes quick deployment, ease of development, and solves many problems facing large data caches.

Its API is available for most popular languages.

At heart it is a simple Key/Value store.

Memcached 内存里面存数据存的是 key value给它一个 key把要存储的东西全部当成 value 存如果给key对象就可以放到的缓存把对象存进通过 key 拿出用量目前看到的比较少,网站上更新的也不快

Installing memcached with Homebrew and Lunchy

Step 1 - Install Homebrew

$ ruby -e "$(curl -fsSL https:/ /raw.github.com/Homebrew/homebrew go/install)"

Step 2 Install memcached

$ brew install Memcached

Step 3 - Install Lunchy

$ gem install lunchy

Step 4 Start/Stop memcached

$ mkdir ~ /Library/LaunchAgents

$ cp /usr/local/Cellar/memcached/$version/homebrew.mxcl.memcached.plist

~/Library/LaunchAgents/

$ lunchy start memcached

$ lunchy stop memcached

从网站上如何安装,在 linux memcached 容易一点下载安装好通过 lunch 的方法启动和关闭启动之后界面很简单

 image.png 

应用服务器可以访问 memcachedmemcached 还可以有群,启动时候可以指定在若干个机器启动多个进程,在一个机器上要求的端口号不一样在多个机上可以端口号一样未来应用在写程序的时候首次访问的时候只从数据库里读再把数据返回给客户端的时候同时还要把写入到 memcached 的里面第二次以及以后的每一次读取直接从 memcached 里面

image.png 

例子是 springbootconfiguration 类在 spring 框架里面凡是用 Configuration 标注过的东西在启动的时候,加它当配置文件做只要引入 memcached 的包就可以得到创建有关 memcached 的配置类在里面实现方法defaultMemcachedClient,获取一个 memcachedClient 对象memcached 是单独的进程在里面tomcat 里好多 springboot 不同的应用就是 memcached 的客户端在程序里面 CacheConfiguration 指定 url 和端口号默认是112.11,创建 cachefactory 用到配置在上面设置地址内容可以当做标准的类,唯一要改的地址是否需要如果不需要,默认即可

image.png

在实体类定义 person 类,有 age first time last name都是用 jpa 描述,JsonlgnoreProperties JsonldentitvInfo 防止 person 和 event 做两个类之间的关联循环依赖的问题下面都没变

加内容跟 cachefactory 相关从读的时候要从 cache 里面读k 是 integer id用 id 读通过 getone id 获取人时会先到 memcached 里面读的时候如果读不到才会到数据库里面读真正调用 spring person repository到数据库里读如果读到了会把它扔回到 memcached 里面memcached 里面再用 k value 存储真正存进去有区别

image.png 

其它什么都没改Spring jpa 一样

pom.xml

com.google.code.simple-spring-memcached

xmemcached-provider

4.1.3


管理的时候引入 memcached 的包版本是4.1.3,包里面有和 spring 集合的东西如果不用 spring 用别的可以找其他的包

image.png

右边是完整的工程多加的 memcached 的配置类在 dao 实现类先从 memcached 里面读跑例子Alpha 缓存Alpha 扔到 memcached 里面integer id 出来的效果

Stats cache dump 122

ITEM Alpha:1 [1056 b; 1583655630 s ]

ITEM Alpha:2 [1056 b; 1583655525 s ]

打开 memcached因为要访问数据库加了其它的东西最主要和 memcached 相关的依赖加进来

com. google. code . s imple spring-memcached

xmemcached-provider

4.1.3


在所有的代码里面只有一个地方做了修改就是在 dao 实现类里面从内存里面读将来存到 memcached 里面后k都是 alpha:1,人的主键是1,所以存进去就是 alpha:1,有 personevent 往里放namespace 不一样k 就不一样这是 springboot 的例子只要 spring 跑起来就可以在例子里面找 id 为1的人person 为1,要到 telnet 上面可以看内存缓存里面现在有的东西现在有一个 alpha 为1再找 id 为2的人liubei在 memcached 里面再看一下里面的内容有两个人其中一个人是 id 为1如果在2里面再找一遍实际上就是第二次在访问memcached 里面访问的log 写的比较少是如何用 memcached 写代码,配置的类和 memcached 放在一起上面只要加了configuration启动的时候会扫描整个的包,看到 configuration 类就会加载里面的内容,作为配置项目很多次访问的时候,只从数据库里面找两次,分别把它们扔到 memcached 里面

 

二、MemCached - Storage Commands

set

Most common command. Store this data, possibly overwriting any existing data. New items are at the top of the LRU.

add

Store this data, only if it does not already exist. New items are at the top of the LRU. If an item already exists and an add fails, it promotes the item to the front of the LRU anyway.

replace

Store this data, but only if the data already exists. Almost never used, and exists for protocol completeness (set, add, replace, etc)

append

Add this data after the last byte in an existing item. This does not allow you to extend past the item limit. Useful for managing lists.

prepend

Same as append, but adding new data before existing data.

cas

Check And Set (or Compare And Swap). An operation that stores data, but only if no one else has updated the data since you read it last. Useful for resolving race conditions on updating cache data.

get

Command for retrieving data. Takes one or more keys and returns all found items.

gets

An alternative get command for using with CAS. Returns a CAS identifier (a unique 64bit number) with the item. Return this value with the cas command. If the item's CAS value has changed since you gets'ed it, it will not be stored.

delete

Removes an item from the cache, if it exists.

incr/decr

Increment and Decrement. If an item stored is the string representation of a 64bit integer, you may run incr or decr commands to modify that number. You may only incr by positive values, or decr by positive values. They does not accept negative values.

If a value does not already exist, incr/decr will fail.

类似于控制台处理缓存类似于sql只不过它更简单k-v,对里面进行操作等

MemCached

memcached also allows you to make better use of your memory.

Each node is completely independent (top).

Each node can make use of memory from other nodes (bottom)

memcached 是利用操作的方式进行利用app 有三个进程从数据库里面,memcached,dbapp 是从数据库抓出来扔到 memcached 里面每次都在 memcached 里面找如果没有就从数据库里面找这是读写有两种方案一种是直接写到数据库里写完之后马上做一次读重新刷新 memcachedmemcached 删掉重新做一次读操作或者连读操作都不用做,只要往数据库里写,直接把 memcached 对象给删掉下一次在访问的时候,因为没有所以会到数据库里重新抓一次新的状态就会读回另外一种比较好的方式是每一次写的时候,应该先往 memcached 里面写写成功再往数据库里写两个同时成功事情做完,否则就认为整个事务失败,memcached 和 写数据库两个动作定义成事务只要用缓存比如 用 redis写操作是一样的都是要先写缓存再写数据库或者先写数据库再写缓存两个操作是一个事务不能分开这样才能保证以后读数据的时候,从内存里面读到

可以保证在数据库里的是一样的只要有写操作就把从 memcached 里面删掉一个比较好的方式两个都可以比较后面方式写数据库之后就把对象从 memcached 里面删掉,方式比较可靠而且不太复杂memcached 充分利用内存的原因memcached 可以机器上存充分利用起来,比如在机器上tomcat 又跑另外一个 tomcat两个应用内嵌有两个 tomcat各自有64兆的内存多用自己64兆,哪怕一边的不够一边闲着也没办法但是有了memcached 之后可以迭代缓存缓存是从 memcached 或者 spring 里面配置的缓存

把缓存省出全部放到 memcached ,两个应服器都到 memcached 里面读,并存的缓存的使用率就会更高一些不会出现左边的64兆用完没有用的右边的一点都没用空着这就是 memcached 带来的好处。

相关文章
|
存储 缓存 JSON
Caching(三)|学习笔记
快速学习 Caching(三)
157 0
Caching(三)|学习笔记
|
存储 算法 NoSQL
Caching(二)|学习笔记
快速学习 Caching(二)
123 0
Caching(二)|学习笔记
|
安全 Java 编译器
Security1 1(二)|学习笔记
快速学习 Security1 1(二)
Security1 1(二)|学习笔记
|
安全 Java 数据安全/隐私保护
Security1 1(三)|学习笔记
快速学习 Security1 1(三)
103 0
Security1 1(三)|学习笔记
|
安全 小程序 Java
Security1 1(一)|学习笔记
快速学习 Security1 1(一)
Security1 1(一)|学习笔记
|
存储 安全 文件存储
Searching(二)|学习笔记
快速学习 Searching(二)
243 0
Searching(二)|学习笔记
|
算法 搜索推荐 数据库
Searching(三)|学习笔记
快速学习 Searching(三)
213 0
Searching(三)|学习笔记
|
JSON Apache 数据库
Searching(一)|学习笔记
快速学习 Searching(一)
142 0
Searching(一)|学习笔记
|
安全 Java 应用服务中间件
Distributed Object 2(三)|学习笔记
快速学习 Distributed Object 2(三)
132 0
Distributed Object 2(三)|学习笔记
|
Oracle Java 关系型数据库
Distributed Object 2(一)|学习笔记
快速学习 Distributed Object 2(一)
Distributed Object 2(一)|学习笔记