linux安装redis(端口6379)
redis.io/download找官方,下载,解压,进入然后直接make,然后尝试下make test报错,yum安装tcl,最后make PREFIX=/usr/local/redis install
拷贝源代码文件下的redis.conf到bin同级中来,同时修改他下面的daemonize yes使后台运行
执行:./bin/redis-server ./redis.conf
/usr/local/redis/bin/redis-cli
>>>>>>>>>>>>>以上就是redis客户端安装好了<<<<<<<<<<<<<<<<<<<<<<<<
测试:(string,list,set,hash(多个键值对存在一个数组,键唯一),sort set)
set name xiaoming 100 // 100可有可无,秒,批量(mset,mget)
setnx name1 xiaoming // 如果这个存在就不操作,不存在就操作,迁就人家
get name // 小明
keys s* // 查看有多少s开头的
Randomkey // 随机key
type name // 查看类型
exists key // 存不存在
del key1 key2 // 删除
rename key key1 // 重命名
redis有16个库0-15,默认在0号,选择库select 1=》move key1 1
ttl key1 // 查看生命有效期 -1永不过期或-2没了
expire key 16 // 设置16秒
persist key1 // 设置成永久
flushdb // 清空
// 字符串
setrange hello 2 22 // world =>wo22d
getrange key 2 4// 获得一小部分
append key value // 尾巴上加点
incr age // 长一 decr(减一)
incrby age 5 // 长5 decrby(减5)
// 链表link-管道
lpush rpush// 塞进去单个或者多个
lpop character // 取出左边的第一个,rpop
lrange character 1 3 // 取这个管道的1到3,从0开始,0 -1看所有
lrem answer 2 b // 删除二个值是b的
ltrim character 1 3 //除了1到3,其他全截去
lindex character 2 // 只取第三个
llen character // 看看有多长
linsert num before|after 3 2 // 在3前面或者后面插个2,如果没有插入失败
rpoplpush task job // 把最右边的推出来,推给了job
brpop job 20 // 如果管道里没有,就等待20秒,直到有=》‘job’,'e',job里面的e
// 位图
网站统计http://www.php.cn/code/16105.html以后研究
// 集合(无序性,唯一性)
sadd gather aa bb cc // 给集合添加
smember gather // 看集合
srem gather bb // 删除
spop gather // 随机移除
srandmember // 随机拿出来一个
sismember gather Q // 看下Q是不是我们集合里面的
scard gather // 看有多少个
smove gather1 gather2 aa // 将一个集合里面的元素移动到另一个集合里面去
sinter lisi wangwu zhangsan // 求几个集合的交集
sunion lisi wangwu // 求并集
sdiff lisi wangwu // 求差集,lisi里面wangwu没有的
sinterstore result lisi wangwu zhangsan // 三个集合存到result里面
// 有序集合
zadd class 22 aa 11 bb 4 cc // 插入有序集合
zrange class 0 2 (withscore)// 从小到大,取第一到第三的,这样直接取值,加后面的可以看到分数
zrangebyscore class 5 33 (withscore)// 根据分数取才是真的
zrank class zhangsan // (zrevrank降序)直接看zhangsan的排名,0算在里面哦
zremrangebyscore class 11 15 // 删除分数在11到15中间的
zremrangebyrank class 1 3 // 删除排名在1-3之间的
zcard class // 返回元素个数
zcount class 5 10 //返回5-10分之间的个数
zinterstore result 2 lisi zhangsan // 求得lisi和zhangsan的交集,2是他两的个数
zinterstore result 2 lisi zhangsan min|max|sum // 求得交集,且取最小的(还有个权重以后看)
// 哈希数据类型
hset user name lisi
hset user age 16
hset user height 171 // 设置域的值
hmset user name lisi age 16 height 171 // 也可以
hget user //查看key中filed域的值hgetall(所有) hmget(批量)
hlen user // 查看这个key里面有多少个域
hexists user name // 这个域存不存在
hincrby user age // 增长一岁
// 事务,放在队列里,如果语法出错就全部错
multi
多行执行语句
exec
// 乐观锁,监视着某一个键,抢票的例子
set ticket 1
watch ticket // 可监视多个
multi
decr ticket // 减一张票
decrby lisi 100 // 减lisi100块
同时这个票已经被别人执行抢了....
exec // 返回结果nil
// 频道发布和消息订阅
publish news 'today is sunshine' // 有返回值,是几个人接收到了
subscribe news // 另开一个端口不断收听news这个发布源,一有信息了就会接受到
psubscribe new* // 通配符
// redis之rdb快照持久化(每隔n分钟写操作后,从内存dump数据成rdb文件,压缩放到备份目录)
配置文件的:stop-writes-on-bgsave-error yes // 如果子进程导出过程出错了,则停止写入
.dir ./ // 这个就是把dump.rdb保存到了当前目录
bin文件夹下有几个测试工具,加以利用哦,如benchmark
// 从而引出aof日志
no-appendfsync-on-rewrite yes //(改)如果在rdb时候就不要写aof日志了
auto-aof-rewrite-percentage 100 // 比起上次增长幅度超过100%重写
// redis主从复制
master:1.关闭rdb快照(备份工作交给slave从服务)2.可开启aof
slave:1.声明slave-of;2.配置密码(如果master有密码);3.一个salve开启rdb;4.配置开启只读
秒杀:(单个商品setnx?怎么排除一个人发多次请求)
其实就是用户一下子全部塞满管道,然后超过的直接报抢购失败,然后crontab每分钟执行一下redis里面抢购成功的队列,
lpop每两秒取一个uid,用事务同时修改mysql如果修改失败,就重新插回redis里面去(左出右入)
(单进程,同一时间只能处理一个请求,100k以内)
抢红包(多个金额,ab压力测试工具)
先提前计算钱是否超出,如果如果这个人得到的钱+已经被抢的钱超过100,,返回失败,否则成功+1
rabbitMq安装:(https://www.imooc.com/video/15168)
yum install -y rabbitmq php-bcmath php-mbstring php-dom php-curl
进地址:github.com/php-amqplib/php-amqplib复制git那个链接,下载,进入里面composer update一下