老G

LeoGO


  • 首页

  • 归档

MySQL my.cnf

发表于 2018-05-29 | 分类于 MySQL

配置样例

首先提供一个我使用的配置样例

[client]  
#password=88888888  
socket=/data/var/mysql/mysql.sock  

[mysqld_safe]  
pid-file=/data/var/mysql/mysqld.pid  
log-error = /data/local/mysql-5.7.19/log/mysql-error.log  

[mysql]  
socket=/data/var/mysql/mysql.sock  

[mysqld]  
user = mysql  
port = 31306  
datadir = /data/var/mysql  
socket=/data/var/mysql/mysql.sock  
symbolic-links=0  
########basic settings########  
server-id = 11  
#bind_address = 10.166.224.32  
autocommit = 1  
character_set_server=utf8mb4  
skip_name_resolve = 1  
max_connections = 800  
max_connect_errors = 100  
transaction_isolation = READ-COMMITTED  
explicit_defaults_for_timestamp = 1  
join_buffer_size = 128M  
tmp_table_size = 128M  
tmpdir = /dev/shm  
max_allowed_packet = 16M  
sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER"  
interactive_timeout = 60  
wait_timeout = 60  
read_buffer_size = 16M  
read_rnd_buffer_size = 32M  
sort_buffer_size = 32M  
########log settings########  
#log_error = /data/local/mysql-5.7.19/log/mysql-error.log  
slow_query_log = 1  
slow_query_log_file = /data/local/mysql-5.7.19/log/mysql-slow.log  
log_queries_not_using_indexes = 1  
log_slow_admin_statements = 1  
log_slow_slave_statements = 1  
log_throttle_queries_not_using_indexes = 10  
expire_logs_days = 90  
long_query_time = 1  
min_examined_row_limit = 100  
########replication settings########  
#master_info_repository = TABLE  
#relay_log_info_repository = TABLE  
log_bin = /data/local/mysql-5.7.19/log/mysql-bin  
#sync_binlog = 4  
gtid_mode = on  
enforce_gtid_consistency = 1  
#log_slave_updates  
binlog_format = row  
#relay_log = /data/local/mysql-5.7.19/log/mysql-relay.log  
#relay_log_recovery = 1  
#binlog_gtid_simple_recovery = 1  
#slave_skip_errors = ddl_exist_errors  
########innodb settings########  
innodb_page_size = 16K  
innodb_buffer_pool_size = 4G  
#innodb_buffer_pool_instances = 8  
#innodb_buffer_pool_load_at_startup = 1  
#innodb_buffer_pool_dump_at_shutdown = 1  
#innodb_lru_scan_depth = 2000  
innodb_lock_wait_timeout = 5  
#innodb_io_capacity = 4000  
#innodb_io_capacity_max = 8000  
#innodb_flush_method = O_DIRECT  
#innodb_log_group_home_dir = /data/local/mysql-5.7.19/log/redolog/  
#innodb_undo_directory = /data/local/mysql-5.7.19/log/undolog/  
#innodb_undo_logs = 128  
#innodb_undo_tablespaces = 0  
#innodb_flush_neighbors = 1  
#innodb_log_file_size = 4G  
#innodb_log_buffer_size = 16M  
#innodb_purge_threads = 4  
innodb_large_prefix = 1  
innodb_thread_concurrency = 64  
#innodb_print_all_deadlocks = 1  
#innodb_strict_mode = 1  
innodb_sort_buffer_size = 64M  
########semi sync replication settings########  
#plugin_dir=/data/local/mysql-5.7.19/lib/plugin  
#plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"  
#loose_rpl_semi_sync_master_enabled = 1  
#loose_rpl_semi_sync_slave_enabled = 1  
#loose_rpl_semi_sync_master_timeout = 5000  

[mysqld-5.7]  
#innodb_buffer_pool_dump_pct = 40  
innodb_page_cleaners = 4  
#innodb_undo_log_truncate = 1  
#innodb_max_undo_log_size = 2G  
#innodb_purge_rseg_truncate_frequency = 128  
#binlog_gtid_simple_recovery=1  
log_timestamps=system  
#transaction_write_set_extraction=MURMUR32  
#show_compatibility_56=on  

详细解释

[client]

#password=88888888
mysql默认密码
socket=/data/var/mysql/mysql.sock
mysql以socket方式运行的sock文件位置

[mysqld_safe]
log-error=/var/log/mysqld.log
错误日志位置
pid-file=/var/run/mysqld/mysqld.pid
进程id文件

[mysql]
socket=/data/var/mysql/mysql.sock
mysql以socket方式运行的sock文件位置

[mysqld]
user = mysql
mysql以什么用户运行
port = 31306
mysql运行在哪个端口
datadir = /data/var/mysql/
mysql的数据目录
socket=/data/var/mysql/mysql.sock
mysql以socket方式运行的sock文件位置
symbolic-links=0
是否支持符号链接,即数据库或表可以存储在my.cnf中指定datadir之外的分区或目录,为0不开启

########basic settings########
server-id = 11
mysql的服务器分配id,在启用主从和集群的时候必须指定,每个节点必须不同

#bind_address = 10.166.224.32
mysql监听的ip地址,如果是127.0.0.1,表示仅本机访问
autocommit = 1
数据修改是否自动提交,为0不自动提交
character_set_server=utf8mb4
服务器使用的字符集
skip_name_resolve = 1
禁用DNS主机名查找,启用以后用内网地址向mysqlslap请求响应快了一半
max_connections = 800
mysql最大连接数

max_connect_errors = 1000
某台host连接错误次数等于max_connect_errors(默认10) ,主机’host_name’再次尝试时被屏蔽。可有效反的防止dos攻击
transaction_isolation = READ-COMMITTED
数据库事务隔离级别
1.READ-UNCOMMITTED(读取未提交内容)级别

  1. READ-COMMITTED(读取提交内容)
  2. REPEATABLE-READ(可重读)
    4.SERIERLIZED(可串行化)
    默认级别REPEATABLE-READ
    explicit_defaults_for_timestamp = 1
    mysql中TIMESTAMP类型和其他的类型有点不一样(在没有设置explicit_defaults_for_timestamp=1的情况下)
    join_buffer_size = 128M
    当我们的join是ALL,index,rang或者Index_merge的时候使用的buffer。 实际上这种join被称为FULL JOIN
    tmp_table_size = 128M
    规定了内部内存临时表的最大值,每个线程都要分配。(实际起限制作用的是tmp_table_size和max_heap_table_size的最小值。)如果内存临时表超出了限制,MySQL就会自动地把它转化为基于磁盘的MyISAM表,存储在指定的tmpdir目录下
    tmpdir = /dev/shm/mysql-tmp/
    保存临时文件的目录
    max_allowed_packet = 16M
    mysql最大接受的数据包大小
    sql_mode = “STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER”
    sql_mode 模式,定义了你MySQL应该支持的sql语法,对数据的校验等等,限制一些所谓的‘不合法’的操作
    interactive_timeout = 60
    服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端
    wait_timeout = 60
    服务器关闭非交互连接之前等待活动的秒数,在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义)
    read_buffer_size = 16M
    读入缓冲区的大小,将对表进行顺序扫描的请求将分配一个读入缓冲区,MySQL会为它分配一段内存缓冲区
    read_rnd_buffer_size = 32M
    随机读缓冲区大小,当按任意顺序读取行时(列如按照排序顺序)将分配一个随机读取缓冲区,进行排序查询时,MySQL会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度
    sort_buffer_size = 32M
    是一个connection级参数,在每个connection第一次需要使用这个buffer的时候,一次性分配设置的内存

########log settings########

#log_error = /data/local/mysql-5.7.19/log/mysql-error.log
错误日志位置
slow_query_log = 1
是否开启慢查询日志收集
slow_query_log_file = /data/local/mysql-5.7.19/log/mysql-slow.log
慢查询日志位置
log_queries_not_using_indexes = 1
是否记录未使用索引的语句
log_slow_admin_statements = 1
慢查询也记录那些慢的optimize table,analyze table和alter table语句
log_slow_slave_statements = 1
记录由Slave所产生的慢查询
log_throttle_queries_not_using_indexes = 10
设定每分钟记录到日志的未使用索引的语句数目,超过这个数目后只记录语句数量和花费的总时间
expire_logs_days = 90
日志自动过期清理天数
long_query_time = 1
设置记录慢查询超时时间
min_examined_row_limit = 100
查询检查返回少于该参数指定行的SQL不被记录到慢查询日志

########replication settings########

#master_info_repository = TABLE
从机保存主节点信息方式,设成file时 会生成master.info 和 relay-log.info2个文件,设成table,信息就会存在mysql.master_slave_info表中。不管是设置的哪种值,都不要移动或者编辑相关的文件和表

#relay_log_info_repository = TABLE
用于保存slave读取relay log的位置信息,可选值为“FILE”、“TABLE”,以便crash重启后继续恢复
log_bin = /data/local/mysql-5.7.19/log/mysql-bin
binlog的保存位置,不能指定确定的文件名如mysql-bin.log,只能指定位置和前缀,会生成以前缀为开头的一系列文件

#sync_binlog = 4
这个参数是对于MySQL系统来说是至关重要的,他不仅影响到Binlog对MySQL所带来的性能损耗,而且还影响到MySQL中数据的完整性。对于“sync_binlog”参数的各种设置的说明如下:
sync_binlog=0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。
sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。
在MySQL中系统默认的设置是sync_binlog=0,也就是不做任何强制性的磁盘刷新指令,这时候的性能是最好的,但是风险也是最大的。因为一旦系统Crash,在binlog_cache中的所有binlog信息都会被丢失。而当设置为“1”的时候,是最安全但是性能损耗最大的设置。因为当设置为1的时候,即使系统Crash,也最多丢失binlog_cache中未完成的一个事务,对实际数据没有任何实质性影响。从以往经验和相关测试来看,对于高并发事务的系统来说,“sync_binlog”设置为0和设置为1的系统写入性能差距可能高达5倍甚至更多。
gtid_mode = on
启用gtid类型,否则就是普通的复制架构
enforce_gtid_consistency = 1
强制GTID的一致性

