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关掉或者换名字

 

posted @ 2020-03-31 16:41  fuhai_l  阅读(134)  评论(0)    收藏  举报