使用Lua脚本的好处:
- 减少网络开销。可以将多个请求通过脚本的形式一次发送,减少网络时延
- 原子操作。redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。因此在编写脚本的过程中无需担心会出现竞态条件,无需使用事务。
- 复用。客户端发送的脚步会永久存在redis中,这样,其他客户端可以复用这一脚本而不需要使用代码完成相同的逻辑。
调用Lua脚本的语法:
使用Lua脚本的好处:
调用Lua脚本的语法:
OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。
本文对OAuth 2.0的设计思路和运行流程,做一个简明通俗的解释,主要参考材料为RFC 6749。
为了理解OAuth的适用场合,让我举一个假设的例子。
有一个”云冲印”的网站,可以将用户储存在Google的照片,冲印出来。用户为了使用该服务,必须让”云冲印”读取自己储存在Google上的照片。
在学习PostgreSQL的过程中,发现PgSQL中可以设置一些系统环境变量,以及同名的数据库、同名的数据库用户,对于新手来说可能回产生一些困扰。
系统用户:指操作系统用户,在cat /etc/passwd中可以查看的用户。比方说超级用户 root 、执行PgSQL的用户postgre、执行mysql的用户mysql等。
角色:数据库中的用户,在psql的 shell 中可以通过 select rolname from pg_roles; 查看到的用户。
数据库:数据库名,可以通过psql -l 查看。
认证是数据库服务器对客户端用户身份鉴别的过程,并且确定客户端以该用户是否可以连接数据库服务器。PostgreSQL提供多种不同的客户端认证方式,而pg_hba.conf就是客户端认证的配置文件,pg_hba即PostGreSQL host-base authentication的简称。
app.json文件用来对微信小程序进行全局配置,决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等。下面对app.json文件进行逐个分析:
Tips : 该文件时一个json文件,故不支持注释
本文翻译自官方mysql 5.7使用手册,参考原文地址:https://dev.mysql.com/doc/refman/5.7/en/mysql-nutshell.html
1.1 要求mysql.user表中plug字段不能为空,如果为空,则该用户被禁止使用。
1.2 增加密码过期策略
1.3 帐户可以加锁解锁
1.4 使用mysql_ssl_rsa_setup
工具能够更容易创建使用ssl
本文翻译自官方mysql 5.7使用手册,参考原文地址:https://dev.mysql.com/doc/refman/5.7/en/features.html
1. 使用C和C++编写
2. 使用多种不同的编译器测试
3. 可在多个不同的平台中运行,可参考:https://www.mysql.com/support/supportedplatforms/database.html
本来是在学习PostgreSQL,想安装个mySQL 5.7 做一些实践比较,但发现 mysql5.7在centos 7.2上,使用 YUM 怎么也安装不上。刚开始是和MariaDB冲突(centos7.2默认自带mariaDB),使用
rpm -e --nodeps mariadb-libs-5.5.44-2.el7.centos.x86_64
强制卸载后,紧接又提示:
2:postfix-2.10.1-6.el7.x86_64 有缺少的需求 libmysqlclient.so.18()(64bit) 2:postfix-2.10.1-6.el7.x86_64 有缺少的需求 libmysqlclient.so.18(libmysqlclient_18)(64bit)
无奈之下,才写了这一篇安装mysql5.7的笔记。
中文官方文档:https://mariadb.com/kb/zh-cn/
查看YUM可安装的版本:http://yum.mariadb.org/
[mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.2.9/centos7-amd64/ gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
官方地址:https://www.postgresql.org,中文地址:http://www.postgres.cn/index.php/home
官方下载地址:https://www.postgresql.org/ftp/source/
官方中文文档:http://www.postgres.cn/docs/9.6/index.html
本人仅介绍PostgreSQL的源码安装,其他的安装方式(YUM安装),请参考:https://www.postgresql.org/download/linux/redhat/
GO中的net/url包,实现对URL的处理。
func QueryEscape(s string) string
QueryEscape函数对s进行转码使之可以安全的用在URL查询里。
func QueryUnescape(s string) (string, error)
QueryUnescape函数用于将QueryEscape转码的字符串还原。它会把%AB改为字节0xAB,将’+’改为’ ‘。如果有某个%后面未跟两个十六进制数字,本函数会返回错误。
本文章是学习Go中net包的一篇笔记,记录 net 包的一些方法的使用。
1、func SplitHostPort(hostport string) (host, port string, err error)
函数将格式为”host:port”、”[host]:port”或”[ipv6-host%zone]:port”的网络地址分割为host或ipv6-host%zone和port两个部分。
几天前,我写了一篇文章来说明golang中channel的使用规范。在reddit和HN,那篇文章收到了很多赞同,但是我也收到了下面几个关于Go channel设计和规范的批评:
本文不详细解释这三个名词的意思,下面有一篇文章,不懂的同学可以参考看看:http://www.cnblogs.com/work115/p/5620272.html
Goroutine 奉行通过通信来共享内存,而不是共享内存来通信。使用goroutine很简单,只需要用到一个关键字go,我们用一段代码来示例一下如何使用go关键字
以下设计模式和应用场景来自Google IO上的关于Goroutine的PPT:https://talks.golang.org/2012/concurrency.slide
不知道你有没有注意到一个现象,还是这段代码,如果我跑在两个goroutines里面的话:
var quit chan int = make(chan int) func loop() { for i := 0; i < 10; i++ { fmt.Printf("%d ", i) } quit <- 0 } func main() { go loop() // 开两个goroutine跑函数loop, loop函数负责打印10个数 go loop() for i := 0; i < 2; i++ { <- quit } }
如果不是我对真正并行的线程的追求,就不会认识到Go有多么的迷人。
Go语言从语言层面上就支持了并发,这与其他语言大不一样,不像以前我们要用Thread库 来新建线程,还要用线程安全的队列库来共享数据。
以下是我入门的学习笔记。
问题:
fileName := "/Users/my/tests/perm_file" f, _ := os.OpenFile(fileName, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666) f.Close()
上述代码是打开一个文件,如果文件不存在则创建一个新文件,同时权限设置为0666(-rw-rw-rw-),但实际生成的文件权限可能与你认为的不一致:
go中对文件和目录的操作主要集中在os包中,下面对go中用到的对文件和目录的操作,做一个总结笔记。在go中的文件和目录涉及到两种类型,一个是 type File struct,另一个是type Fileinfo interface,来看下这两种类型的定义: