Redis个人笔记

xiaoxiao2021-02-27  448

一、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-cli 5、进程方式运行编辑配置文件: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 yes 4、导出rdb压缩 rdbcompression yes 5、导入rdb数据到内存完整性 rdbchecksum yes 6、导出文件名 dbfilename dump.rdb 7、导出文件路径 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/yes 4、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 启动服务器
转载请注明原文地址: https://www.6miu.com/read-535.html

最新回复(0)