命令模式

Redis高级客户端Lettuce详解

别说谁变了你拦得住时间么 提交于 2020-02-06 11:45:18
前提 Lettuce 是一个 Redis 的 Java 驱动包,初识她的时候是使用 RedisTemplate 的时候遇到点问题 Debug 到底层的一些源码,发现 spring-data-redis 的驱动包在某个版本之后替换为 Lettuce 。 Lettuce 翻译为 生菜 ,没错,就是吃的那种生菜,所以它的 Logo 长这样: 既然能被 Spring 生态所认可, Lettuce 想必有过人之处,于是笔者花时间阅读她的官方文档,整理测试示例,写下这篇文章。编写本文时所使用的版本为 Lettuce 5.1.8.RELEASE , SpringBoot 2.1.8.RELEASE , JDK [8,11] 。 超长警告 :这篇文章断断续续花了两周完成,超过4万字… Lettuce简介 Lettuce 是一个高性能基于 Java 编写的 Redis 驱动框架,底层集成了 Project Reactor 提供天然的反应式编程,通信框架集成了 Netty 使用了非阻塞 IO , 5.x 版本之后融合了 JDK1.8 的异步编程特性,在保证高性能的同时提供了十分丰富易用的 API , 5.1 版本的新特性如下: 支持 Redis 的新增命令 ZPOPMIN, ZPOPMAX, BZPOPMIN, BZPOPMAX 。 支持通过 Brave 模块跟踪 Redis 命令执行。 支持

编程范式:命令式编程(Imperative)、声明式编程(Declarative)和函数式编程(Functional)

和自甴很熟 提交于 2020-02-06 09:41:23
一、简介 Vue是什么 Vue是一个当前流行的前端框架 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与 现代化的工具链 以及各种 支持类库 结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。 渐进式框架 笔者理解的“渐进式框架”也非常简单,就是用你想用或者能用的功能特性,你不想用的部分功能可以先不用。 VUE不强求你一次性接受并使用它的全部功能特性。 场景一:公司刚开始一个项目,技术人员对Vue的掌握也不足够。那么我们就不能使用VUE了么?当然不是,如果你只是使用VUE做些 基础操作,如:页面渲染、表单处理提交功能,那还是非常简单的,成熟技术人员上手也就一两天。完全可以用它去代替jquery。并不需要你去引入其他复杂特性功能。 场景二:我们项目用了VUE,使用的效果也挺好。那么我们想逐渐实现代码组件化,实现代码的复用,或者是基于组件原型的跨项目的代码复用。那么我们就可以引入VUE的components组件特性了。 场景三:我们的项目规模逐渐的变大了,我们可能会逐渐用到前端路由、状态集中管理、并最终实现一个高度工程化的前端项目。这些功能特性我们可以逐步引入,当然不用也可以。

scp命令

夙愿已清 提交于 2020-02-05 22:24:23
scp 命令使用端口号 4588 -1: 强制scp命令使用协议ssh1 -2: 强制scp命令使用协议ssh2 -4: 强制scp命令只使用IPv4寻址 -6: 强制scp命令只使用IPv6寻址 -B: 使用批处理模式(传输过程中不询问传输口令或短语) -C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能) -p:保留原文件的修改时间,访问时间和访问权限。 -q: 不显示传输进度条。 -r: 递归复制整个目录。 -v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。 -c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。 -F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。 -i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。 -l limit: 限定用户所能使用的带宽,以Kbit/s为单位。 -o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式, -P port:注意是大写的P, port是指定数据传输用到的端口号 -S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。 常用的就是scp -r 来源: https://www.cnblogs

使程序在Linux下后台运行 (关掉终端继续让程序运行的方法)

