Redis数据库

redis的基本知识

编译src目录下的c语言程序:make

清空上一次编译:make distclean

make install:相当于配置环境变量,在/usr/local/bin/下生成可执行文件,在任何目录下都能执行

启动redis服务器

./redis-server /myredis/redis.conf (自己复制出来的配置文件)

./redis-cli -a 123456 -p 6379

./redis-cli --raw  显示中文

关闭redis服务器

./redis-cli -a 123456  shutdown     -a后面代表密码,代表先连上才能关闭

查看redis启动是否正常(pong代表正常)

查看性能

查看redis服务器的统计信息(例:服务器,客户端、集群等):info

redis默认创建16个数据库实例(编号从0-15),且占用的空间少,可以修改配置文件修改数据库实例创建个数,默认使用第0个,select  +编号,切换数据库实例 

  • dbsize:查看key的数量     
  • keys    *:查看key的值
  • flushdb:清空当前实例所有key
  • flushall:清空所有key
  • config get *:查看所有的配置信息   例:端口号等

redis中key的操作命令

key

  •   匹配0个或者多个字符
  •   匹配一个字符
  • [ ]   从[ ]中匹配一个字符

exists

  •  一个key  判断某一个key是否存在,存在返回1,不存在返回0
  • 一个多个key   返回存在key的数量,中间用空格隔开

move

  • key   index  把key移动到指定的数据库实例

expire

  • key   seconds  设置key的存活时间

ttl

  • key   查看key的存活时间,-2表示key不存在;-1表示没有设置,永久存活

type

  • key   查看key的数据类型

rename

  • key   newkey   重命名key,但不会改变之​​​​​​值

del

  • key1  key2 ...   删除key,返回删除key的数量

redis的五种数据结构

redis支持数据持久化,支持多种数据结构,支持备份

string

  • 设置值:set  键   值(当键存在时覆盖值)
  • 得到值:get  键
  • 追加值:append   键   值(当key存在返回新字符串的长度,当不存在创建新的key-value)
  • 获取字符串长度:strlen  键
  • 字符串加一/减一/加指定数值/减指定数值:incr   键/decr   键/incrby  键      数值/decrby  键      数值(key必须是数值,当key不存在默认为0)
  • 截取:getrange  键    下标开始    下标结束(包头包尾)-1代表最右边取(-2代表倒数第二位)

  • 覆盖:

  • 设置值时同时赋予生命周期

  • setnx设置值,当key存在时不创建

  • 批量设置值    mset  k1 v1   k2 v2  k3 v3...

  • 批量获取值    mget  k1    k2   k3 ...

  • msetnx批量设置值,当key只要有一个存在时不创建

list

  • 存值取值

  • 删除表头/表尾

  • 获取指定下标的值

  • 获取列表长度

  • 移除n个value   当n>0,左边移除;当n<0,右边移除

set

  • 存值取值

  • 判断值是否存在

  • 获取集合长度

  • 移除

  • 随机获取    当后面数字>0,不能重复;反之可以重复

  • 随机移除一个或多个

  • 把set1中的a移动到set2    smove    set1   set2    a

  • 把set1中有的元素,set2、set3中没有的元素组成一个新集合    sdiff   set1  set2  set3

  • 求多个集合的交集    sinter    set1  set2  set3

  • 求多个集合的并集    sunion     set1  set2  set3

hash

  • 存值、取值

  • 获取所有的filed和value

  • 删除一个或者多个filed

  • 得到filed的个数

  • 判断filed是否存在

  • 得到所有filed的值

  • 得到所有value的值

​​​​​​​

  • 对指定filed对应的值进行加法运算

​​​​​​​

  • hsetnx   key   filed  value当filed存在时不创建

zset有序集合

  • 存值、取值

​​​​​​​

  • 删除|获取长度    zrem|zcard 

  • 查看某一个的排名(从0开始)

​​​​​​​

  • 查看某一个的排名(从0开始,从右往左)

​​​​​​​

  • 获取某一范围内的个数

​​​​​​​

  • 获取某一个指定的分数

redis的配置文件

redis持久化

redis持久化: redis采用持久化策略,把内存中的数据持久化到磁盘中,当redis重启时再把磁盘中的数据再次加载到内存中使用。

rdb(默认)把save全部注解即可禁用   快照    数据不完整(最后几条数据)

redis事务

multi: 事务开启       exec :事务结束      discard: 清空队列事务结束      watch:相当于乐观锁

例:

  总结

redis消息的发布与订阅(了解)

redis主从复制

模拟:复制多个配置文件,修改配置文件,以配置文件启动

启动结果

查看redis角色

设置主从关系:设从不设主,主机上的数据会自动同步到从机上(主机能写能读,从机只能读

              

主机宕机时:从机原地待命,但不影响原有数据的读取,等待主机重启修复

主机不能修复时:从机上位

从机宕机时:需要重新设置主从关系

redis哨兵模式(主机宕机时从机自动上位

sentinel monitor dc-redis 127.0.0.1 6380 1

./redis-sentinel /myredis/redis-sentinel

​​​​​​​redis击穿、穿透和雪崩

击穿: 指的是单个key在缓存中查不到,去数据库查询;如果数据库数据量大并且是高并发的情况下那么就可能会造成数据库压力过大而崩溃(微博热搜,单个key一瞬间失效)(量太大,缓存过期)

解决方案:

  • 通过synchronized+双重检查机制:某个key只让一个线程查询,阻塞其它线程
  • 设置value永不过期
  • 使用互斥锁(mutex key)

穿透:redis都是按照key去缓存查询,如果不存在对应的value,就会去数据库查找。如果key对应的value是一定不存在,并且该key请求量很大,就会对后端系统造成很大的压力,这就叫缓存穿透。(查不到)

解决方案:

  • 使用布隆过滤器: 热点数据等场景(具体看使用场景)
  • 缓存设置一个空值,将空值返回给请求方

雪崩:当缓存服务器重启或者大量缓存集中在某一时间段失效、服务器宕机,这样在失效的时候,也会给后端系统带来很大压力,这就叫缓存雪崩

解决方案:

  • redis高可用(搭建集群)
  • 在缓存失效后,通过加锁或者队列来控制读取数据库写缓存的数据量,比如对某个key只允许一个线程查询数据和写缓存,其他线程等待
  • 不同的key,设置不同的失效时间,让缓存失效时间尽量均匀

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值