Redis 总结
Redis官网下载地址: https://redis.io/
Redis 客户端可视化:https://redisdesktop.com/download
一、Redis 是什么?
1.key-value 存储系统
2.value 的类型支持:String、list、set、zset、hash
二、Redis 安装及目录结构
1.在linux下安装redis
$ wget http://download.redis.io/releases/redis-5.0.3.tar.gz $ tar xzf redis-5.0.3.tar.gz $ cd redis-5.0.3 $ make
下载后,make test 测试编译情况。
2.安装 ,进入解压后的 src 目录下
执行: make PREFIX=/usr/local/redis install
3.设置后台运行
首先赋值配置文件 redis-conf 到redis安装目录下,且修改 daemonize 为 yes
执行: ./redis-server ./redis.conf 启动服务端
redis-benchmark 性能测试工具
redis-check-aof 日志文件检测工(比如断电造成日志损坏,可以检测并修复)
redis-check-dump 快照文件检测工具,效果类上
redis-cli 客户端
redis-server 服务端
三、Redis 对于 Key 的操作命令
~1.Redis 对 String 的操作
1. set key value (默认永久有效)
set key value 【ex 秒】【px 微秒】
mset k1 v1 k2 v2 .... 设置多个 key-value
2. get key 查询固顶的key
mget k1 k2 ... 获取多个 key对应的 value
3. del key 删除key
4.keys 参数(支持模糊查询)
* :任意字符
?:任意单个字符
[]:包含某个字符
5. rename key newKey
renamenx key newkey 当newkey 存在,则不该
6.select 参数(数字),选择某个DB
7. move key db 移动 key
8. randomkey 返回随机的key
9. exists key 判断key是否存在,存在为 1 ,不存在 0
10. type key 返回 key 的数据类型
11. ttl key 返回 key 的生命周期(秒)
-1 永久有效
-2 key不存在
12. expire key 数字 设置 key 的生命周期(秒)
13. pttl key (毫秒)
14. pexpire key 数字(毫秒)
15. persist key 设置永久有效
16. setrange key offset value 将key 从 offset 开始改为 value,过大Ox00填充
17. getrange key start end
如果 start 过大,空串
start 大于 end 则,报错
18. getset key value 返回 key 的旧值,并且用新值替换
19. incr key 将key的值 +1 并返回
20. decr key 将key的值 -1 并返回
21. incrby key number 增加 +number
22. decrby key number 减少 number
23. setbit key offset 0/1
字母大小写切换(0100 0001) 第三位变0/1为 +/- 32
:设置offset对应二进制位上的值, offset 过大,中间用 0 填充
key 最大: 512 M
~2. Redis 对链表的操作
1. lpush key value 插入到链表的头部
2. rpush key value 插入到链表尾部
3. rpop key 返回并删除尾部节点
4. lpop key 返回并删除头节点
5. lrange key start end 返回链表 start 到 end 的元素
从左 0 开始,右侧 -1
6. lrem key count value 从链表种删除 value 的值, 删除 count 个 后结束
count >0 从头部
count <0 从尾部
7. ltrim key start stop 切 statr 到 stop 的部分, 重新赋值给 key
8. lindex key index 返回 链表 key 中下表为index 的值
9. llen key 返回链表元素个数
10. linsert key after|before search value
在 key 链表中寻找 search 值 ,并在前|后插入 value
11. rpoplpush source dest 删除source尾部元素,插入dest 首部
12. brpop ,blpop key timeout
等待弹出key的元素,timeout 为超时时间 , 0表示一直等待
~3.Redis 对 Set 的操作
1. sadd key value[] 添加元素
2. smembers key 查看元素
3. srem key value[] 删除某些元素
4. spop key n 返回n个元素并删除
5. schar key 返回集合的个数
6. sismember key value 判断value是否存在于key集合 : 1 表示存在,0 表示不存在
7. srandmember key n 随机返回key的N个元素,默认为1
8. smove 集合A 集合B 元素a 将集合A中的元素a移到集合B
9. sinter k1 k2 k3 求三个集合的交集
10.sinterstore dest k1 k2 k3 将集合的交集存在dest 中
11.sdiff k1 k2 k3 求k1 与k2. k3.的差集并返回
12.sunion k1 k2 k3 求三个集合的并集并返回
~4.Redis 对Zset的操作
1. zadd key c1 v1 c2 v2
2. zrange key start stop 排序好的集合,从start到 stop 返回
3. zrem key v1 v2 删除元素
4. zcard key 返回元素个数
5.zrangebyscore key low high 返回按score 从 low 到 high 的元素(默认升序)【linit offset N,跳过 offset 个,取出N 个】
6.zrank key k 返回 k 的排名
7.zremrangebyrank key begin end 将key 中排名begin 到 end 元素删除
8.zcount key min max [在min - max ]区间的元素个数
~5.Resis 对 Hash 结构的操作
1. hset key field value 设置单个字段
2.hmset key f1 v1 f2 v2 设置多个字段与值
3.hget key field 查看单个字段值
4.hmget key f1 f2 fN 查看多个字段值
5.hgetall key 查询所有的域与值
6.hdel key field 删除field 域
7.hlen key 返回key的元素数量
8.hexists key field 判断是否存在字段field : 1存在 0 不存在
9. hkeys key 返回key中所有的field
三、redis 默认设置
1. 默认开启的数据库 16个
2.默认端口 6379
3. redis 事务
开启事务: multi
成功执行:exec
失败执行:discard
watch key1 key2 ... keyN
作用:监听key1 key2..keyN有没有变化,如果有变, 则事务取消
unwatch
作用: 取消所有watch监听
四、Redis 消费发布订阅-运维
1.订阅消息 subscribe news
2.发布消息 publish news
3.redis 快照持久化
redis.conf 配置文件从下到上:
60 秒内 10000 个key变化 则满足
5分钟内,10个key 的变化
导出文件 : dbfilename dump.rdb
Redis的持久化有2种方式 1快照 2是日志 Rdb快照的配置选项 save 900 1 // 900内,有1条写入,则产生快照 save 300 1000 // 如果300秒内有1000次写入,则产生快照 save 60 10000 // 如果60秒内有10000次写入,则产生快照 (这3个选项都屏蔽,则rdb禁用) stop-writes-on-bgsave-error yes // 后台备份进程出错时,主进程停不停止写入? rdbcompression yes // 导出的rdb文件是否压缩 Rdbchecksum yes // 导入rbd恢复时数据时,要不要检验rdb的完整性 dbfilename dump.rdb //导出来的rdb文件名 dir ./ //rdb的放置路径
4. Redis 2.4 之后 aof 日志持久化
appendonly no # 是否打开 aof日志功能 appendfsync always # 每1个命令,都立即同步到aof. 安全,速度慢 appendfsync everysec # 折衷方案,每秒写1次 appendfsync no # 写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到aof. 同步频率低,速度快, no-appendfsync-on-rewrite yes: # 正在导出rdb快照的过程中,要不要停止同步aof auto-aof-rewrite-percentage 100 #aof文件大小比起上次重写时的大小,增长率100%时,重写 auto-aof-rewrite-min-size 64mb #aof文件,至少超过64M时,重写
注: 在dump rdb过程中,aof如果停止同步,会不会丢失?
答: 不会,所有的操作缓存在内存的队列里, dump完成后,统一操作.
注: aof重写是指什么?
答: aof重写是指把内存中的数据,逆化成命令,写入到.aof日志里.
以解决 aof日志过大的问题.
问: 如果rdb文件,和aof文件都存在,优先用谁来恢复数据?
答: aof
问: 2种是否可以同时用?
答: 可以,而且推荐这么做
问: 恢复时rdb和aof哪个恢复的快
答: rdb快,因为其是数据的内存映射,直接载入到内存,而aof是命令,需要逐条执行