redis笔记
可以持久化
类型多 String hash set list zset(5中均以键值对类型存储,多类型实际是指键值对中的值得部分,其中hash类型可以看做Map套娃,即 Map<key ,Map<key,value>>)
单线程+多路IO复用
所有请求被监视,准备完毕直接处理,没有阻塞状态,多个IO流一直处于工作状态
select:逐个通讯确认是否准备完成,最多监控1024个请求
pool:逐个通讯确认是否准备完成,无限制请求限制
epool:监控请求的同时,给请求添加标识符,根据标识符确认状态
通用指令
keys * 查询所有键
exists <key> 判断数据库中是否存在某个键 返回值为1/0 1=true 0=false
type <key> 查看该键绑定的value数据类型
del <key> 删除以key为键的键值对
expire <key> <second> 为键值对设置过期时间(该键已存在)
ttl <key> 查看过期时间 返回值为-2时表示 表示已过期 返回值>=0是剩余时间
dbsize 查看当前数据库的key数量
Flushdb 清空当前数据库
Flushall 清空所有库
String类型 最基本类型 二进制安全 可以存放jpg图片 序列化对象 value值最大512M 用途最广 原子性:操作不会被线程调度机制打断,一旦开始,就会执行到结束
思考 java i++是否是原子性
基本指令
get<key> 查询对应value
set<key> <value> 添加键值对
append<key><value> 给已有键值对的value添加字符,当key不存在时,新建一个键值对
setnx <key> <value> 当key不存在时,覆盖已有的value,当key存在时,执行无效
incr <key> 将存储的值自增+1 value必须为一个数值类型
incrby<key> <N> 设置 自增+N N可以为负数 应用场景 点赞数统计 购物车数量加减
mset <key> <value> <key> <value> ....批量加入
mget <key><key><key>....批量获取value
msetnx<key> <value> <key> <value> ....批量执行setnx <key> <value> 当且仅当所有的key不存在时才执行
getrange<key> <开始位置><结束位置> 获取制定范围的字符串 类似于substring 但是起始位置都包含
setrange<key><开始位置><结束位置> 修改制定范围的字符串 同样包含起始位置
setex<key><过期时间><value> 设置有时间限制的键值对 单位为秒
getset<key><value> 以旧换新 设置新值的同时获取旧值
hash类型 适用于存储对象 类似于java中的properties 键值对均为字符串
常用指令
hset<key> <field><value> 添加单属性对象
key:键
field :属性
value: 值
hget <key><field>获取对象属性对应的值
hgetall<key> 获取用户对象所有信息
hmset<key> <field><value><field><value><field><value> 添加多属性对象
例如存入一个user用户(username 张三 age 20 job teacher)
hmset user username zhangsan age 20 job teacher
hexists <key> <field>判断对象是否存在某个属性
hkeys<key> 获取该hash集合的所有属性
hvals<key>获取该hash集合所有属性对应的值
hincrby<key><field><increment> 为该对象的属性值自增1 并且返回自增后的值
hsetnx<key><field><value> 修改field的值 有则不起作用
list类型
单键多值 值可重复 底层是双向链表 增删效率高 查询慢 首尾两端操作性能高
lpush/rpush <key><value1><value2><value3>.... 从左边/右边插入一键多值
lpop/rpop <key> 从左边/右边获取一个值
lrange <key><start><stop> 按照下标查询list类型的元素 0代表第一个元素 -1代表最后一个一个元素
Iindex<key> <index> 按照索引获取元素
llen <key> 获取列表长度
linsert <key> before /after<value><newvalue> 字面意思 在value前/后添加newvalue
lrem <key><n><value> 从左删除n个value
set类型
单键多值 值不可重复 自动排序 value底层String类型的无需集合Set<string> value可以为null
sadd<key><value><value><value>...添加元素
smembers<key> 获取所有元素
sismenbers<key><value> 判断是否存在某个元素 存在返回1 不存在返回0
scard <key> 返回集合元素个数
srem<key><value><value><value>....删除多个元素
spop<key>随机从该集合吐出一个 并且删除该元素 应用场景自动抽奖
spop<key> [count]随机从该集合吐出多个值 但是不删除
sinter<key1><key2>返回交集
sunion<key1><key2>返回并集
sdiff<key1><key2>返回差集:key1集合-(key1集合与key2的并集)
zset(sorted set)
有序 字符串集合 每个元素都有一个"评分" 按照评分排序
zadd<key><score1><value><score2><value2>
redis事务 单独隔离操作 事务中所有命令会序列化 按顺序执行 ,并且不会被其他客户端发来的命令打断
事务的作用主要是串联多个命令 防止别的命令插队
Multi Exec discard
Multi 开启事物 Exec执行事务 discard 取消事务
watch <key> 监听事务
redis采取乐观锁模式
在每次操作都给目标数据添加一个标识,当该操作与标识规则不同时,则会禁止操作
三特性
单独的隔离操作
事务中的所有命令都会序列化,按照顺序执行 事务在执行过程中,不会被其他客户端请求打断
没有隔离级别的概念
队列中的命令在没有提交之前都不会执行,因为事务提交前任何指令都不会被实际执行
不保证原子性
redis同一个事务中如果有一条命令执行失败,其他命令仍然会被执行,没有回滚
RDB 保存策略(非正常关闭的情况下)保存数据,二进制压缩,fork子进程执行,安执行策略进行保存
save 900 1 900秒内更新1条数据 会进行持久化,把当前数据库所有数据以快照保存在dump.rdb文件中,并且覆盖源文件
save 300 5 300秒更新10条
save 60 10000 60秒更新10000条
手动保存命令(保存的是指令):
save vs basave 无视保存策略 立即保存数据
RDB恢复数据 将备份的dump.rdb文件保存在redis的安装路径下,重启redis,数据就可以恢复
AOF (默认不开启,执行效率慢,占用空间大,只记录写操作,权限高于RDB:当RDB AOF同时开启式.执行AOF 忽略RDB,恢复数据更稳健,可以恢复flushall语句)
AOF appendonly.aof文件重写机制 ,当系统载入时会记录文件大小,当本次更新文件大小达到上次文件的2倍或>64MB时,优化其中的内容,重新保存并覆盖原有文件
以日志形式记录每一条 更新指令记录下来(读取不会记录),只允许追加文件,不能改写文件,redis重启后会根据日志重新执行一遍sql语句达到数据恢复的工作
AOF数据恢复 执行appendonly.aof文件,修改文件中的语句进行恢复
Redis主从复制 :读写分离 主读从写
配从不配主
拷贝多个redis.conf文件 include
开启daemonize yes
Pid文件名字pidfile
指定端口号port
Log文件名字
Dumo.rdb名字dbfilename
Appendonly关掉或者换名字
浙公网安备 33010602011771号