#log_slave_updates
slave更新是否记入日志,在做双主架构时异常重要,影响到双主架构是否能互相同步
binlog_format = row
binlog日志格式,可选值“MIXED”、“ROW”、“STATEMENT”,在5.6版本之前默认为“STATEMENT”,5.6之后默认为“MIXED”;因为“STATEMENT”方式在处理一些“不确定”性的方法时会造成数据不一致问题,我们建议使用“MIXED”或者“ROW”

#relay_log = /data/local/mysql-5.7.19/log/mysql-relay.log
从机保存同步中继日志的位置

#relay_log_recovery = 1
当slave从库宕机后,假如relay-log损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的relay-log,并且重新从master上获取日志,这样就保证了relay-log的完整性

#binlog_gtid_simple_recovery = 1
这个参数控制了当mysql启动或重启时,mysql在搜寻GTIDs时是如何迭代使用binlog文件的。 这个选项设置为真,会提升mysql执行恢复的性能。因为这样mysql-server启动和binlog日志清理更快

#slave_skip_errors = ddl_exist_errors
跳过指定error no类型的错误,设成all 跳过所有错误

########innodb settings########
innodb_page_size = 16K
innodb每个数据页大小,这个参数在一开始初始化时就要加入my.cnf里,如果已经创建了表,再修改,启动MySQL会报错
innodb_buffer_pool_size = 4G
缓存innodb表的索引,数据,插入数据时的缓冲,专用mysql服务器设置的大小: 操作系统内存的70%-80%最佳

#innodb_buffer_pool_instances = 8
可以开启多个内存缓冲池,把需要缓冲的数据hash到不同的缓冲池中,这样可以并行的内存读写

#innodb_buffer_pool_load_at_startup = 1
默认为关闭OFF。如果开启该参数,启动MySQL服务时,MySQL将本地热数据加载到InnoDB缓冲池中

#innodb_buffer_pool_dump_at_shutdown = 1
默认为关闭OFF。如果开启该参数,停止MySQL服务时,InnoDB将InnoDB缓冲池中的热数据保存到本地硬盘

#innodb_lru_scan_depth = 2000
根据 官方文档 描述,它会影响page cleaner线程每次刷脏页的数量, 这是一个每1秒 loop一次的线程
innodb_lock_wait_timeout = 5
事务等待获取资源等待的最长时间,超过这个时间还未分配到资源则会返回应用失败;参数的时间单位是秒

#innodb_io_capacity = 4000

#innodb_io_capacity_max = 8000
这两个设置会影响InnoDB每秒在后台执行多少操作. 大多数写IO(除了写InnoDB日志)是后台操作的. 如果你深度了解硬件性能(如每秒可以执行多少次IO操作),则使用这些功能是很可取的,而不是让它闲着

#innodb_flush_method = O_DIRECT
默认值为 fdatasync. 如果使用 硬件RAID磁盘控制器, 可能需要设置为 O_DIRECT. 这在读取InnoDB缓冲池时可防止“双缓冲(double buffering)”效应,否则会在文件系统缓存与InnoDB缓存间形成2个副本(copy). 如果不使用硬件RAID控制器,或者使用SAN存储时, O_DIRECT 可能会导致性能下降

#innodb_log_group_home_dir = /data/local/mysql-5.7.19/log/redolog/
innodb重做日志保存目录

#innodb_undo_directory = /data/local/mysql-5.7.19/log/undolog/
innodb回滚日志保存目录

#innodb_undo_logs = 128
undo回滚段的数量, 至少大于等于35,默认128

#innodb_undo_tablespaces = 0
用于设定创建的undo表空间的个数,在mysql_install_db时初始化后,就再也不能被改动了;默认值为0,表示不独立设置undo的tablespace,默认记录到ibdata中;否则,则在undo目录下创建这么多个undo文件,例如假定设置该值为4,那么就会创建命名为undo001~undo004的undo tablespace文件,每个文件的默认大小为10M。修改该值会导致Innodb无法完成初始化,数据库无法启动,但是另两个参数可以修改

#innodb_flush_neighbors = 1
InnoDB存储引擎在刷新一个脏页时,会检测该页所在区(extent)的所有页,如果是脏页,那么一起刷新。这样做的好处是通过AIO可以将多个IO写操作合并为一个IO操作。对于传统机械硬盘建议使用,而对于固态硬盘可以关闭。

#innodb_log_file_size = 4G
这个值定义了日志文件的大小,innodb日志文件的作用是用来保存redo日志。一个事务对于数据或索引的修改往往对应到表空间中的随机的位置,因此当刷新这些修改到磁盘中就会引起随机的I/O,而随机的I/O往往比顺序的I/O更加昂贵的开销,因为随机的I/O需要更多的开销来定位到指定的位置。innodb使用日志来将随机的I/O转为顺序的I/O,只要日志文件是安全的,那么事务就是永久的,尽管这些改变还没有写到数据文件中,如果出现了当机或服务器断电的情况,那么innodb也可以通过日志文件来恢复以及提交的事务。但是日志文件是有一定的大小的,所以必须要把日志文件记录的改变写到数据文件中,innodb对于日志文件的操作是循环的,即当日志文件写满后,会将指针重新移动到文件开始的地方重新写,但是它不会覆盖那些还没有写到数据文件中的日志,因为这是唯一记录了事务持久化的记录
如果对 Innodb 数据表有大量的写入操作,那么选择合适的 innodb_log_file_size 值对提升MySQL性能很重要。然而设置太大了,就会增加恢复的时间,因此在MySQL崩溃或者突然断电等情况会令MySQL服务器花很长时间来恢复

#innodb_log_buffer_size = 16M
事务在内存中的缓冲。 分配原 则:控制在2-8M.这个值不用太多的。他里面的内存一般一秒钟写到磁盘一次

#innodb_purge_threads = 4
控制是否使用,使用几个独立purge线程(清除二进制日志)
innodb_large_prefix = 1
mysql在5.6之前一直都是单列索引限制767,起因是256×3-1。这个3是字符最大占用空间(utf8)。但是在5.6以后,开始支持4个字节的uutf8。255×4>767, 于是增加了这个参数。这个参数默认值是OFF。当改为ON时,允许列索引最大达到3072
innodb_thread_concurrency = 64
InnoDB kernel并发最大的线程数。 1) 最少设置为(num_disks+num_cpus)*2。 2) 可以通过设置成1000来禁止这个限制

#innodb_print_all_deadlocks = 1
是否将死锁相关信息保存到MySQL 错误日志中

#innodb_strict_mode = 1
开启InnoDB严格检查模式,尤其采用了页数据压缩功能后,最好是开启该功能。开启此功能后,当创建表(CREATE TABLE)、更改表(ALTER TABLE)和创建索引(CREATE INDEX)语句时,如果写法有错误,不会有警告信息,而是直接抛出错误,这样就可直接将问题扼杀在摇篮里
innodb_sort_buffer_size = 64M
ORDER BY 或者GROUP BY 操作的buffer缓存大小

########semi sync replication settings########

#plugin_dir=/data/local/mysql-5.7.19/lib/plugin
指定mysql的插件目录

#plugin_load = “rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so”
指定载入哪些插件

#loose_rpl_semi_sync_master_enabled = 1
控制主库上是否开启semisync

#loose_rpl_semi_sync_slave_enabled = 1
控制备库是否开启semisync

#loose_rpl_semi_sync_master_timeout = 5000
单位毫秒,防止半同步复制在没有收到确认的情况下,发送堵塞。master在超时之前没有收到确认,将恢复到异步复制,继续执行半同步没有进行的操作

[mysqld-5.7]

#innodb_buffer_pool_dump_pct = 40
表示转储每个bp instance LRU上最热的page的百分比。通过设置该参数可以减少转储的page数
innodb_page_cleaners = 4
为了提升扩展性和刷脏效率,在5.7.4版本里引入了多个page cleaner线程。从而达到并行刷脏的效果
在该版本中,Page cleaner并未和buffer pool绑定,其模型为一个协调线程 + 多个工作线程,协调线程本身也是工作线程。因此如果innodb_page_cleaners设置为8,那么就是一个协调线程,加7个工作线程

#innodb_undo_log_truncate = 1
是否开启在线回收(收缩)undo log日志文件,支持动态设置

#innodb_max_undo_log_size = 2G
当超过这个阀值(默认是1G),会触发truncate回收(收缩)动作,truncate后空间缩小到10M

#innodb_purge_rseg_truncate_frequency = 128
控制回收(收缩)undo log的频率。undo log空间在它的回滚段没有得到释放之前不会收缩, 想要增加释放回滚区间的频率,就得降低设定值

#binlog_gtid_simple_recovery=1
这个参数控制了当mysql启动或重启时,mysql在搜寻GTIDs时是如何迭代使用binlog文件的。 这个选项设置为真,会提升mysql执行恢复的性能。因为这样mysql-server启动和binlog日志清理更快。该参数为真时,mysql-server只需打开最老的和最新的这2个binlog文件
log_timestamps=system
在MySQL 5.7.2 新增了 log_timestamps 这个参数,该参数主要是控制 error log、genera log,等等记录日志的显示时间参数。 在 5.7.2 之后改参数为默认 UTC 这样会导致日志中记录的时间比中国这边的慢,导致查看日志不方便。修改为 SYSTEM 就能解决问题

