Redis

一、Docker概述与安装

末鹿安然 提交于 2021-02-17 02:16:53
一、概述 官网: https://www.docker.com dockerhub: https://hub.docker.com/ Docker 是一个开源的应用容器引擎,基于Go语言,并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包 他们的应用以及依赖包 到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用 沙箱机制 ,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。 把项目从windows发布到linux环境并不能跨平台,以前发布一个jar或者war,需要在机器上配置redis、mysql、ES、jdk。使用docker后可以带上环境来打包(镜像)。 二、组成 镜像(image) :通过镜像来创建容器,相当于是一个 root 文件系统,创建 Docker 容器的模板。 容器(container) :独立运行应用,是镜像运行时的实体。 仓库(repository) :Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。 三、安装 CentOS的安装文档: https://docs.docker.com/engine/install/centos/ 1、卸载: sudo yum remove docker \ docker-client \ docker

基本锁到分布式锁

ε祈祈猫儿з 提交于 2021-02-17 02:12:49
锁的机制一般都是用于多线程安全中,多线程竞争统一资源 一、 java的 synchronized: lock: java.util.concurrent.locks lock.lock(); try{ // 处理 }catch(Exception ex){ // 捕获异常 }finally{ // 释放锁 lock.unlock(); } 二、JMM的volatile锁关键字。 保证可见性,保证线程不从自己的副本中读值,都强制从主工作区读取值! 三、数据库的锁 select * from table where ? lock in share mode;//共享锁 select * from table where ? for update;//排他锁 悲观锁:觉得我在操作的时候一定有人试图来篡改干扰我,很悲观,所以会给加上一个排他锁。 乐观锁:觉得别人对我当前操作的影响无所谓,非常乐观,即便出现了冲突,让用户决定和承担,所以只会加共享锁! 四、分布式锁 本地锁在分布式架构中就实效了,所以分布式需要自己特定的分布式锁的概念: 基于数据库实现分布式锁:当我们要锁住某个方法或资源的时候,我们就在该表中增加一条记录,想要释放锁的时候就删除这条记录。(同Redis一样,不过数据库的操作会比Redis慢,因为Redis是基于内存缓存数据库) 基于缓存(Redis等)实现分布式锁;

Set Redis cache prefix key on Symfony

两盒软妹~` 提交于 2021-02-17 02:09:07
问题 I'm using Redis to manage some caching within my Symfony 3.4 app, configured like this: config.yml framework: cache: default_redis_provider: 'redis://127.0.0.1:6379' pools: cache.catalog: adapter: cache.adapter.redis provider: iwid.custom_redis_provider default_lifetime: 86400 public: true cache.language: adapter: cache.adapter.redis provider: iwid.custom_redis_provider default_lifetime: 86400 public: true services.yml services: iwid.custom_redis_provider: class: Redis factory: ['Symfony

锁和分布式锁

余生颓废 提交于 2021-02-17 01:59:24
锁的由来 : 多线程环境中,经常遇到多个线程访问同一个 共享资源 ,这时候作为开发者必须考虑如何维护数据一致性,这就需要某种机制来保证只有满足某个条件(获取锁成功)的线程才能访问资源,而不满足条件(获取锁失败)的线程只能等待,在下一轮竞争中来获取锁才能访问资源。 两个知识点: 1.高级缓存Cache CPU为了提高处理速度,不和内存直接进行交互,而是使用Cache。 可能引发的问题: 如果多个处理器同时对共享变量进行读改写操作 (i++就是经典的读改写操作),那么共享变量就会被多个处理器同时进行操作,这样读改写操作就不是原子的了,操作完之后共享变量的值会和期望的不一致。 造成此结果的原因: 多个处理器同时从各自的缓存中读取变量i,分别进行加1操作,然后分别写入 系统内存中。 处理器层面的解决方案: 处理器使用总线锁就是来解决这个问题的。所谓总线锁就是使用处理器提供的一个 LOCK#信号,当一个处理器在总线上输出此信号时,其他处理器的请求将被阻塞住,那么该处理器可以独占共享内存。 2.CAS(Compare And Swap)+volatile CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。执行CAS操作的时候,将内存位置的值与预期原值比较,如果相匹配,那么处理器会自动将该位置值更新为新值。否则,处理器不做任何操作。

Redis 的各项功能解决了哪些问题?

一世执手 提交于 2021-02-17 00:41:23
作者:blackheart 来源:https://www.cnblogs.com/linianhui 先看一下Redis是一个什么东西。官方简介解释到: Redis是一个基于BSD开源的项目,是一个把结构化的数据放在内存中的一个存储系统,你可以把它作为数据库,缓存和消息中间件来使用。同时支持strings,lists,hashes,sets,sorted sets,bitmaps,hyperloglogs和geospatial indexes等数据类型。它还内建了复制,lua脚本,LRU,事务等功能,通过redis sentinel实现高可用,通过redis cluster实现了自动分片。以及事务,发布/订阅,自动故障转移等等。 综上所述,Redis提供了丰富的功能,初次见到可能会感觉眼花缭乱,这些功能都是干嘛用的?都解决了什么问题?什么情况下才会用到相应的功能?那么下面从零开始,一步一步的演进来粗略的解释下。 1 从零开始 最初的需求非常简单,我们有一个提供热点新闻列表的api:http://api.xxx.com/hot-news,api的消费者抱怨说每次请求都要2秒左右才能返回结果。 随后我们就着手于如何提升一下api消费者感知的性能,很快最简单粗暴的第一个方案就出来了:为API的响应加上基于HTTP的缓存控制 cache-control:max-age=600

部署前后端分离项目

一个人想着一个人 提交于 2021-02-17 00:13:55
1.先从后端搞起,部署django后台的环境依赖 -解决环境依赖的办法:   1.可以挨个的解决报错   2.把可以正常运行路飞哪个机器地下的python包,全部导出来,就可以     pip3 freeze > requirements.txt   3.把这个文件,传输给linux系统     linux再通过命令安装     pip3 install -r requirements.txt 3.通过模块依赖文件,直接安装,着是从讲师机器上下载的 手动创建依赖文件,然后写入 (s17luffy) [root@master luffy_boy]# cat requirements.txt certifi==2018.11.29 chardet==3.0.4 crypto==1.4.1 Django==2.1.4 django-redis==4.10.0 django-rest-framework==0.1.0 djangorestframework==3.9.0 idna==2.8 Naked==0.1.31 pycrypto==2.6.1 pytz==2018.7 PyYAML==3.13 redis==3.0.1 requests==2.21.0 shellescape==3.4.1 urllib3==1.24.1 uWSGI==2.0.17.1 4.安装uwsgi启动路飞后端

Redis 的各项功能解决了哪些问题?

浪子不回头ぞ 提交于 2021-02-16 23:41:57
原文:https://www.cnblogs.com/linianhui 作者:blackheart 先看一下Redis是一个什么东西。官方简介解释到: Redis是一个基于BSD开源的项目,是一个把结构化的数据放在内存中的一个存储系统,你可以把它作为数据库,缓存和消息中间件来使用。同时支持strings,lists,hashes,sets,sorted sets,bitmaps,hyperloglogs和geospatial indexes等数据类型。它还内建了复制,lua脚本,LRU,事务等功能,通过redis sentinel实现高可用,通过redis cluster实现了自动分片。以及事务,发布/订阅,自动故障转移等等。 综上所述,Redis提供了丰富的功能,初次见到可能会感觉眼花缭乱,这些功能都是干嘛用的?都解决了什么问题?什么情况下才会用到相应的功能?那么下面从零开始,一步一步的演进来粗略的解释下。 1 、从零开始 最初的需求非常简单,我们有一个提供热点新闻列表的api:http://api.xxx.com/hot-news,api的消费者抱怨说每次请求都要2秒左右才能返回结果。 随后我们就着手于如何提升一下api消费者感知的性能,很快最简单粗暴的第一个方案就出来了:为API的响应加上基于HTTP的缓存控制 cache-control:max-age=600

Docker-Compose

主宰稳场 提交于 2021-02-16 23:15:55
借鉴:https://blog.csdn.net/pushiqiang/article/details/78682323 特点: Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器。 技术简介 1、Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义 2、使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。 3、docker-compose默认的模板文件是 docker-compose.yml,其中定义的每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)来自动构建。其它大部分指令都跟 docker run 中的类似。如果使用 build 指令,在 Dockerfile 中设置的选项(例如:CMD, EXPOSE, VOLUME, ENV 等) 将会自动被获取,无需在 docker-compose.yml 中再次设置。 使用Compose 基本上分为三步: 1.Dockerfile 定义应用的运行环境 2.docker-compose.yml 定义组成应用的各服务 3.docker-compose up 启动整个应用 安装compose yum

深度剖析分布式单点登录框架XXL-SSO

蓝咒 提交于 2021-02-16 20:47:38
于2018年初,在github上创建XXL-SSO项目仓库并提交第一个commit,随之进行系统结构设计,UI选型,交互设计…… 于2018-12-05,XXL-SSO参与" 2018年度最受欢迎中国开源软件 "评比,在当时已录入的一万多个国产开源项目中角逐,最终排名第55名。 于2019-01-23,XXL-SSO被评选上榜" 2018年度新增开源软件排行榜之国产 TOP 50 "评比,排名第8名。 至今,XXL-SSO已接入多家公司的线上产品线,接入场景如电商业务,O2O业务和核心中间件配置动态化等,截止2018-03-15为止,XXL-SSO已接入的公司包括不限于: 湖南创发科技 深圳龙华科技有限公司 摩根国际 印记云 一、简介 1.1 概述 XXL-SSO 是一个分布式单点登录框架。只需要登录一次就可以访问所有相互信任的应用系统。拥有"轻量级、分布式、跨域、Cookie+Token均支持、Web+APP均支持"等特性。现已开放源代码,可以做到开箱即用。 1.2 特性 1、简洁:API直观简洁,可快速上手; 2、轻量级:环境依赖小,部署与接入成本较低; 3、单点登录:只需要登录一次就可以访问所有相互信任的应用系统。 4、分布式:接入SSO认证中心的应用,支持分布式部署; 5、HA:Server端与Client端,均支持集群部署,提高系统可用性; 6、跨域

redis系列:基于redis的分布式锁

ε祈祈猫儿з 提交于 2021-02-16 17:22:49
一、介绍 这篇博文讲介绍如何一步步构建一个基于Redis的分布式锁。会从最原始的版本开始,然后根据问题进行调整,最后完成一个较为合理的分布式锁。 本篇文章会将分布式锁的实现分为两部分,一个是单机环境,另一个是集群环境下的Redis锁实现。在介绍分布式锁的实现之前,先来了解下分布式锁的一些信息。 二、分布式锁 2.1 什么是分布式锁? 分布式锁是控制分布式系统或不同系统之间共同访问共享资源的一种锁实现,如果不同的系统或同一个系统的不同主机之间共享了某个资源时,往往需要互斥来防止彼此干扰来保证一致性。 2.2 分布式锁需要具备哪些条件 互斥性:在任意一个时刻,只有一个客户端持有锁。 无死锁:即便持有锁的客户端崩溃或者其他意外事件,锁仍然可以被获取。 容错:只要大部分Redis节点都活着,客户端就可以获取和释放锁 2.4 分布式锁的实现有哪些? 数据库 Memcached(add命令) Redis(setnx命令) Zookeeper(临时节点) 等等 三、单机Redis的分布式锁 3.1 准备工作 定义常量类 public class LockConstants { public static final String OK = "OK"; /** NX|XX, NX -- Only set the key if it does not already exist. XX --