Redis4.0新特性

在12月初,redis发布了4.0-rc1。其中做了很多新特性的介绍。本文就来简单说下有哪些东西。

不过在没过几天之后又发布了redis 4.0-rc2,做了很多紧急修复。不过本来也不是正式版,问题很多也很正常。大家可以自己下载来玩玩,不要用于生产环境。

新特性如下:

模块系统

这个可以说是redis4.0最大的一个变化了。它可以让用户自己编写redis代码去扩展redis功能。可以实现自己的数据结构和相关的功能接口。

作者自己就通过这个模块系统做了神经网络数据模型。也有很多人通过这个系统开发了限速系统、索引系统等。

这个功能给redis带来了无限的可能性,让redis不只是单纯的k-v存储了。

其实优酷有个团队自己本身也有对redis进行封装,也就是做了这样的事情。现在想想,redis本身提供了支持,提供了高层api,这样的实现性能等方面一定会有很大提升。

改进主从复制PSYNC2.0

在之前redis的复制,一种是全量复制,也就是在redis从服务器宕机之后,重连需要全量复制,性能很差。

后来引入了PSYNC进行部分赋值。主从会维护一个偏移量,当从宕机之后,再启动的时候可以进行部分复制就好了。

4.0 中对PSYNC进行了改进,引入了 tag 标签,对于每次复制,都由 标签+偏移量 来定义,并存储在RDB文件中,这样,各个slave中都记录了标签和偏移量,相当于互相之间都认识了,当某一个slave变为master之后,还可以通过 标签+偏移量 来使用 PSYNC 进行部分重新复制。

缓存回收的优化

redis 4.0 对现有的回收策略进行了优化,使其更加健壮、快速、精准。

同时还引入了新的回收策略LFU(Least Frequently Used),对最不常用的缓存数据进行清理。

非阻塞删除UNLINK

之前删除键,使用DEL命令,当键比较大的时候,性能会比较差,而且是单线程阻塞,导致其他线程的执行可能超时。redis4.0新增了UNLINK命令来异步删除,先删除键的引用,然后后台启用新的线程去删除键。

同样,FLUSHALL和FLUSHDB也增加了ASYNC参数去异步操作。

新的内存监控命令

MEMORY有更多的参数,可以监控内存数据。

查看某个key的内存使用、查看内存使用细节、申请释放内存、深入查看内存分配的内部状态。

具体可以通过MEMORY HELP查看。

Redis 集群对 NAT / Docker 的支持

这个可以在redis.conf文件中配置,里面也有详细的介绍。

优化

redis现在可以是用更少的内存存储以往相同的数据。

另外还有很多小的优化和特性,具体看这里

模块系统应该是这个版本最大的特性了,当然,由于刚出来,问题也很多。所以再次提醒大家玩玩就好。

本文原创于赵伊凡BLOG转载注明出处。

git配置管理生成多个ssh的key

由于公司的一些原因,需要弄两个git的ssh的key,当然很多人也想一个弄公司的gitlab,一个弄github用。都是一个需求。虽然在生成的时候,发现他会提示你输入文件名,但是我直接输入了新的一个一样不好用。后来才知道需要再配置一下。

注:本文以没有设置全局用户名和邮箱为前提,如果设置了的话,可以通过如下命令去除,在对应的仓库里设置即可。

git config --global --unset user.name
git config --global --unset user.email

生成ssh key

首先我们需要生成公私钥文件。在~/.ssh目录下执行。(C:/User/xxx/.ssh)

ssh-keygen -t rsa -C "yourmail@gmail.com"

正常情况一路回车到最后,但是如果要生成两个的话,第二次会把第一次的覆盖。所以在提示“Enter file in witch to save the key”的时候,输入你要生成key的名字就好了。比如两次命令生成的两个文件分别是a和b。

这样在~/.ssh文件夹下,会新生成四个文件,分别是a、a.pub、b、b.pub。怎么用应该知道吧,就是把.pub文件的内容复制到对应的服务的地方就好了。

正常一个的时候,我们到这里就结束了。但是要用两个的时候,还得干点别的事情。

添加私钥

首先需要打开ssh-agent,如果是官方git客户端的话,可以直接输入ssh-agent -s,如果是msysgit这种的客户端的话,就输入eval `ssh-agent -s`就好了。第一种不生效试试第二种也是一样的。

接下来就需要添加密钥了。

ssh-add ~/.ssh/a
ssh-add ~/.ssh/b

到此就完事了。

配置config文件

创建个config文件在~/.ssh下面。直接在这个文件夹下创建出这个文件,然后填充如下内容。

# a
Host gitlaba.com
	HostName gitlaba.com
	PreferredAuthentications publickey
	IdentityFile ~/.ssh/a
	User yourname

# b
Host gitlab.b.com
	HostName gitlab.b.com
	PreferredAuthentications publickey
	IdentityFile ~/.ssh/b
	User yourname

保存。这时候就完事了~

解释一下,Host就是gitlab的地址,HostName用一样的就好。IdentityFile这里要填写对应的私钥文件(不加.pub),User其实是可以随便填。

验证一下

输入如下命令可以验证。

ssh -T git@a.com

如果提示你Welcome to gitlab xxx!的话,就是对的,github也会有另一个提示。如果提示没有权限那就还是有问题。可以通过下面命令打开调试模式看,这里就不说了,一般都是配置文件有问题。

ssh -vT git@a.com

本文远程于赵伊凡BLOG转载请注明出处。