#transaction_write_set_extraction=MURMUR32
这个神奇的参数5.7.6版本引入,用于定义一个记录事务的算法,这个算法使用hash标识来记录事务。如果使用MGR,那么这个hash值需要用于分布式冲突检测何处理,在64位的系统,官网建议设置该参数使用 XXHASH64 算法。如果线上并没有使用该功能,应该设为off

#show_compatibility_56=on
从mysql5.7.6开始information_schema.global_status已经开始被舍弃,为了兼容性,此时需要打开 show_compatibility_56

MySQL定时备份

发表于 2018-05-29 | 分类于 mysql

mysql backup crontab

sudo apt-get install percona-xtrabackup

systemctl start crond
systemctl enable crond
chmod 755 /root/script/backup_complete.sh
chmod 755 backup_increment.sh
0 4 * * 6 /root/script/backup_complete.sh
0 2 * * 2,4,7 /root/script/backup_increment.sh
10 0 * * * /root/bin/innobackup.sh

rabbitmq新手

发表于 2018-04-28 | 分类于 消息队列

rabbitmq 新手指南

1.环境要求
rabbitmq(3.7.x) 要求 erlang(19.3 20.3.x)

2.环境变量配置

1
2
3
ERLANG_HOME=D:\1-develop\erl9.3
RABBITMQ_SERVER=D:\1-develop\RabbitMQ\rabbitmq_server-3.7.4
PATH=%ERLANG_HOME%\bin;%RABBITMQ_SERVER%\sbin;

3.安装管理插件

rabbitmq-plugins enable rabbitmq_management

4.常用命令

rabbitmqctl
rabbitmq-defaults
rabbitmq-diagnostics
rabbitmq-echopid
rabbitmq-env
rabbitmq-plugins
rabbitmq-server
rabbitmq-service 

redis安装指南

发表于 2018-04-27 | 分类于 redis

下载地址

Window安装指南

1
2
3
4
5
6
7
8
9
10
11
12
13
1. 解压缩
2. redis-server.exe redis.window.conf
3. redis-cli.exe -h 127.0.0.1 -p 6379
4. redis-server –service-install redis.windows.conf –loglevel verbose
5. redis-server --service-uninstall
6. redis-server --service-stop
7. redis-server --service-start
8. redis-server --service-install --service-name redisService1 --port 10001
9. redis-server --service-start --service-name redisService1
10. redis-server --service-install --service-name redisService2 --port 10002
11. redis-server --service-start --service-name redisService2
12. redis-server --service-install --service-name redisService3 --port 10003
13. redis-server --service-start --service-name redisService3

redis-benchmark

redis-benchmark [-h <host>] [-p <port>] [-c <clients>] [-n <requests]> [-k <boolean>]

 -h <hostname>      Server hostname (default 127.0.0.1)
 -p <port>          Server port (default 6379)
 -s <socket>        Server socket (overrides host and port)
 -a <password>      Password for Redis Auth
 -c <clients>       Number of parallel connections (default 50)
 -n <requests>      Total number of requests (default 100000)
 -d <size>          Data size of SET/GET value in bytes (default 2)
 -dbnum <db>        SELECT the specified db number (default 0)
 -k <boolean>       1=keep alive 0=reconnect (default 1)
 -r <keyspacelen>   Use random keys for SET/GET/INCR, random values for SADD
  Using this option the benchmark will expand the string __rand_int__
  inside an argument with a 12 digits number in the specified range
  from 0 to keyspacelen-1. The substitution changes every time a command
  is executed. Default tests use this to hit random keys in the
  specified range.
 -P <numreq>        Pipeline <numreq> requests. Default 1 (no pipeline).
 -q                 Quiet. Just show query/sec values
 --csv              Output in CSV format
 -l                 Loop. Run the tests forever
 -t <tests>         Only run the comma separated list of tests. The test
                    names are the same as the ones produced as output.
 -I                 Idle mode. Just open N idle connections and wait.

Run the benchmark with the default configuration against 127.0.0.1:6379:
$ redis-benchmark

Use 20 parallel clients, for a total of 100k requests, against 192.168.1.1:
$ redis-benchmark -h 192.168.1.1 -p 6379 -n 100000 -c 20

Fill 127.0.0.1:6379 with about 1 million keys only using the SET test:
$ redis-benchmark -t set -n 1000000 -r 100000000

Benchmark 127.0.0.1:6379 for a few commands producing CSV output:
$ redis-benchmark -t ping,set,get -n 100000 --csv

Benchmark a specific command line:
$ redis-benchmark -r 10000 -n 10000 eval 'return redis.call("ping")' 0

Fill a list with 10000 random elements:
$ redis-benchmark -r 10000 -n 10000 lpush mylist __rand_int__

redis-check-aof

redis.windows.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
# Redis configuration file example

# Note on units: when memory size is needed, it is possible to specify
# it in the usual form of 1k 5GB 4M and so forth:
#
# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes
#
# units are case insensitive so 1GB 1Gb 1gB are all the same.

################################## INCLUDES ###################################

# Include one or more other config files here. This is useful if you
# have a standard template that goes to all Redis servers but also need
# to customize a few per-server settings. Include files can include
# other files, so use this wisely.
#
# Notice option "include" won't be rewritten by command "CONFIG REWRITE"
# from admin or Redis Sentinel. Since Redis always uses the last processed
# line as value of a configuration directive, you'd better put includes
# at the beginning of this file to avoid overwriting config change at runtime.
#
# If instead you are interested in using includes to override configuration
# options, it is better to use include as the last line.
#
# include .\path\to\local.conf
# include c:\path\to\other.conf

################################## NETWORK #####################################

# By default, if no "bind" configuration directive is specified, Redis listens
# for connections from all the network interfaces available on the server.
# It is possible to listen to just one or multiple selected interfaces using
# the "bind" configuration directive, followed by one or more IP addresses.
#
# Examples:
#
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
#
# ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the
# internet, binding to all the interfaces is dangerous and will expose the
# instance to everybody on the internet. So by default we uncomment the
# following bind directive, that will force Redis to listen only into
# the IPv4 lookback interface address (this means Redis will be able to
# accept connections only from clients running into the same computer it
# is running).
#
# IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES
# JUST COMMENT THE FOLLOWING LINE.
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind 127.0.0.1

# Protected mode is a layer of security protection, in order to avoid that
# Redis instances left open on the internet are accessed and exploited.
#
# When protected mode is on and if:
#
# 1) The server is not binding explicitly to a set of addresses using the
# "bind" directive.
# 2) No password is configured.
#
# The server only accepts connections from clients connecting from the
# IPv4 and IPv6 loopback addresses 127.0.0.1 and ::1, and from Unix domain
# sockets.
#
# By default protected mode is enabled. You should disable it only if
# you are sure you want clients from other hosts to connect to Redis
# even if no authentication is configured, nor a specific set of interfaces
# are explicitly listed using the "bind" directive.
protected-mode yes

# Accept connections on the specified port, default is 6379 (IANA #815344).
# If port 0 is specified Redis will not listen on a TCP socket.
port 6379

# TCP listen() backlog.
#
# In high requests-per-second environments you need an high backlog in order
# to avoid slow clients connections issues. Note that the Linux kernel
# will silently truncate it to the value of /proc/sys/net/core/somaxconn so
# make sure to raise both the value of somaxconn and tcp_max_syn_backlog
# in order to get the desired effect.
tcp-backlog 511

# Unix socket.
#
# Specify the path for the Unix socket that will be used to listen for
# incoming connections. There is no default, so Redis will not listen
# on a unix socket when not specified.
#
# unixsocket /tmp/redis.sock
# unixsocketperm 700

# Close the connection after a client is idle for N seconds (0 to disable)
timeout 0

# TCP keepalive.
#
# If non-zero, use SO_KEEPALIVE to send TCP ACKs to clients in absence
# of communication. This is useful for two reasons:
#
# 1) Detect dead peers.
# 2) Take the connection alive from the point of view of network
# equipment in the middle.
#
# On Linux, the specified value (in seconds) is the period used to send ACKs.
# Note that to close the connection the double of the time is needed.
# On other kernels the period depends on the kernel configuration.
#
# A reasonable value for this option is 60 seconds.
tcp-keepalive 0

################################# GENERAL #####################################

# By default Redis does not run as a daemon. Use 'yes' if you need it.
# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
# NOT SUPPORTED ON WINDOWS daemonize no

# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
# supervised no - no supervision interaction
# supervised upstart - signal upstart by putting Redis into SIGSTOP mode
# supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
# supervised auto - detect upstart or systemd method based on
# UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
# They do not enable continuous liveness pings back to your supervisor.
# NOT SUPPORTED ON WINDOWS supervised no

# If a pid file is specified, Redis writes it where specified at startup
# and removes it at exit.
#
# When the server runs non daemonized, no pid file is created if none is
# specified in the configuration. When the server is daemonized, the pid file
# is used even if not specified, defaulting to "/var/run/redis.pid".
#
# Creating a pid file is best effort: if Redis is not able to create it
# nothing bad happens, the server will start and run normally.
# NOT SUPPORTED ON WINDOWS pidfile /var/run/redis.pid

# Specify the server verbosity level.
# This can be one of:
# debug (a lot of information, useful for development/testing)
# verbose (many rarely useful info, but not a mess like the debug level)
# notice (moderately verbose, what you want in production probably)
# warning (only very important / critical messages are logged)
loglevel notice

# Specify the log file name. Also 'stdout' can be used to force
# Redis to log on the standard output.
logfile ""

# To enable logging to the Windows EventLog, just set 'syslog-enabled' to
# yes, and optionally update the other syslog parameters to suit your needs.
# If Redis is installed and launched as a Windows Service, this will
# automatically be enabled.
# syslog-enabled no

# Specify the source name of the events in the Windows Application log.
# syslog-ident redis

