Redis个人笔记
来源:互联网 发布:java ftp 编辑:程序博客网 时间:2024/05/17 01:47
一、Redis
1、定义:
2、redis和memcached相比的独特之处
>
>
3、安装:下载\解压(容易发生时间错误)
make
make PREFIX=/usr/local/redis install
拷贝配置文件 cp /usr/local/src/redis-2.6.16/redis.conf /usr/local/redis
4、启动:/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf 连接:/usr/local/redis/bin/redis-cli5、进程方式运行编辑配置文件:daemonize yes
二、命令及数据结构的操作
1、通用操作
set key value
get key
keys * 查询所有的key
keys key 通配指定字符
keys key* 通配
keys key[ab] 通配指定字符
keys key[?].. 通配单个字符
randomkey 返回随机的key
type key 返回类型
exists key 判断是否存在返回1/0
del key 删除key
rename key value 修改key的名称,如有原名存在覆盖.
renamenx key newkey 修改key的名称,新名称存在了不允许修改.
move key 1[服务器号码]
配置文件databases:16; select 0-15改变库,默认是0号服务器.
ttl key 查询有效期 不过期-1,2.8后不存在-2 秒
pttl key 查询有效期 不过期-1,2.8后不存在-2 毫秒
expire key 整型值s
pttl key 查询有效期
pexpire key 整型值ms
persist key 变为永久有效
flushdb 清空库
2、redis字符串类型的操作 >>set key value [ex 秒] | [px 毫秒] [nx 不存在新增] [xx 存在修改] >>mset key value key value ... 设置多个键值 >>get key >>mget key key ... 获得多个键值 >>append key [追加的值] 字符串后面追价值 >>getset key newvalue 获得旧值,并设置新值 >>setrange key [偏移量] [新值] 从偏移量开始替换成新值 >>getrange key [start stop] 获得部分值(左边0,右边-1) >>incr key 增加1 incrby key 5 incrbyfloat key +/-0.5 >>decr key 减少1 decrby key 5 >>setbit key 2 1/0 变成大/小写 A 65 0100 0001 a 97 0110 0001 >>bitop operation destkey key1[key2...] 3、link链表结构(单项、双向、循环) >>lpush key value 左边插入值 >>rpush key value 右边插入值 >>lrange key start end >>lpop key 左边弹出值 >>rpop key 左边弹出值 >>lrem key count value 删除单元值 count+从前完后-从后往前 >>ltrim key star end 截取一小段 >>lindex key 0/1/2... 返回单个单元 >>llen key 返回长度 >>linsert key after/before [value] newvalue 在某个值的前面后面插入 >>rpoplpush A B A链表右边弹出,B链表左边推进 >>brpop,blpop key timeout 4、set 集合 >>特点:无序性、唯一性、确定性 >>sadd key value1 value2 增加元素 >>smembers key 查看所有元素 >>srem key value 删除元素 >>spop key 删除集合中的1个随机元素 >>srandmember key 随机得到集合中的1个元素 >>sismember key value 判断是否存在 >>scard key 集合元素的个数 >>smove source dest key 把key从source移动到dest >>sinter key1 key2 key3 交集 >>sunion key1 kye2 key3 并集 >>sdiff key1 kye2 key3 差集 5、order set有序集合(score) >>zadd key score1 value1 score2 value2 >>zrange key star stop 按内部排序起始值 >>zrange key 1 3 withscores 取出vaule和score >>zrangebyscore key star stop 按score的值取 >>zrangebyscore key star stop limit 1 2 (跳过1个取2个) >>zrank key value 给一个元素算出排名-升序 >>zrevrank class value 给一个元素算出排名-降序 >>zremrangebyscore key score1 score2 按score来删除 >>zremrangebyrank key 排名开始 排名结束 按排名删除 >>zrem key value 删除指定值 >>zcard key 统计元素个数 >>zcount key 25 30 按分数统计元素个数 交集 >>zinterstore 结果 (2) 集合1 集合2 aggreagte sum 合并并求和 >>zinterstore 结果 (2) 集合1 集合2 aggreagte min 合并并求和 >>zinterstore 结果 (2) 集合1 集合2 aggreagte max 合并并求和 >>zinterstore 结果 (2) 集合1 集合2 weights 2 1 aggreagte sum 合并并求和 并集 6、hash数据类型(类似关联数组 field => value ) >>hset key filed vaule 添加值 >>hget key filed 获取值 >>hmset key filed vaul filed vaul 添加多个值 >>hmget key filed filed filed filed 添加多个值 >>hgetall key 获得所有值 >>hdel key filed 删除值 >>hlen key 获取单元个数 >>hexists key filed 判断是否存在 >>hincrby key filed 1/2... >>hincrbyfloat key filed 1/2... >>hkeys key 返回多有的键 >>hvals key 返回所有的值
三、redis(单进程)事物
redis事物与mysql对比
事项 mysql redis
开启 start transaction; multi
语句 普通sql; 普通命令
失败 rollback;回滚 discard取消队列
成功 commit; exec
语法错误exec报错所有的语句不执行.
语法正确类型错误,正确的语句被执行了(程序员负责).
>>监视 >>悲观想法 世界充满危险,肯定有人和我抢, 给 ticket上锁, 只有我能操作. [悲观锁]. >>乐观想法 没有那么人和我抢,因此,我只需要注意,有没有人更改ticket的值就可以了 [乐观锁] >>开始监视watch key1 key2,只要监视的值发生变化,取消执行. 取消监视unwatch
四、消息订阅
发布:publish [频道名] [内容]; 返回订阅客户端的个数
订阅:subscribe [频道名]
psubscribe new*
五、持久化(关机后还有)
工作方式
rdb(快照持久化)
1、每隔N分钟或者N次写操作后,从内存dump数据形成rdb文件,压缩放在备份目录.
redis-server 子进程 rdbdump
响应客户端 达到触发条件导出数据
监视触发条件
2、重写条件(这三个选项屏蔽禁用导出)save 900 1 900秒发生1个key变化save 300 10 300秒发生10个key变化save 60 10000 60秒发生1万次变化 3、如果rdb导出出错,停止写入内存stop-writes-on-bgsave-error yes4、导出rdb压缩rdbcompression yes5、导入rdb数据到内存完整性rdbchecksum yes6、导出文件名dbfilename dump.rdb7、导出文件路径dir ./测试性能/usr/local/redis/bin/redis-benchmark -n 2000缺点可能造成一段时间内的数据丢失.>>aof(日志持久化)工作方式:aof把每次执行的命令写入文本文件,每次写速度下来了,怎么写.1、打开appendonly yes/no 开启关闭aof功能2、多久写一次appendfsync always 每个命令都同步到aof,安全速度慢appendfsync everysec 每秒1写次appendfsync no 由操作系统判断3、正在快照停止aof,避免io太高.no-appendfsync-on-rewrite no/yes4、aof重写条件auto-aof-rewrite-percentage 100 与上次比增加100%后重写auto-aof-rewrite-min-size 32mb 至少32M重写5、aof文件名appendfilename appendonly.aof问题:rdb、aof两种模式存在rdb快.rdb、aof都有了,以aof(空文件)来恢复.
六、主从配置集群
1、读写分离,分担master任务.
2、主从备份防止宕机.
3、任务分离,主从分别分担备份与计算工作.
>>结构:一主多从 (星 型) 一主一从再跟从 (直线型)>>主从通信过程: Master<——————>Slave 1、Maste开始dump导出rdb,Slave恢复. 2、aof中中间的缓存同步 3、以后进程保存联系>>三台机器集群 公共配置 daemonize yes 后台进程运行 pidfile /usr/local/redis/redisXXXX.pid port XXXX 端口号 主服务器6379 #save 900 1 关闭rdb #save 300 10 #save 60 10000 appendonly yes appendfsync everysec appendfilename /var/run/appendonly6379.aof no-appendfsync-on-rewrite yes #在日志重写时,不进行命令追加操作,而只是将其放在缓冲区里,避免与命令的追加造成DISK IO上的冲突。 从服务器6380 dbfilename dump6380.rdb dir /usr/local/redis/ slaveof localhost 6379 stop-writes-on-bgsave-error yes slave-read-only yes 只读状态 从服务器6381 #save 900 1 关闭rdb #save 300 10 #save 60 10000 #appendonly no 关闭aof slave-read-only yes 只读状态 启动密码 主服务器:requirepass foobared auth shunjian 从服务器:masterauth <master-password> 启动服务 /usr/local/redis/bin/redis-server /usr/local/redis/redis6379.conf /usr/local/redis/bin/redis-server /usr/local/redis/redis6380.conf /usr/local/redis/bin/redis-server /usr/local/redis/redis6381.conf 缺点:多台slave不要一下起来,否则IO剧增.
七、redis运维知识
time 显示服务器时间 , 时间戳(秒), 微秒数
dbsize 当前数据库的key的数量
bgrewriteaof 后台进程重写aof
save 保存rdb快照,会停止当前工作.
bgsave 后台保存rdb快照
lastsave 上次保存时间
Flushdb 清空当前库所有键
Flushall 清空所有库所有键
info
内存使用
used_memory:859192 数据结构的空间
used_memory_rss:7634944 实占空间
mem_fragmentation_ratio:8.89 前2者的比例,1.N为佳,如果此值过大,说明redis的内存的碎片化严重,可以导出再导入一次.
从服务器情况 role:master connected_slaves:0 持久化 rdb_changes_since_last_save:6 rdb_last_save_time:1382366180 Fork 性能 latest_fork_usec:864 了解最近一次 fork 操作导致了多少时间的卡顿 获取配置配置文件 config get [requirepass] config set [requirepass] 慢查询日志 slowlog-log-slower-than 10000 慢日志时间 slowlog-max-len 128 慢日志条数 关闭服务器 Shutdown [save/nosave]
八、数据flushdb、dump转移到另一个服务器
数据被清空
flushdb
shotdown
编辑aof文件删除flushdb
重启恢复
dump数据转移 cp 一份dump文件 关闭aof,打开rdb 启动服务器
- Redis个人笔记
- Redis个人笔记
- 使用Redis做缓存——个人笔记
- 个人笔记
- 个人笔记
- 个人笔记
- 个人笔记
- 个人笔记
- 个人笔记
- 个人笔记
- 个人笔记
- 个人笔记
- 个人笔记
- 个人笔记
- 个人笔记
- 个人笔记
- 个人笔记
- 个人笔记
- MySQL创建用户与授权
- 树莓派3+安装centos
- 原码, 反码, 补码
- 分享一下最近看的东西
- 多线程学习笔记1
- Redis个人笔记
- HDOJ 1850 Being a Good Boy in Spring Festival(Nim博弈)
- Java序列化的几种方式以及序列化的作用(文章有所改变)
- ubuntu16.04安装teamviewer12依赖包解决
- Mongo个人笔记
- Spring4学习笔记(九):JDBCTemplate
- 问题 A: 挑战密室
- LeetCode 3. Longest Substring Without Repeating Characters(线性处理, 哈希)
- $ bee bash: bee: command not found