分类 面试题 下的文章

1.安装压测工具

curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
sudo yum -y install sysbench

2.创建测试数据库

CREATE DATABASE test_db;
CREATE USER 'test_user'@'127.0.0.1' IDENTIFIED BY 'test_user';
GRANT ALL ON test_db.* TO 'test_user'@'127.0.0.1';
flush privileges;

3.创建测试数据

sysbench --db-driver=mysql --time=30 --threads=50 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=test_user --mysql-password=test_user --mysql-db=test_db --tables=5 --table_size=1000000 oltp_read_write --db-ps-mode=disable prepare

参数解释:
–db-driver=mysql:基于mysql的驱动去连接mysql数据库,如果是oracle,或者sqlserver,那自然就是其他的数据库的驱动了
–time=30:这个就是说连续访问30秒
–threads=50:这个就是说用50个线程模拟并发访问
–report-interval=1:这个就是说每隔1秒输出一下压测情况
–mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=test_user --mysql-password=test_user:这个是说连接到哪台机器的哪个端口上的MySQL库,他的用户名和密码是什么
–mysql-db=test_db --tables=5 --table_size=500000:这个是说在test_db这个库里,构造5个测试表,每个测试表里构造50万条测试数据
oltp_read_write:这个就是说,执行oltp数据库的读写测试
–db-ps-mode=disable:这个是禁止ps模式
prepare:意思是参照这个命令的设置去构造出来我们需要的数据库里的数据,他会自动创建5个测试表,每个表里创建50万条测试数据。
 

4. 开始测试

sysbench --db-driver=mysql --time=30 --threads=50 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=test_user --mysql-password=test_user --mysql-db=test_db --tables=5 --table_size=500000 oltp_read_write --db-ps-mode=disable run

oltp_write_only:测试写入性能
oltp_read_write : 测试读写性能
oltp_read_only:测试只读性能
oltp_delete:测试删除性能
oltp_update_index: 测试更新索引字段性能
oltp_update_non_index: 测试更新非索引字段性能
oltp_insert: 测试插入性能
 

5.结果

read: 273602 的意思是在30s的压测期间执行了27万多次的读请求
write: 78172 的意思在压测期间执行了差不多8万次的写请求
other: 39086 的意思是在压测期间执行了差不多4万次的其他请求
total: 390860 的意思是一共执行了39万多次的请求
transactions: 19543 ( 650.89 per sec. ) 的意思是一共执行了差不多2万万个事务,每秒执行650.89多个事务
queries: 390860 (13017.74 per sec. ) 的意思是一共执行了39万多次的请求,每秒执行1万3千多请求
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
// 下面就是说,一共执行了30s的压测,执行了差不多两万的事务
General staticstics:
total time: 30.0240s
total number of events: 19543
Latency (ms):
min: 3.80 意思是请求中延迟最小的是3.80ms
avg: 76.77 意思是所有请求平均延迟是76.77ms
max: 710.73 意思是延迟最大的请求是710.73ms
95th percentile: 262.64 意思是95%的请求延迟都在262.64 ms以内
 

6.清理测试数据

sysbench --db-driver=mysql --time=300 --threads=50 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=test_user --mysql-password=test_user --mysql-db=test_db --tables=5 --table_size=500000 oltp_read_write --db-ps-mode=disable cleanup

 

命令计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination 。

默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和。

ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]

 

$ redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> zadd z1 2 cat 3 dog
(integer) 2
127.0.0.1:6379> zadd z2 1 cat 4 goose
(integer) 2
// 返回交集里成员的数量。新集合中成员分数值默认是给定集合下成员分数值之和
127.0.0.1:6379> ZINTERSTORE z3 2 z1 z2
(integer) 1
127.0.0.1:6379> ZRANGE z3 0 -1 withscores
1) "cat"
2) "3"
// 使用权重时,也返回交集里成员的数量。默认依然是分数值相加,但是要先乘以权重值,此处即是2*1+1*2=4
127.0.0.1:6379> ZINTERSTORE z4 2 z1 z2 WEIGHTS 1 2
(integer) 1
127.0.0.1:6379> ZRANGE z4 0 -1 withscores
1) "cat"
2) "4"
// AGGREGATE包含SUM/MIN/MAX。ZINTERSTORE默认使用SUM。
// MIN即为取给定集合里最小的分数值,MAX则反之
127.0.0.1:6379> ZINTERSTORE z5 2 z1 z2 AGGREGATE MIN
(integer) 1
127.0.0.1:6379> ZRANGE z5 0 -1 withscores
1) "cat"
2) "1"
127.0.0.1:6379> ZINTERSTORE z6 2 z1 z2 AGGREGATE MAX
(integer) 1
127.0.0.1:6379> ZRANGE z6 0 -1 withscores
1) "cat"
2) "2"
//AGGREGATE和权重WEIGHTS一起使用时,取经过权重计算后的结果
//此处即2*3>1*4
127.0.0.1:6379> ZINTERSTORE z7 2 z1 z2 WEIGHTS 3 4 AGGREGATE MAX
(integer) 1
127.0.0.1:6379> ZRANGE z7 0 -1 withscores
1) "cat"
2) "6"



 

掩码控制权限

<< : 左移运算符,num << 1,相当于num乘以2

: 右移运算符,num >> 1,相当于num除以2

: 无符号右移,忽略符号位,空位都以0补齐

异或(^ ): 一句话,相异为真 返回 boolean

与(&): 只有两位都为 1 则为真 ,0001 & 0101 也就是 0001

或(|): 只要两位有一位 为真则为真, 0001 | 0100,也就是0101

非(~): 对自身取反。

增 1<<0 2的0次方 0001
删 1<<1 2的1次方 0010
改 1<<2 2的2次方 0100
查 1<<3 2的3次方 1000

添加权限时: current | permissions
删除权限时: current &= ~permissions
验证是否有权限时 (current & permissions)>0