# Set the number of databases. The default database is DB 0, you can select
# a different one on a per-connection basis using SELECT <dbid> where
# dbid is a number between 0 and 'databases'-1
databases 16

################################ SNAPSHOTTING ################################
#
# Save the DB on disk:
#
# save <seconds> <changes>
#
# Will save the DB if both the given number of seconds and the given
# number of write operations against the DB occurred.
#
# In the example below the behaviour will be to save:
# after 900 sec (15 min) if at least 1 key changed
# after 300 sec (5 min) if at least 10 keys changed
# after 60 sec if at least 10000 keys changed
#
# Note: you can disable saving completely by commenting out all "save" lines.
#
# It is also possible to remove all the previously configured save
# points by adding a save directive with a single empty string argument
# like in the following example:
#
# save ""

save 900 1
save 300 10
save 60 10000

# By default Redis will stop accepting writes if RDB snapshots are enabled
# (at least one save point) and the latest background save failed.
# This will make the user aware (in a hard way) that data is not persisting
# on disk properly, otherwise chances are that no one will notice and some
# disaster will happen.
#
# If the background saving process will start working again Redis will
# automatically allow writes again.
#
# However if you have setup your proper monitoring of the Redis server
# and persistence, you may want to disable this feature so that Redis will
# continue to work as usual even if there are problems with disk,
# permissions, and so forth.
stop-writes-on-bgsave-error yes

# Compress string objects using LZF when dump .rdb databases?
# For default that's set to 'yes' as it's almost always a win.
# If you want to save some CPU in the saving child set it to 'no' but
# the dataset will likely be bigger if you have compressible values or keys.
rdbcompression yes

# Since version 5 of RDB a CRC64 checksum is placed at the end of the file.
# This makes the format more resistant to corruption but there is a performance
# hit to pay (around 10%) when saving and loading RDB files, so you can disable it
# for maximum performances.
#
# RDB files created with checksum disabled have a checksum of zero that will
# tell the loading code to skip the check.
rdbchecksum yes

# The filename where to dump the DB
dbfilename dump.rdb

# The working directory.
#
# The DB will be written inside this directory, with the filename specified
# above using the 'dbfilename' configuration directive.
#
# The Append Only File will also be created inside this directory.
#
# Note that you must specify a directory here, not a file name.
dir ./

################################# REPLICATION #################################

# Master-Slave replication. Use slaveof to make a Redis instance a copy of
# another Redis server. A few things to understand ASAP about Redis replication.
#
# 1) Redis replication is asynchronous, but you can configure a master to
# stop accepting writes if it appears to be not connected with at least
# a given number of slaves.
# 2) Redis slaves are able to perform a partial resynchronization with the
# master if the replication link is lost for a relatively small amount of
# time. You may want to configure the replication backlog size (see the next
# sections of this file) with a sensible value depending on your needs.
# 3) Replication is automatic and does not need user intervention. After a
# network partition slaves automatically try to reconnect to masters
# and resynchronize with them.
#
# slaveof <masterip> <masterport>

# If the master is password protected (using the "requirepass" configuration
# directive below) it is possible to tell the slave to authenticate before
# starting the replication synchronization process, otherwise the master will
# refuse the slave request.
#
# masterauth <master-password>

# When a slave loses its connection with the master, or when the replication
# is still in progress, the slave can act in two different ways:
#
# 1) if slave-serve-stale-data is set to 'yes' (the default) the slave will
# still reply to client requests, possibly with out of date data, or the
# data set may just be empty if this is the first synchronization.
#
# 2) if slave-serve-stale-data is set to 'no' the slave will reply with
# an error "SYNC with master in progress" to all the kind of commands
# but to INFO and SLAVEOF.
#
slave-serve-stale-data yes

# You can configure a slave instance to accept writes or not. Writing against
# a slave instance may be useful to store some ephemeral data (because data
# written on a slave will be easily deleted after resync with the master) but
# may also cause problems if clients are writing to it because of a
# misconfiguration.
#
# Since Redis 2.6 by default slaves are read-only.
#
# Note: read only slaves are not designed to be exposed to untrusted clients
# on the internet. It's just a protection layer against misuse of the instance.
# Still a read only slave exports by default all the administrative commands
# such as CONFIG, DEBUG, and so forth. To a limited extent you can improve
# security of read only slaves using 'rename-command' to shadow all the
# administrative / dangerous commands.
slave-read-only yes

# Replication SYNC strategy: disk or socket.
#
# -------------------------------------------------------
# WARNING: DISKLESS REPLICATION IS EXPERIMENTAL CURRENTLY
# -------------------------------------------------------
#
# New slaves and reconnecting slaves that are not able to continue the replication
# process just receiving differences, need to do what is called a "full
# synchronization". An RDB file is transmitted from the master to the slaves.
# The transmission can happen in two different ways:
#
# 1) Disk-backed: The Redis master creates a new process that writes the RDB
# file on disk. Later the file is transferred by the parent
# process to the slaves incrementally.
# 2) Diskless: The Redis master creates a new process that directly writes the
# RDB file to slave sockets, without touching the disk at all.
#
# With disk-backed replication, while the RDB file is generated, more slaves
# can be queued and served with the RDB file as soon as the current child producing
# the RDB file finishes its work. With diskless replication instead once
# the transfer starts, new slaves arriving will be queued and a new transfer
# will start when the current one terminates.
#
# When diskless replication is used, the master waits a configurable amount of
# time (in seconds) before starting the transfer in the hope that multiple slaves
# will arrive and the transfer can be parallelized.
#
# With slow disks and fast (large bandwidth) networks, diskless replication
# works better.
repl-diskless-sync no

# When diskless replication is enabled, it is possible to configure the delay
# the server waits in order to spawn the child that transfers the RDB via socket
# to the slaves.
#
# This is important since once the transfer starts, it is not possible to serve
# new slaves arriving, that will be queued for the next RDB transfer, so the server
# waits a delay in order to let more slaves arrive.
#
# The delay is specified in seconds, and by default is 5 seconds. To disable
# it entirely just set it to 0 seconds and the transfer will start ASAP.
repl-diskless-sync-delay 5

# Slaves send PINGs to server in a predefined interval. It's possible to change
# this interval with the repl_ping_slave_period option. The default value is 10
# seconds.
#
# repl-ping-slave-period 10

# The following option sets the replication timeout for:
#
# 1) Bulk transfer I/O during SYNC, from the point of view of slave.
# 2) Master timeout from the point of view of slaves (data, pings).
# 3) Slave timeout from the point of view of masters (REPLCONF ACK pings).
#
# It is important to make sure that this value is greater than the value
# specified for repl-ping-slave-period otherwise a timeout will be detected
# every time there is low traffic between the master and the slave.
#
# repl-timeout 60

# Disable TCP_NODELAY on the slave socket after SYNC?
#
# If you select "yes" Redis will use a smaller number of TCP packets and
# less bandwidth to send data to slaves. But this can add a delay for
# the data to appear on the slave side, up to 40 milliseconds with
# Linux kernels using a default configuration.
#
# If you select "no" the delay for data to appear on the slave side will
# be reduced but more bandwidth will be used for replication.
#
# By default we optimize for low latency, but in very high traffic conditions
# or when the master and slaves are many hops away, turning this to "yes" may
# be a good idea.
repl-disable-tcp-nodelay no

# Set the replication backlog size. The backlog is a buffer that accumulates
# slave data when slaves are disconnected for some time, so that when a slave
# wants to reconnect again, often a full resync is not needed, but a partial
# resync is enough, just passing the portion of data the slave missed while
# disconnected.
#
# The bigger the replication backlog, the longer the time the slave can be
# disconnected and later be able to perform a partial resynchronization.
#
# The backlog is only allocated once there is at least a slave connected.
#
# repl-backlog-size 1mb

# After a master has no longer connected slaves for some time, the backlog
# will be freed. The following option configures the amount of seconds that
# need to elapse, starting from the time the last slave disconnected, for
# the backlog buffer to be freed.
#
# A value of 0 means to never release the backlog.
#
# repl-backlog-ttl 3600

# The slave priority is an integer number published by Redis in the INFO output.
# It is used by Redis Sentinel in order to select a slave to promote into a
# master if the master is no longer working correctly.
#
# A slave with a low priority number is considered better for promotion, so
# for instance if there are three slaves with priority 10, 100, 25 Sentinel will
# pick the one with priority 10, that is the lowest.
#
# However a special priority of 0 marks the slave as not able to perform the
# role of master, so a slave with priority of 0 will never be selected by
# Redis Sentinel for promotion.
#
# By default the priority is 100.
slave-priority 100

# It is possible for a master to stop accepting writes if there are less than
# N slaves connected, having a lag less or equal than M seconds.
#
# The N slaves need to be in "online" state.
#
# The lag in seconds, that must be <= the specified value, is calculated from
# the last ping received from the slave, that is usually sent every second.
#
# This option does not GUARANTEE that N replicas will accept the write, but
# will limit the window of exposure for lost writes in case not enough slaves
# are available, to the specified number of seconds.
#
# For example to require at least 3 slaves with a lag <= 10 seconds use:
#
# min-slaves-to-write 3
# min-slaves-max-lag 10
#
# Setting one or the other to 0 disables the feature.
#
# By default min-slaves-to-write is set to 0 (feature disabled) and
# min-slaves-max-lag is set to 10.

################################## SECURITY ###################################

