redis随手记

redis

keys *
exists
set name sun
get name
expire name 10
ttl name
del key
append key1 value 追加,如果不存在就是创建
incr key
incrby key 10
getrange key 0 -1 所有长度
setrange key key 1 xxx 这个就是替换
setex key 30 hello 设置30s
setnx key value 如果不存在设置 上面的是替换掉
mset mget
getset key val 获取并设置
-----------------------------------list-----------------

  • 当做栈去执行
    lpush list one
    lrange list 0 -1
    rpush list two
    lpop list
    rpop list
    lindex list 0
    rindex list 0
    llen list
    lrem list 移除几个 移除内容
    ltrim list 1 2 截取
    lset list 2 val 设置值
    linsert mylist before val1 val2
    ----------------------------------set-----------------
  • set 中的值是不能重复的
    sadd set val
    smemers myset 查看所有的元素
    sismember myset val
    scard myset 获取个数
    srem myset val 移除
    srandmember myset 随机取出一个元素
    srandmember myset 2
    spop myset 弹出
    smove myset myset2 val
    sdiff
    sunion
    sinter
    ---------------hash-----------------
  • map集合 key-value
    hset mysha key val
    hget mysha key val
    hdel mysha key 删除
    hlen mysha
    hexists mysha key
    hkeys mysha
    hvals mysha
    hincr
    hsetnx
    hsetex
    ---------------------zset------------有序集合
    -在set的的情况下家了个值
  • zadd myset 1 one 可以用1去排序
    zrange myset 0 -1
    zrangebyscore slary -inf +inf
    ZREVRANGEBYSCORE salary +inf -inf
    zrem salary xiaohog
    zrange salary 0 -1
    zcard salary 个数
    zcount salary 0 10
    --------------geospatial--------------地理位置
    geoadd china:city 116.40 39.90 beijing
  • 两级是无法添加 直接使用程序直接导入
    geodist china:city beijing shagnhai km
    georadius china:city 110 30 100 km 以一定的经纬度为中心去寻找
    --------------------hyperloglog----------------
    a{1,2,3,7}
    b{1,2,3,4}
    pfadd mykey a b c d e f
    pfcount mykey
    pfmerge mykey mykey2
    ---------------------bitmap-------------------------------
    setbit sign 0 1
    setbit sign 1 0
    setbit sign 2 0
    getbit sign 21
    -----------------------事务--------------
    原子性,一致性,隔离性,持久性
    没事隔离级别的概念,单条原子,事务不保证原子性
    multi

    exec

discard 取消事务
编译异常:所有命令都不执行,就是代码的问题
运行时异常:语法性错误,其他命令可以执行看,错误抛出啦 — 字符串 incr
------------------------锁---------------
悲观锁:什么时候都会出问题,无论做什么就是会加锁
乐观锁:认为不会出问题,在使用功能数据的时候去判断数据是否变动 一般都是使用乐观锁
-乐观锁
watch money 监视money在事务中如果money被改变 监视就回失败
unwatch
-----------------------配置文件-------------------
include 配置文件导入进来
bind 127.0.0.1 绑定ip
port 6379
daemonize yes 守护进程的方式运行
pidfile 如果是守护进程的方式运行就要配置
loglevel notice 日志
logfile
databses 16
—快照
在规定的时间内执行了多少操作会持久化
save 900 1
save 300 10
save 60 10000

stop-writes-on-bgsave-error yes 如果持久化出错,是否还要继续工作

rdbcompression yes 是否压缩rdb文件
rdbchecksum rdb文件校验
----replication

----security
requirepass 123456 设置密码
config get requirepass
config set requirepass
----client 客户端限制

----redis持久化
在指定的时间写入文件
rdb模式
save 60 5 都会触发一次 60秒内修改5次key
flushall 会自动触发 退出redis也是会生成rdb 恢复rdb就是把rdb文件放到目录下面就行
aof
将我们的所有的命令都记录下来,然后执行一遍 只需追加文件 大文件的时候就是会比较慢
默认是不开启的
aof的优点缺点:
每次修改都同步,默认开启的是每秒
缺点相对于数据文件来说aof远远大于rdb,修复的速度也比rdb慢
----redis发布订阅
消息发送者 频道 消息订阅
subscribe dingyue 订阅一个频道 就是一直会在哪里监听
publish dingyue nihao 发送一个信息
----主从复制
master slave
主以写为主
从读为主 一主二从
----主从复制
info replication 查看当前库的信息
配置主从 只需要配置从机 不需要配置从机
slaveof 127.0.0.1 6370
在配置文件中去配置
------------------------------哨兵模式-------------------

  • 自动选举的模式
  • 有一个独立的哨兵进程 去监视所有的redis 哨兵也有可能是集群 就是会去投票选举出一个
  • 启动哨兵redis-sentinel kconfig/sentinel.conf
  • failover 故障转移
    ------------------------------缓存穿透
  • 缓存是在内存中
  • 读的请求先在缓存中读取
  • 所有的请求穿过缓存 都去查询mysql 导致mysql宕机
  • 解决方式 布隆过滤器 在缓存中查询空对象
    ------------------------------缓存击穿
  • 非常大的热点 一直被查询 所有的人都查询这个key
  • 这个key
    ------------------------------缓存雪崩
  • key 集体失效 所有的数据都消失了 不可能放在数据库中
    redis高可用
    限流降级
    数据预热
    -------核心问题
    RDB:持久化,使用的每秒操作几次这样的规则来进行持久化,1 60,一秒之内操作60次,就执行保存
    AOF:将每一条执行的命令保存到文件中,然后恢复的时候再执行,可以配置追加的策略
    缓存淘汰机制:1.先进先出
    2. 最近最久未使用 hash加上双向链表,hash用来定位数据,如果访问了就把数据放到链表的开头,如果要淘汰就淘汰最后面 的
    3. 最近最少未使用 数据元素加上访问次数
    过期删除: 主动删除:每隔多长时间去检查一次
    惰性删除:访问的时候再去删除,会占用内存空间
    一般的方案就是主动删除+惰性删除
    缓存一致:保证最终一致,延时双删,数据库写入完成之后再清除一次缓存
    一般都是先删除数据库,然后再操作缓存
    在这里插入图片描述
  • 最推荐的就是使用先更新数据库,再删除缓存
  • https://blog.youkuaiyun.com/Jernnifer_mao/article/details/140322846
  • 缓存击穿,在访问数据的时候数据恰好过期,恰好是大量数据访问,大量的数据都是打到数据库
  • 缓存穿透,redis没有,数据库也没有,那么数据每次都是打到数据库上,解决方案:布隆过滤器,缓存空对象
  • 缓存雪崩,redis大量的key过期时间失效,所有的数据都打到mysql上面导致缓存雪崩,解决方案:热点数据永不过期,让失效时间分散,缓存预热
  • 集群:全量复制,主库数据修改,主库会把命令发送给从库
  • 哨兵:在集群当中,如果有redis服务宕机,出现问题,要手动去处理这个问题,哨兵的出现就是会帮我们维护这个集群,会按一定的规则,比如网络什么的去推选出一个新的主节点
  • cluster 一台机器无法存储所有的数据,cluster就是会将数据切片,放在不同的服务器上,和计算机路由的通知很像,会一个接着一个的传播出去
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值