馋奶兔 提交于 2020-02-05 21:32:12
你是否遇到过这样的情况:从终端软件登录远程的Linux主机,将一堆很大的文件压缩为一个.tar.gz文件,连续压缩了半个小时还没有完成,这时,突然你断网了,你登录不上远程Linux主机了,那么前面的半个小时就会前功尽弃,你非常气愤…… 在Linux下,如果你要执行的shell命令耗时特别长,并且:(1)你的网络不稳定,随时可能断网;或者(2)你在执行了shell命令之后必须要关闭终端软件(例如SecureCRT)。 那么你就需要以脱离终端的方式在后台运行这个shell命令。 方法如下: (1)输入命令: nohup 你的shell命令 & (2)回车,使终端回到shell命令行; (3)输入exit命令退出终端:exit (4)现在可以关闭你的终端软件了,等过足够的时间,让你的shell命令执行完了再上去看结果吧。 其中,nohup命令可以让你的shell命令忽略SIGHUP信号,即可以使之脱离终端运行;“&”可以让你的命令在后台运行。 以脱离终端的方式在后台运行shell命令有这样几个好处:只要你执行过了命令,那么你的网络中断不会对你有任何影响,并且你就可以关闭终端软件了。 一、为什么要使程序在后台执行 我们计算的程序都是周期很长的,通常要几个小时甚至一个星期。我们用的环境是用putty远程连接到日本Linux服务器。所以使程序在后台跑有以下三个好处: 1

Linux chattr命令

久未见 提交于 2020-02-05 21:23:15
Linux chattr命令用于改变文件属性。 这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有以下8种模式: a:让文件或目录仅供附加用途。 b:不更新文件或目录的最后存取时间。 c:将文件或目录压缩后存放。 d:将文件或目录排除在倾倒操作之外。 i:不得任意更动文件或目录。 s:保密性删除文件或目录。 S:即时更新文件或目录。 u:预防以外删除。 chattr [-RV][-v<版本编号>][+/-/=<属性>][文件或目录...] 参数   -R 递归处理,将指定目录下的所有文件及子目录一并处理。   -v<版本编号> 设置文件或目录版本。   -V 显示指令执行过程。   +<属性> 开启文件或目录的该项属性。   -<属性> 关闭文件或目录的该项属性。   =<属性> 指定文件或目录的该项属性。 实例 [root@iZbp143t3oxhfc3ar7jey0Z ~]# touch test.txt [root@iZbp143t3oxhfc3ar7jey0Z ~]# chattr +i test.txt [root@iZbp143t3oxhfc3ar7jey0Z ~]# lsattr test.txt ----i--------e-- test.txt [root@iZbp143t3oxhfc3ar7jey0Z ~]# rm -rf test.txt

linux之find的使用

陌路散爱 提交于 2020-02-05 14:59:43
基本语法   find [查找目录] [选项] [查找规则] [查找完后的操作] 即:find pathname -option -condition [-print -exec -ok …] 选项参数 -amin       # 查找在系统中最后N分钟访问的文件 -anewer<参考文件或目录>:   查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录; -atime -n +n #按文件访问时间来查GIN: 0px"> -cmin<分钟>: 查找在指定时间之时被更改过的文件或目录; -cnewer<参考文件或目录> 查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录; -ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前 -daystart: 从本日开始计算时间; -depth: 从指定目录下最深层的子目录开始查找; -expty: 寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录; -exec<执行指令>: 假设find指令的回传值为True,就执行该指令; -false: 将find指令的回传值皆设为False; -fls<列表文件>: 此参数的效果和指定“-ls”参数类似,但会把结果保存为指定的列表文件; -follow: #如果遇到符号链接文件,就跟踪链接所指的文件 -fprint<列表文件>

Python3 解释器

大兔子大兔子 提交于 2020-02-05 14:05:27
Linux/Unix的系统上,一般默认的 python 版本为 2.x,我们可以将 python3.x 安装在 /usr/local/python3 目录中。 安装完成后,我们可以将路径 /usr/local/python3/bin 添加到您的 Linux/Unix 操作系统的环境变量中,这样您就可以通过 shell 终端输入下面的命令来启动 Python3 。 $ PATH=$PATH:/usr/local/python3/bin/python3 # 设置环境变量 $ python3 --version Python 3.4.0 在Window系统下你可以通过以下命令来设置Python的环境变量,假设你的Python安装在 C:\Python34 下: set path=%path%;C:\python34 交互式编程 我们可以在命令提示符中输入"Python"命令来启动Python解释器: $ python3 执行以上命令后,出现如下窗口信息: $ python3 Python 3.4.0 (default, Apr 11 2014, 13:05:11) [GCC 4.8.2] on linux Type "help", "copyright", "credits" or "license" for more information. >>> 在 python