# Require clients to issue AUTH <PASSWORD> before processing any other
# commands. This might be useful in environments in which you do not trust
# others with access to the host running redis-server.
#
# This should stay commented out for backward compatibility and because most
# people do not need auth (e.g. they run their own servers).
#
# Warning: since Redis is pretty fast an outside user can try up to
# 150k passwords per second against a good box. This means that you should
# use a very strong password otherwise it will be very easy to break.
#
# requirepass foobared
requirepass 123456
# Command renaming.
#
# It is possible to change the name of dangerous commands in a shared
# environment. For instance the CONFIG command may be renamed into something
# hard to guess so that it will still be available for internal-use tools
# but not available for general clients.
#
# Example:
#
# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
#
# It is also possible to completely kill a command by renaming it into
# an empty string:
#
# rename-command CONFIG ""
#
# Please note that changing the name of commands that are logged into the
# AOF file or transmitted to slaves may cause problems.

################################### LIMITS ####################################

# Set the max number of connected clients at the same time. By default
# this limit is set to 10000 clients, however if the Redis server is not
# able to configure the process file limit to allow for the specified limit
# the max number of allowed clients is set to the current file limit
# minus 32 (as Redis reserves a few file descriptors for internal uses).
#
# Once the limit is reached Redis will close all the new connections sending
# an error 'max number of clients reached'.
#
# maxclients 10000

# If Redis is to be used as an in-memory-only cache without any kind of
# persistence, then the fork() mechanism used by the background AOF/RDB
# persistence is unnecessary. As an optimization, all persistence can be
# turned off in the Windows version of Redis. This will redirect heap
# allocations to the system heap allocator, and disable commands that would
# otherwise cause fork() operations: BGSAVE and BGREWRITEAOF.
# This flag may not be combined with any of the other flags that configure
# AOF and RDB operations.
# persistence-available [(yes)|no]

# Don't use more memory than the specified amount of bytes.
# When the memory limit is reached Redis will try to remove keys
# according to the eviction policy selected (see maxmemory-policy).
#
# If Redis can't remove keys according to the policy, or if the policy is
# set to 'noeviction', Redis will start to reply with errors to commands
# that would use more memory, like SET, LPUSH, and so on, and will continue
# to reply to read-only commands like GET.
#
# This option is usually useful when using Redis as an LRU cache, or to set
# a hard memory limit for an instance (using the 'noeviction' policy).
#
# WARNING: If you have slaves attached to an instance with maxmemory on,
# the size of the output buffers needed to feed the slaves are subtracted
# from the used memory count, so that network problems / resyncs will
# not trigger a loop where keys are evicted, and in turn the output
# buffer of slaves is full with DELs of keys evicted triggering the deletion
# of more keys, and so forth until the database is completely emptied.
#
# In short... if you have slaves attached it is suggested that you set a lower
# limit for maxmemory so that there is some free RAM on the system for slave
# output buffers (but this is not needed if the policy is 'noeviction').
#
# WARNING: not setting maxmemory will cause Redis to terminate with an
# out-of-memory exception if the heap limit is reached.
#
# NOTE: since Redis uses the system paging file to allocate the heap memory,
# the Working Set memory usage showed by the Windows Task Manager or by other
# tools such as ProcessExplorer will not always be accurate. For example, right
# after a background save of the RDB or the AOF files, the working set value
# may drop significantly. In order to check the correct amount of memory used
# by the redis-server to store the data, use the INFO client command. The INFO
# command shows only the memory used to store the redis data, not the extra
# memory used by the Windows process for its own requirements. Th3 extra amount
# of memory not reported by the INFO command can be calculated subtracting the
# Peak Working Set reported by the Windows Task Manager and the used_memory_peak
# reported by the INFO command.
#
# maxmemory <bytes>
maxmemory 1024000000

# MAXMEMORY POLICY: how Redis will select what to remove when maxmemory
# is reached. You can select among five behaviors:
#
# volatile-lru -> remove the key with an expire set using an LRU algorithm
# allkeys-lru -> remove any key according to the LRU algorithm
# volatile-random -> remove a random key with an expire set
# allkeys-random -> remove a random key, any key
# volatile-ttl -> remove the key with the nearest expire time (minor TTL)
# noeviction -> don't expire at all, just return an error on write operations
#
# Note: with any of the above policies, Redis will return an error on write
# operations, when there are no suitable keys for eviction.
#
# At the date of writing these commands are: set setnx setex append
# incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd
# sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby
# zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby
# getset mset msetnx exec sort
#
# The default is:
#
# maxmemory-policy noeviction

# LRU and minimal TTL algorithms are not precise algorithms but approximated
# algorithms (in order to save memory), so you can tune it for speed or
# accuracy. For default Redis will check five keys and pick the one that was
# used less recently, you can change the sample size using the following
# configuration directive.
#
# The default of 5 produces good enough results. 10 Approximates very closely
# true LRU but costs a bit more CPU. 3 is very fast but not very accurate.
#
# maxmemory-samples 5

############################## APPEND ONLY MODE ###############################

# By default Redis asynchronously dumps the dataset on disk. This mode is
# good enough in many applications, but an issue with the Redis process or
# a power outage may result into a few minutes of writes lost (depending on
# the configured save points).
#
# The Append Only File is an alternative persistence mode that provides
# much better durability. For instance using the default data fsync policy
# (see later in the config file) Redis can lose just one second of writes in a
# dramatic event like a server power outage, or a single write if something
# wrong with the Redis process itself happens, but the operating system is
# still running correctly.
#
# AOF and RDB persistence can be enabled at the same time without problems.
# If the AOF is enabled on startup Redis will load the AOF, that is the file
# with the better durability guarantees.
#
# Please check http://redis.io/topics/persistence for more information.

appendonly no

# The name of the append only file (default: "appendonly.aof")
appendfilename "appendonly.aof"

# The fsync() call tells the Operating System to actually write data on disk
# instead of waiting for more data in the output buffer. Some OS will really flush
# data on disk, some other OS will just try to do it ASAP.
#
# Redis supports three different modes:
#
# no: don't fsync, just let the OS flush the data when it wants. Faster.
# always: fsync after every write to the append only log. Slow, Safest.
# everysec: fsync only one time every second. Compromise.
#
# The default is "everysec", as that's usually the right compromise between
# speed and data safety. It's up to you to understand if you can relax this to
# "no" that will let the operating system flush the output buffer when
# it wants, for better performances (but if you can live with the idea of
# some data loss consider the default persistence mode that's snapshotting),
# or on the contrary, use "always" that's very slow but a bit safer than
# everysec.
#
# More details please check the following article:
# http://antirez.com/post/redis-persistence-demystified.html
#
# If unsure, use "everysec".

# appendfsync always
appendfsync everysec
# appendfsync no

# When the AOF fsync policy is set to always or everysec, and a background
# saving process (a background save or AOF log background rewriting) is
# performing a lot of I/O against the disk, in some Linux configurations
# Redis may block too long on the fsync() call. Note that there is no fix for
# this currently, as even performing fsync in a different thread will block
# our synchronous write(2) call.
#
# In order to mitigate this problem it's possible to use the following option
# that will prevent fsync() from being called in the main process while a
# BGSAVE or BGREWRITEAOF is in progress.
#
# This means that while another child is saving, the durability of Redis is
# the same as "appendfsync none". In practical terms, this means that it is
# possible to lose up to 30 seconds of log in the worst scenario (with the
# default Linux settings).
#
# If you have latency problems turn this to "yes". Otherwise leave it as
# "no" that is the safest pick from the point of view of durability.
no-appendfsync-on-rewrite no

# Automatic rewrite of the append only file.
# Redis is able to automatically rewrite the log file implicitly calling
# BGREWRITEAOF when the AOF log size grows by the specified percentage.
#
# This is how it works: Redis remembers the size of the AOF file after the
# latest rewrite (if no rewrite has happened since the restart, the size of
# the AOF at startup is used).
#
# This base size is compared to the current size. If the current size is
# bigger than the specified percentage, the rewrite is triggered. Also
# you need to specify a minimal size for the AOF file to be rewritten, this
# is useful to avoid rewriting the AOF file even if the percentage increase
# is reached but it is still pretty small.
#
# Specify a percentage of zero in order to disable the automatic AOF
# rewrite feature.

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

# An AOF file may be found to be truncated at the end during the Redis
# startup process, when the AOF data gets loaded back into memory.
# This may happen when the system where Redis is running
# crashes, especially when an ext4 filesystem is mounted without the
# data=ordered option (however this can't happen when Redis itself
# crashes or aborts but the operating system still works correctly).
#
# Redis can either exit with an error when this happens, or load as much
# data as possible (the default now) and start if the AOF file is found
# to be truncated at the end. The following option controls this behavior.
#
# If aof-load-truncated is set to yes, a truncated AOF file is loaded and
# the Redis server starts emitting a log to inform the user of the event.
# Otherwise if the option is set to no, the server aborts with an error
# and refuses to start. When the option is set to no, the user requires
# to fix the AOF file using the "redis-check-aof" utility before to restart
# the server.
#
# Note that if the AOF file will be found to be corrupted in the middle
# the server will still exit with an error. This option only applies when
# Redis will try to read more data from the AOF file but not enough bytes
# will be found.
aof-load-truncated yes

################################ LUA SCRIPTING ###############################

# Max execution time of a Lua script in milliseconds.
#
# If the maximum execution time is reached Redis will log that a script is
# still in execution after the maximum allowed time and will start to
# reply to queries with an error.
#
# When a long running script exceeds the maximum execution time only the
# SCRIPT KILL and SHUTDOWN NOSAVE commands are available. The first can be
# used to stop a script that did not yet called write commands. The second
# is the only way to shut down the server in the case a write command was
# already issued by the script but the user doesn't want to wait for the natural
# termination of the script.
#
# Set it to 0 or a negative value for unlimited execution without warnings.
lua-time-limit 5000

################################ REDIS CLUSTER ###############################
#
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# WARNING EXPERIMENTAL: Redis Cluster is considered to be stable code, however
# in order to mark it as "mature" we need to wait for a non trivial percentage
# of users to deploy it in production.
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#
# Normal Redis instances can't be part of a Redis Cluster; only nodes that are
# started as cluster nodes can. In order to start a Redis instance as a
# cluster node enable the cluster support uncommenting the following:
#
# cluster-enabled yes

# Every cluster node has a cluster configuration file. This file is not
# intended to be edited by hand. It is created and updated by Redis nodes.
# Every Redis Cluster node requires a different cluster configuration file.
# Make sure that instances running in the same system do not have
# overlapping cluster configuration file names.
#
# cluster-config-file nodes-6379.conf

# Cluster node timeout is the amount of milliseconds a node must be unreachable
# for it to be considered in failure state.
# Most other internal time limits are multiple of the node timeout.
#
# cluster-node-timeout 15000

# A slave of a failing master will avoid to start a failover if its data
# looks too old.
#
# There is no simple way for a slave to actually have a exact measure of
# its "data age", so the following two checks are performed:
#
# 1) If there are multiple slaves able to failover, they exchange messages
# in order to try to give an advantage to the slave with the best
# replication offset (more data from the master processed).
# Slaves will try to get their rank by offset, and apply to the start
# of the failover a delay proportional to their rank.
#
# 2) Every single slave computes the time of the last interaction with
# its master. This can be the last ping or command received (if the master
# is still in the "connected" state), or the time that elapsed since the
# disconnection with the master (if the replication link is currently down).
# If the last interaction is too old, the slave will not try to failover
# at all.
#
# The point "2" can be tuned by user. Specifically a slave will not perform
# the failover if, since the last interaction with the master, the time
# elapsed is greater than:
#
# (node-timeout * slave-validity-factor) + repl-ping-slave-period
#
# So for example if node-timeout is 30 seconds, and the slave-validity-factor
# is 10, and assuming a default repl-ping-slave-period of 10 seconds, the
# slave will not try to failover if it was not able to talk with the master
# for longer than 310 seconds.
#
# A large slave-validity-factor may allow slaves with too old data to failover
# a master, while a too small value may prevent the cluster from being able to
# elect a slave at all.
#
# For maximum availability, it is possible to set the slave-validity-factor
# to a value of 0, which means, that slaves will always try to failover the
# master regardless of the last time they interacted with the master.
# (However they'll always try to apply a delay proportional to their
# offset rank).
#
# Zero is the only value able to guarantee that when all the partitions heal
# the cluster will always be able to continue.
#
# cluster-slave-validity-factor 10

# Cluster slaves are able to migrate to orphaned masters, that are masters
# that are left without working slaves. This improves the cluster ability
# to resist to failures as otherwise an orphaned master can't be failed over
# in case of failure if it has no working slaves.
#
# Slaves migrate to orphaned masters only if there are still at least a
# given number of other working slaves for their old master. This number
# is the "migration barrier". A migration barrier of 1 means that a slave
# will migrate only if there is at least 1 other working slave for its master
# and so forth. It usually reflects the number of slaves you want for every
# master in your cluster.
#
# Default is 1 (slaves migrate only if their masters remain with at least
# one slave). To disable migration just set it to a very large value.
# A value of 0 can be set but is useful only for debugging and dangerous
# in production.
#
# cluster-migration-barrier 1

# By default Redis Cluster nodes stop accepting queries if they detect there
# is at least an hash slot uncovered (no available node is serving it).
# This way if the cluster is partially down (for example a range of hash slots
# are no longer covered) all the cluster becomes, eventually, unavailable.
# It automatically returns available as soon as all the slots are covered again.
#
# However sometimes you want the subset of the cluster which is working,
# to continue to accept queries for the part of the key space that is still
# covered. In order to do so, just set the cluster-require-full-coverage
# option to no.
#
# cluster-require-full-coverage yes

# In order to setup your cluster make sure to read the documentation
# available at http://redis.io web site.

################################## SLOW LOG ###################################

# The Redis Slow Log is a system to log queries that exceeded a specified
# execution time. The execution time does not include the I/O operations
# like talking with the client, sending the reply and so forth,
# but just the time needed to actually execute the command (this is the only
# stage of command execution where the thread is blocked and can not serve
# other requests in the meantime).
#
# You can configure the slow log with two parameters: one tells Redis
# what is the execution time, in microseconds, to exceed in order for the
# command to get logged, and the other parameter is the length of the
# slow log. When a new command is logged the oldest one is removed from the
# queue of logged commands.

# The following time is expressed in microseconds, so 1000000 is equivalent
# to one second. Note that a negative number disables the slow log, while
# a value of zero forces the logging of every command.
slowlog-log-slower-than 10000

# There is no limit to this length. Just be aware that it will consume memory.
# You can reclaim memory used by the slow log with SLOWLOG RESET.
slowlog-max-len 128

################################ LATENCY MONITOR ##############################

# The Redis latency monitoring subsystem samples different operations
# at runtime in order to collect data related to possible sources of
# latency of a Redis instance.
#
# Via the LATENCY command this information is available to the user that can
# print graphs and obtain reports.
#
# The system only logs operations that were performed in a time equal or
# greater than the amount of milliseconds specified via the
# latency-monitor-threshold configuration directive. When its value is set
# to zero, the latency monitor is turned off.
#
# By default latency monitoring is disabled since it is mostly not needed
# if you don't have latency issues, and collecting data has a performance
# impact, that while very small, can be measured under big load. Latency
# monitoring can easily be enabled at runtime using the command
# "CONFIG SET latency-monitor-threshold <milliseconds>" if needed.
latency-monitor-threshold 0

############################# EVENT NOTIFICATION ##############################

# Redis can notify Pub/Sub clients about events happening in the key space.
# This feature is documented at http://redis.io/topics/notifications
#
# For instance if keyspace events notification is enabled, and a client
# performs a DEL operation on key "foo" stored in the Database 0, two
# messages will be published via Pub/Sub:
#
# PUBLISH __keyspace@0__:foo del
# PUBLISH __keyevent@0__:del foo
#
# It is possible to select the events that Redis will notify among a set
# of classes. Every class is identified by a single character:
#
# K Keyspace events, published with __keyspace@<db>__ prefix.
# E Keyevent events, published with __keyevent@<db>__ prefix.
# g Generic commands (non-type specific) like DEL, EXPIRE, RENAME, ...
# $ String commands
# l List commands
# s Set commands
# h Hash commands
# z Sorted set commands
# x Expired events (events generated every time a key expires)
# e Evicted events (events generated when a key is evicted for maxmemory)
# A Alias for g$lshzxe, so that the "AKE" string means all the events.
#
# The "notify-keyspace-events" takes as argument a string that is composed
# of zero or multiple characters. The empty string means that notifications
# are disabled.
#
# Example: to enable list and generic events, from the point of view of the
# event name, use:
#
# notify-keyspace-events Elg
#
# Example 2: to get the stream of the expired keys subscribing to channel
# name __keyevent@0__:expired use:
#
# notify-keyspace-events Ex
#
# By default all notifications are disabled because most users don't need
# this feature and the feature has some overhead. Note that if you don't
# specify at least one of K or E, no events will be delivered.
notify-keyspace-events ""

############################### ADVANCED CONFIG ###############################

# Hashes are encoded using a memory efficient data structure when they have a
# small number of entries, and the biggest entry does not exceed a given
# threshold. These thresholds can be configured using the following directives.
hash-max-ziplist-entries 512
hash-max-ziplist-value 64

# Lists are also encoded in a special way to save a lot of space.
# The number of entries allowed per internal list node can be specified
# as a fixed maximum size or a maximum number of elements.
# For a fixed maximum size, use -5 through -1, meaning:
# -5: max size: 64 Kb <-- not recommended for normal workloads
# -4: max size: 32 Kb <-- not recommended
# -3: max size: 16 Kb <-- probably not recommended
# -2: max size: 8 Kb <-- good
# -1: max size: 4 Kb <-- good
# Positive numbers mean store up to _exactly_ that number of elements
# per list node.
# The highest performing option is usually -2 (8 Kb size) or -1 (4 Kb size),
# but if your use case is unique, adjust the settings as necessary.
list-max-ziplist-size -2

# Lists may also be compressed.
# Compress depth is the number of quicklist ziplist nodes from *each* side of
# the list to *exclude* from compression. The head and tail of the list
# are always uncompressed for fast push/pop operations. Settings are:
# 0: disable all list compression
# 1: depth 1 means "don't start compressing until after 1 node into the list,
# going from either the head or tail"
# So: [head]->node->node->...->node->[tail]
# [head], [tail] will always be uncompressed; inner nodes will compress.
# 2: [head]->[next]->node->node->...->node->[prev]->[tail]
# 2 here means: don't compress head or head->next or tail->prev or tail,
# but compress all nodes between them.
# 3: [head]->[next]->[next]->node->node->...->node->[prev]->[prev]->[tail]
# etc.
list-compress-depth 0

# Sets have a special encoding in just one case: when a set is composed
# of just strings that happen to be integers in radix 10 in the range
# of 64 bit signed integers.
# The following configuration setting sets the limit in the size of the
# set in order to use this special memory saving encoding.
set-max-intset-entries 512

# Similarly to hashes and lists, sorted sets are also specially encoded in
# order to save a lot of space. This encoding is only used when the length and
# elements of a sorted set are below the following limits:
zset-max-ziplist-entries 128
zset-max-ziplist-value 64

# HyperLogLog sparse representation bytes limit. The limit includes the
# 16 bytes header. When an HyperLogLog using the sparse representation crosses
# this limit, it is converted into the dense representation.
#
# A value greater than 16000 is totally useless, since at that point the
# dense representation is more memory efficient.
#
# The suggested value is ~ 3000 in order to have the benefits of
# the space efficient encoding without slowing down too much PFADD,
# which is O(N) with the sparse encoding. The value can be raised to
# ~ 10000 when CPU is not a concern, but space is, and the data set is
# composed of many HyperLogLogs with cardinality in the 0 - 15000 range.
hll-sparse-max-bytes 3000