关于Redis的ACID

徘徊边缘 提交于 2020-02-05 13:48:46
事务是一个数据库必备的元素,对于redis也不例外,对于一个传统的关系型数据库来说,数据库事务满足ACID四个特性: A代表原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。 C代表一致性:事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束 I代表隔离性:多个事务并发执行时,一个事务的执行不应影响其他事务的执行 D代表持久性:已被提交的事务对数据库的修改应该永久保存在数据库中 然而,对于redis来说,只满足其中的: 一致性和隔离性两个特性,其他特性是不支持的。 关于redis对ACID四个特性暂时先说这么多,在本文后面会详细说明。在详述之前,我们先来了解redis事务具体的使用和实现,这样我们接下来讨论ACID时才能更好的理解。 redis事务的使用 redis事务主要包括MULTI、EXEC、DISCARD和WATCH命令 MULTI命令 MULTI命令用来开启一个事务,当MULTI执行之后,客户端可以继续向服务器发送多条命令,这些命令会缓存在队列里面,只有当执行EXEC命令时,这些命令才会执行。 而DISCARD命令可以清空事务队列,放弃执行事务。

【Redis】事务 (超详细)

守給你的承諾、 提交于 2020-02-05 13:45:28
一、概述 二、相关命令列表 2.1 MULTI 2.2 EXEC 2.3 DISCARD 2.4 WATCH key [key ...] 2.5 UNWATCH 三、命令示例 3.1 事务被正常执行 3.2 事务中存在失败的命令 3.3 回滚事务 四、WATCH命令和基于CAS的乐观锁 五、SpringBoot操作Redis事务 六、Redis集群事物 一、概述 和众多其它数据库一样,Redis作为NoSQL数据库也同样提供了事务机制。在Redis中,MULTI/EXEC/DISCARD/WATCH这四个命令是我们实现事务的基石。相信对有关系型数据库开发经验的开发者而言这一概念并不陌生,即便如此,我们还是会简要的列出Redis中事务的实现特征: 1). 在事务中的所有命令都将会被串行化的顺序执行,事务执行期间,Redis不会再为其它客户端的请求提供任何服务,从而保证了事物中的所有命令被原子的执行。 2). 和关系型数据库中的事务相比,在Redis事务中如果有某一条命令执行失败,其后的命令仍然会被继续执行。 3). 我们可以通过MULTI命令开启一个事务,有关系型数据库开发经验的人可以将其理解为"BEGIN TRANSACTION"语句。在该语句之后执行的命令都将被视为事务之内的操作,最后我们可以通过执行EXEC/DISCARD命令来提交/回滚该事务内的所有操作

Redis学习手册(事务)

丶灬走出姿态 提交于 2020-02-05 13:41:10
一、概述: 和众多其它数据库一样,Redis作为NoSQL数据库也同样提供了事务机制。在Redis中,MULTI/EXEC/DISCARD/WATCH这四个命令是我们实现事务的基石。相信对有关系型数据库开发经验的开发者而言这一概念并不陌生,即便如此,我们还是会简要的列出Redis中事务的实现特征: 1). 在事务中的所有命令都将会被串行化的顺序执行,事务执行期间,Redis不会再为其它客户端的请求提供任何服务,从而保证了事物中的所有命令被原子的执行。 2). 和关系型数据库中的事务相比,在Redis事务中如果有某一条命令执行失败,其后的命令仍然会被继续执行。 3). 我们可以通过MULTI命令开启一个事务,有关系型数据库开发经验的人可以将其理解为"BEGIN TRANSACTION"语句。在该语句之后执行的命令都将被视为事务之内的操作,最后我们可以通过执行EXEC/DISCARD命令来提交/回滚该事务内的所有操作。这两个Redis命令可被视为等同于关系型数据库中的COMMIT/ROLLBACK语句。 4). 在事务开启之前,如果客户端与服务器之间出现通讯故障并导致网络断开,其后所有待执行的语句都将不会被服务器执行。然而如果网络中断事件是发生在客户端执行EXEC命令之后,那么该事务中的所有命令都会被服务器执行。 5). 当使用Append-Only模式时