# Active rehashing uses 1 millisecond every 100 milliseconds of CPU time in
# order to help rehashing the main Redis hash table (the one mapping top-level
# keys to values). The hash table implementation Redis uses (see dict.c)
# performs a lazy rehashing: the more operation you run into a hash table
# that is rehashing, the more rehashing "steps" are performed, so if the
# server is idle the rehashing is never complete and some more memory is used
# by the hash table.
#
# The default is to use this millisecond 10 times every second in order to
# actively rehash the main dictionaries, freeing memory when possible.
#
# If unsure:
# use "activerehashing no" if you have hard latency requirements and it is
# not a good thing in your environment that Redis can reply from time to time
# to queries with 2 milliseconds delay.
#
# use "activerehashing yes" if you don't have such hard requirements but
# want to free memory asap when possible.
activerehashing yes

# The client output buffer limits can be used to force disconnection of clients
# that are not reading data from the server fast enough for some reason (a
# common reason is that a Pub/Sub client can't consume messages as fast as the
# publisher can produce them).
#
# The limit can be set differently for the three different classes of clients:
#
# normal -> normal clients including MONITOR clients
# slave -> slave clients
# pubsub -> clients subscribed to at least one pubsub channel or pattern
#
# The syntax of every client-output-buffer-limit directive is the following:
#
# client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds>
#
# A client is immediately disconnected once the hard limit is reached, or if
# the soft limit is reached and remains reached for the specified number of
# seconds (continuously).
# So for instance if the hard limit is 32 megabytes and the soft limit is
# 16 megabytes / 10 seconds, the client will get disconnected immediately
# if the size of the output buffers reach 32 megabytes, but will also get
# disconnected if the client reaches 16 megabytes and continuously overcomes
# the limit for 10 seconds.
#
# By default normal clients are not limited because they don't receive data
# without asking (in a push way), but just after a request, so only
# asynchronous clients may create a scenario where data is requested faster
# than it can read.
#
# Instead there is a default limit for pubsub and slave clients, since
# subscribers and slaves receive data in a push fashion.
#
# Both the hard or the soft limit can be disabled by setting them to zero.
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60

# Redis calls an internal function to perform many background tasks, like
# closing connections of clients in timeot, purging expired keys that are
# never requested, and so forth.
#
# Not all tasks are perforemd with the same frequency, but Redis checks for
# tasks to perform according to the specified "hz" value.
#
# By default "hz" is set to 10. Raising the value will use more CPU when
# Redis is idle, but at the same time will make Redis more responsive when
# there are many keys expiring at the same time, and timeouts may be
# handled with more precision.
#
# The range is between 1 and 500, however a value over 100 is usually not
# a good idea. Most users should use the default of 10 and raise this up to
# 100 only in environments where very low latency is required.
hz 10

# When a child rewrites the AOF file, if the following option is enabled
# the file will be fsync-ed every 32 MB of data generated. This is useful
# in order to commit the file to the disk more incrementally and avoid
# big latency spikes.
aof-rewrite-incremental-fsync yes

################################## INCLUDES ###################################

# Include one or more other config files here. This is useful if you
# have a standard template that goes to all Redis server but also need
# to customize a few per-server settings. Include files can include
# other files, so use this wisely.
#
# include /path/to/local.conf
# include /path/to/other.conf

Docker MySQL安装指南

发表于 2018-04-18 | 分类于 docker

docker mysql 安装指南

docker pull mysql

docker run --name msql -p 33308:3306  -e MYSQL_ROOT_PASSWORD=123456 -d --restart=always mysql

docker exec -it msql /bin/bash  

docker start msql

docker stop msql

apt-get update && apt-get install vim -y

apt-get install net-tools -y

select @@version;



docker pull cloudera/quickstart:latest

docker run --hostname=quickstart.cloudera --privileged=true -t -i -d cloudera/quickstart /usr/bin/docker-quickstart

docker port [CONTAINER HASH] [GUEST PORT]

docker import/load

docker export/save

docker ps 

docker ps -a

docker kill 

docker rm  // Remove one or more containers

docker rmi // Remove one or more images

docker commit

docker build

docker-compose -f docker-gitlab.yml -d up


# yum install febootstrap -y

#febootstrap -i bash -i wget -i yum -i iputils -i iproute centos6.8 centos6.8-doc http://mirrors.163.com/centos/6.8/os/x86_64/ 

XtraBackup
https://github.com/percona/percona-xtrabackup

https://linux.cn/article-8967-1.html

服务端 I/O 性能:Node、PHP、Java、Go 的对比
https://linux.cn/article-9010-1.html

通过机器学习来自动调优数据库
https://linux.cn/article-9033-1.html
14 个你可能不知道的 JavaScript 调试技巧
https://linux.cn/article-9070-1.html
基于 Go 技术栈的微服务构建
https://linux.cn/article-9094-1.html
如何判断 Linux 服务器是否被入侵?
https://linux.cn/article-9116-1.html
优化 MySQL: 3 个简单的小调整
https://linux.cn/article-9325-1.html
git gogs
github.com/gogits/gogs
20 个 OpenSSH 最佳安全实践
https://linux.cn/article-9394-1.html
使用 sar 和 kSar 来发现 Linux 性能瓶颈
https://linux.cn/article-9398-1.html
给rm填加个垃圾桶
https://github.com/lagerspetz/linux-stuff/blob/master/scripts/saferm.sh
SPARTA:用于网络渗透测试的 GUI 工具套件
https://linux.cn/article-9436-1.html
mysql5.7 +keeplived+2master
http://blog.csdn.net/mchdba/article/details/51377989
mysql高可用方案
http://blog.csdn.net/u013399093/article/details/70597712

bcdedit /copy {current} /d "Windows 10 (Close Hyper-V)"
bcdedit /set {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} hypervisorlaunchtype OFF


bcdedit /copy {default} /d "Windows 10 Without Hyper-V" 
bcdedit /set {xxxxx} hypervisorlaunchtype off
执行完第一条命令会得到一串id,把id替换到第二个命令中的xxxxx即可。

然后运行msconfig,在引导的设置里把超时时间设置到3~5秒以上即可。

重启选择Without Hyper-V那一项,即可运行VMware,但Hyper-V就无法在本次启动后运行了,如果需要Hyper-V需要重启选择默认的启动项。

Git基础使用指南

发表于 2018-04-18 | 分类于 git

git基础使用指南

git 正常使用流程,为避免文件覆盖以及分支的整结性,尽量采用如下方式进行开发

1. 建立并切换到本地开发分支–develop

git checkout -b develop

2. 在develop上开发,提交本地修改增加的文件

git add fileName  / git add .
git commit -m "description"
git commit -am "description"

3. 需要上传服务器时,切换到本地master分支

git checkout master

4. 从远程仓库拉取最新内容

git fetch  ##本地master未修改

5. 将远程分支rebase到本地master分支

git rebase origin/master

由于本地master未进行修改,可以使用`git pull`代替`4,5`两个步骤

6. 将master分支的更新rebase到develop分支。如遇冲突,可参考9进行处理

git checkout develop
git rebase master

7. 解析冲突并测试,确认成功,将develop rebase至master分支。如遇冲突,可参考9进行处理

git checkout master
git rebase develop

8. 将master所有commit推送至远程仓库

git push

9. 处理版本冲突

  1. 识别冲突

    a. 本地找到你有冲突的分支(子分支), 使用 git stash将未提交的内容保存起来

    b. 使用 git checkout parentBranch 检出需要merge的分支,使用git pull命令更新父分支.

    c. 使用 git checkout subBranch 切换到需要合并的分支.

    d. 执行 git rebase -i origin/parentBranch, 此时切换到了一个临时分支

    e. 使用 git status查看状态, 出现的bothmodified项即是冲突的文件.

    f. 使用 git diff 查看冲突内容

  2. 解决冲突

    a. 使用编辑器 如vim 打开冲突文件,查看HEAD标记

    <<<<<< HEAD
    别人修改的内容
    ============
    你修改的内容
    >>>>>>>>>>
    

    b. 将冲突部分修改为正确的内容并保存.

    c. 使用 git status 查看状态,此时文件依旧是bothmodified

    d. 使用 git add . | git add file | git add file1 file2 filen, 标记为已解决

    e. 使用 git rebase --continue 继续进行rebase, 直到 rebase 成功.

    f. 使用 git push 推送至远程仓库

10.合并多个commit

两种方法:

1. 一是在提交commit使用参数,这样上一个commit将被合并到当前commit:

        git commit -a --amend -m "my message here"

    如果之前有一个提交,并且信息为:

        git commit -a -m "my last commit message"

    则这个commit message将不存在。但该commit的信息已经合并到"my message here"中了。

2. 二是如果你提交了最后的修改,这时可用:

        git reset --soft HEAD^ #HEAD^意为取消最后commit
        git commit --amend

    这将会把最后一个commit合并到前一个提交中去,例如(由上往下读):

        git add a.text
        git add b.text
        git commit -a -m "my message here"
        git commit -a -m "my last commit message"

    那么最后存在的将是"my last commit message"。也可后退n个,合并到前面第n+1个commit中去:

        $git reset --soft HEAD~n #后退到第n,我也不清楚具体含义。
        $git commit --amend [-m "new message"]

    最方便的是调用refLog查看操作历史,找到具体的commit id,然后直接reset##[commit_id]就回到你要的版本

        $git reset --hard [commit_id]

11. 暂存git stash使用

1. 使用`git stash`|`git stash "message"`暂存当前工作区修改的文件

2. 使用`git stash pop` # apply last stash and remove it from the list

3. 使用`git stash apply stash@{1}` 可以把指定版本号为stash@{1}的工作取出

4. 使用`git stash clear`取出暂存的所有工作

5. 使用`git stash list`列出所有暂存的工作

idea中文操作说明

  1. idea中文操作说明

  2. mybatis官方文档

  3. mybatis-spring官方文档

linux常用命令

发表于 2018-04-18 | 分类于 linux

Linux常用命令

查看内核/操作系统/CPU信息的linux系统信息

uname -a

查看操作系统版本

head -n l /etc/issue

查看CPU信息

cat /proc/cpuinfo

查看计算机名的linux系统信息命令

hostname

列出所有PCI设备

lspci -tv

列出所有USB设备的linux系统信息命令

lsusb -tv

列出加载的内核模块

lsmod

查看环境变量资源

env

查看内存使用量和交换区使用量

free -m

查看各分区使用情况

df -h

查看指定目录的大小

du -sh --max-depth=0

查找文件并删除

find /usr/local/backups -mtime +10 -name "*.*" -exec rm -rf {} \;

查看内存总量

grep MemTotal /proc/meminfo

查看空闲内存量

grep MemFree /proc/meminfo

查看系统运行时间、用户数、负载

uptime

查看系统负载磁盘和分区

cat /proc/loadavg

查看挂接的分区状态

mount | column -t

查看所有分区

fdisk -l

查看所有交换分区

swapon -s

查看磁盘参数(仅适用于IDE设备)

hdparm -i /dev/hda

查看启动时IDE设备检测状况网络

dmesg | grep IDE

查看所有网络接口的属性

ifconfig

查看防火墙设置

iptables -L

查看路由表

route -n

查看所有监听端口

netstat -lntp

查看所有已经建立的连接

netstat -antp

查看网络统计信息进程

netstat -s

查看所有进程

ps -ef

实时显示进程状态用户

top

查看活动用户

w

查看指定用户信息

id

查看用户登录日志

last

查看系统所有用户

cut -d: -f1 /etc/passwd

查看系统所有组

cut -d: -f1 /etc/group

查看当前用户的计划任务服务

crontab -l

列出所有系统服务

chkconfig –list

列出所有启动的系统服务程序

chkconfig –list | grep on

查看所有安装的软件包

rpm -qa

查看CPU相关参数的linux系统命令

cat /proc/cpuinfo

查看linux硬盘和分区信息的系统信息命令

cat /proc/partitions

查看linux系统内存信息的linux系统命令

cat /proc/meminfo

查看版本,类似uname -r

cat /proc/version

查看设备io端口

cat /proc/ioports

查看中断

cat /proc/interrupts

查看pci设备的信息

cat /proc/pci

查看所有swap分区的信息

cat /proc/swaps

cpu个数

cat /proc/cpuinfo | grep "physical id" | uniq | wc -l

cpu核数

cat /proc/cpuinfo | grep "cpu cores" | uniq

cpu型号

cat /proc/cpuinfo | grep 'model name' |uniq

内存查看

cat /proc/meminfo | grep MemTotal

硬盘查看

fdisk -l | grep Disk

查看CPUID

dmidecode -t processor | grep 'ID'

查看服务器型号

dmidecode |grep 'Product Name'

查看主板的序列号

dmidecode |grep 'Serial Number'

查看系统序列号

dmidecode -s system-serial-number

查看内存信息

dmidecode -t memory

查看OEM信息

dmidecode -t 11

查看位数命令

方法1

[root@linuxidc ~]# uname -a

方法2

[root@linuxidc ~]# file /bin/ls

方法3

[root@linuxidc ~]# cat /proc/version

方法4

[root@linuxidc ~]# getconf LONG_BIT
[root@linuxidc ~]# getconf WORD_BIT

查看系统版本

方法1

[root@linuxidc ~]#  lsb_release -a

方法2

[root@linuxidc ~]# cat /etc/os-release

方法3

[root@linuxidc ~]# cat /etc/redhat-release

方法4

[root@linuxidc ~]# rpm -q centos-release

查看内核版本

方法1

[root@linuxidc ~]# cat /proc/version

方法2

[root@linuxidc ~]# uname a

mac 命令

find ./ -name .idea -depth -exec rm -rf {} \;
find ./ -name

未命名

发表于 2018-03-21
{"version":"3","services":{"redis":{"restart":"always","image":"sameersbn/redis:latest","command":["--loglevel warning"],"volumes":["E:/docker/cloud/gitlab//redis:/var/lib/redis:Z"]},"postgresql":{"restart":"always","image":"sameersbn/postgresql:9.6-2","volumes":["E:/docker/cloud/gitlab//postgresql:/var/lib/postgresql:Z"],"environment":["DB_USER=gitlab","DB_PASS=password","DB_NAME=gitlabhq_production","DB_EXTENSION=pg_trgm"]},"gitlab":{"restart":"always","image":"gitlab/gitlab-ce:latest","depends_on":["redis","postgresql"],"ports":["10080:80","10022:22"],"volumes":["E:/docker/cloud/gitlab/git:/home/git/data:Z"],"environment":["DEBUG=false","DB_ADAPTER=postgresql","DB_HOST=postgresql","DB_PORT=5432","DB_USER=gitlab","DB_PASS=password","DB_NAME=gitlabhq_production","REDIS_HOST=redis","REDIS_PORT=6379","TZ=Asia/Kolkata","GITLAB_TIMEZONE=Kolkata","GITLAB_HTTPS=false","SSL_SELF_SIGNED=false","GITLAB_HOST=192.168.0.151","GITLAB_PORT=10080","GITLAB_SSH_PORT=10022","GITLAB_RELATIVE_URL_ROOT=","GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alphanumeric-string","GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alphanumeric-string","GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alphanumeric-string","GITLAB_ROOT_PASSWORD=","GITLAB_ROOT_EMAIL=","GITLAB_NOTIFY_ON_BROKEN_BUILDS=true","GITLAB_NOTIFY_PUSHER=false","GITLAB_EMAIL=notifications@example.com","GITLAB_EMAIL_REPLY_TO=noreply@example.com","GITLAB_INCOMING_EMAIL_ADDRESS=reply@example.com","GITLAB_BACKUP_SCHEDULE=daily","GITLAB_BACKUP_TIME=01:00","SMTP_ENABLED=false","SMTP_DOMAIN=www.example.com","SMTP_HOST=smtp.gmail.com","SMTP_PORT=587","SMTP_USER=mailer@example.com","SMTP_PASS=password","SMTP_STARTTLS=true","SMTP_AUTHENTICATION=login","IMAP_ENABLED=false","IMAP_HOST=imap.gmail.com","IMAP_PORT=993","IMAP_USER=mailer@example.com","IMAP_PASS=password","IMAP_SSL=true","IMAP_STARTTLS=false","OAUTH_ENABLED=false","OAUTH_AUTO_SIGN_IN_WITH_PROVIDER=","OAUTH_ALLOW_SSO=","OAUTH_BLOCK_AUTO_CREATED_USERS=true","OAUTH_AUTO_LINK_LDAP_USER=false","OAUTH_AUTO_LINK_SAML_USER=false","OAUTH_EXTERNAL_PROVIDERS=","OAUTH_CAS3_LABEL=cas3","OAUTH_CAS3_SERVER=","OAUTH_CAS3_DISABLE_SSL_VERIFICATION=false","OAUTH_CAS3_LOGIN_URL=/cas/login","OAUTH_CAS3_VALIDATE_URL=/cas/p3/serviceValidate","OAUTH_CAS3_LOGOUT_URL=/cas/logout","OAUTH_GOOGLE_API_KEY=","OAUTH_GOOGLE_APP_SECRET=","OAUTH_GOOGLE_RESTRICT_DOMAIN=","OAUTH_FACEBOOK_API_KEY=","OAUTH_FACEBOOK_APP_SECRET=","OAUTH_TWITTER_API_KEY=","OAUTH_TWITTER_APP_SECRET=","OAUTH_GITHUB_API_KEY=","OAUTH_GITHUB_APP_SECRET=","OAUTH_GITHUB_URL=","OAUTH_GITHUB_VERIFY_SSL=","OAUTH_GITLAB_API_KEY=","OAUTH_GITLAB_APP_SECRET=","OAUTH_BITBUCKET_API_KEY=","OAUTH_BITBUCKET_APP_SECRET=","OAUTH_SAML_ASSERTION_CONSUMER_SERVICE_URL=","OAUTH_SAML_IDP_CERT_FINGERPRINT=","OAUTH_SAML_IDP_SSO_TARGET_URL=","OAUTH_SAML_ISSUER=","OAUTH_SAML_LABEL=\"Our SAML Provider\"","OAUTH_SAML_NAME_IDENTIFIER_FORMAT=urn:oasis:names:tc:SAML:2.0:nameid-format:transient","OAUTH_SAML_GROUPS_ATTRIBUTE=","OAUTH_SAML_EXTERNAL_GROUPS=","OAUTH_SAML_ATTRIBUTE_STATEMENTS_EMAIL=","OAUTH_SAML_ATTRIBUTE_STATEMENTS_NAME=","OAUTH_SAML_ATTRIBUTE_STATEMENTS_FIRST_NAME=","OAUTH_SAML_ATTRIBUTE_STATEMENTS_LAST_NAME=","OAUTH_CROWD_SERVER_URL=","OAUTH_CROWD_APP_NAME=","OAUTH_CROWD_APP_PASSWORD=","OAUTH_AUTH0_CLIENT_ID=","OAUTH_AUTH0_CLIENT_SECRET=","OAUTH_AUTH0_DOMAIN=","OAUTH_AZURE_API_KEY=","OAUTH_AZURE_API_SECRET=","OAUTH_AZURE_TENANT_ID="]}}}
12

kyros

18 日志
11 分类
© 2018 kyros