redis学习

redis特性:
速度快: 1,数据存在内存中 2,用C语言写的 3,单线程 ,避免线程切换占用时间 4,非阻塞IO ,IO多路复用
持久化:断电数据不丢失
数据结构: string(字符串) list(列表) set(集合) hash(hash) zset(有序集合) 新版本增加BitMaps和HyperLogLog GEO
经典场景:
缓存 计数器, 消息队列 排行榜 社交网络 实时系统

redis通用命令
keys 所有键值对 keys *
dbsize 数据库大小
exists key 判断键是否存在 如果判断一个存在返回值是1,如果判断多个,存在几个返回几,
del key 删除key 删除一个返回1 删除几个返回几
expire key seconds 键过期时间
ttl key 查看剩余过期时间 键不存在返回-2 键存在 但没有过期时间返回-1
persist key 一直保存着
type key 键数据类型

字符串的相关讲解:
相关指令: 基础指令 set key value get key del key
mset 设置多个 mget 获取多个 (这类操作可以节省网络时间)
getset key newvalue 设置新的值并返回旧的值
setnx key value : 只在键 key 不存在的情况下, 将键 key 的值设置为 value 。
append key value 在原有值得基础上再增加value
strlen key 返回字符串字节长度 (注意中文)
getrange key start end 获取value中从第几到第几个的值 (索引从0开始)
setrange key n value 将值得第几个替换成value

增减指令 如果value值不是integer 也会报错
incr key :自增1 如果key不存在 则value =1
decr key :自减1 减到0 会变成负的
incrby key n : 在原有基础上增加n
decrby key n : 在原有基础上减n
incrbyfloat key 3.14 值增加一个小数

hash相关讲解:
hash是一个Mapmap结构 key (field value) field不能相同 value可以相同
hash指令都是以h开头 如:hget hset hdel
hset key filed value : hset usr age 27
hget key filed value: hget usr age 返回值 27
hdel key filed … :删除
hexists key filed : 判断filed是否存在 hexisits usr age
hlen key :判断filed的数量
hgetall key : 获取所有的filed和value
hmget key filed1 filed2… :获取多个filed的值
hmset key filed1 value1 filed2 value2…:设置多个filed的值
hvals key :返回所有filed的值
hkeys key :返回所有的filed
hincrby key filed count :对应的filed增加count

list相关讲解:
列表: 有序 可重复 左右两边插入弹出
list指令大多是以 l 开头
rpush key v1 v2 v3 …从列表右端插入多个值
lpush key v1 v2 v3 …从列表左端插入多个值
linsert key before|after value newvalue :在list指定位置前|后插入新值
lpop key 从列表左端弹出一个元素 返回值是弹出的那个元素
rpop key 从列表右端弹出一个元素 返回值是弹出的那个元素
lrem key count value : count >0 从左最多删除 count 个 value
count<0 从右最多删除 count(绝对值) 个 value
count =0 删除所有value
ltrim key start end :保留指定范围内的值
lrange key start end : 查找范围内所有的值(索引从0开始) 遍历全部为 lrange key 0 -1
lindex key index :取第几个值(索引从0开始) 最后一个值 index = -1 倒数第二个值 lindex key -2
llen key :获取 列表长度
lset key index newvalue 设置指定索引值为新值

set相关讲解:
集合:不允许重复 无序
相关指令
sadd key value… :向集合内添加新的元素。 添加成功几个就返回几
srem key value :删除指定元素
scard key : 集合中元素个数
sismember key value:元素是否在集合中
srandmember key count : 从集合中随机取出count 个元素 count 默认1
spop key 从集合中弹出元素 取出之后集合中没有的
smembers key :列出所有元素
sdiff key1 key2 :两个差集;
sinter key1 key2 : 交集
sunion key1 key2 :并集

zset相关讲解
无重复元素,有序 实现有序的方法是在value前有个分值
zadd key score value … :分数可以重复 value不可以重复
zrem key value …:删除
zscore key value :返回分数
zincrby key score value :将value的分数增加score
zcard key :返回元素总数
zrank key value :返回value的排名
zrange key 0 -1 :返回所有元素
zrangebyscore key min max :返回在指定分数内的元素
zcount key min max :返回在指定分数内的元素个数
zremrangebyrank key start end :删除 指定排名内的元素
zremrangebyscore key start end :删除指定分数内的元素

redis 持久化
持久化方式: 快照(RDB) 写日志(AOF)
RDB: save同步(会阻塞) bgsave异步 (会耗内存)
配置文件 redis.windows-server.conf
//配置多少时间保存一次快照
save 900 1
save 300 10
save 60 10000

dbfilename dump.rdb //快照保存位置 最好修改为 dbfilename dump-${port}.rdb
stop-writes-on-bgsave-error yes (bgsave发生错误是否停止写入)
rdbcompression yes (rdb文件采用压缩)
rdbchecksum yes (对rdb文件进行检验)

RDB 触发机制
全量复制 debug reload shutdown
RDB缺点: 耗时 耗性能 不可控丢失数据

AOF:日志记录
AOF的三种策略: 写命令刷新到缓冲 再写到硬盘中
always : 每条指令都会刷新到硬盘中 (不丢失数据,开销大)
everysec : 每秒执行 (丢失一秒数据 )
no : 操作系统决定 不可控

RDB和AOF比较
在这里插入图片描述

RDB最佳策略
“关” :把RDB关掉,redis主从复制时会用到 所以这里真实是关不掉的
集中管理 :
主从 从开

AOF最佳策略
开 :缓存和存储 everysec 默认
AOF重写集中管理

redis复制原理和优化
主从结构: 一主一从 一主多从 (不能多从一主) 数据是单向的 只能是由主到从
主从复制的作用: 数据副本 扩展读性能
实现方式:
saveof命令: 复制主节点数据,或者断开(已复制的数据不会丢失)
配置: redis.windows-server.conf 文件
slaveof < masterip> < masterport> 主节点的ip和端口
slaved-read-only yes 从节点只读

主从复制常见问题
读写分离 :可能出现复制数据延迟 读取到过期数据 从点故障
配置不一致:
规避全量复制: 开销太大了 第一次复制不可避免 小主节点 低峰复制
规避复制风暴: 树形拓扑 改为线性拓扑结构

主从复制高可用:
redis sentinel 使用jedis实现
https://segmentfault.com/a/1190000002680804

Redis Cluster
windows下redis修改端口号直接启动时无法生效的
使用cmd命令启动
在这里插入图片描述
redis客户端的启动也同样使用cmd命令启动

构建方式:
1、原生安装:比较麻烦,知道流程就行
三主三从
(1)节点: conf文件中修改不同的端口 cluster-enabled yes
(2)meet : redis-cli.exe -p 7001 cluster meet 127.0.0.1 6379
在这里插入图片描述
(3)指派槽: 槽的最大数量是16384 ,三台服务器尽量均分(客户端分配时,会将数据Key值hash对16384进行取余,然后看数据落在那台机器上) 每个槽都是单独绑定的,写个脚本执行把吧 大概就是下面那个意思
for(int i=0; i< 5461;i++) redis-cli.exe -p 7001 cluster addslots i
for(int i=5462; i< 10922;i++) redis-cli.exe -p 7002 cluster addslots i
for(int i=10922; i< 10384;i++) redis-cli.exe -p 7003 cluster addslots i
在这里插入图片描述
redis-cli.exe -p 7002 cluster nodes //查看节点
redis-cli.exe -p 7002 cluster info //查看集群信息
(4)主从复制
2、Ruby脚本组建集群 参考一下这里吧 https://www.cnblogs.com/tommy-huang/p/6240083.html

集群伸缩: 伸缩原理 槽和数据在节点之间移动
扩容集群:
(1)准备新节点(集群模式 配置要和其他节点统一 启动后是孤岛节点)
(2)加入集群 通过cluster meet完成 (使用redis-trib.rb 更安全更简单)
(3)迁移槽和数据
迁移槽:需要有个迁移计划,之前16384个槽分为N分,现在要分为N+1分
迁移数据:在这里插入图片描述
集群缩容和扩容刚好相反

RedisCluster 运维常见问题
(1)集群完整性 :cluster-require-full-coverage 默认yes 既一个节点主从都下线,整个集群是不能用的,实际生产中会改为no
(2)带宽消耗 :官方建议不要超过1000个节点。心跳检查(发送频率,数据量,节点规模);优化:避免使用大集群,大业务可以使用多个集群。 cluster-node-timeout (发送频率)
(3)Pub/Sub广播 :发布订阅,会在集群中每个节点中广播,加重带宽。解决方案:单独走一套redisSentinel
(4)数据倾斜:集群倾斜(内存不均匀 热点) 数据倾斜: 节点和槽分配不均匀 不同的槽对应键值数量差异比较大(CRC16正常情况下比较均匀的) 包含bigkey
(5)读写分离: 从节点不接受读写请求
(6)数据迁移 : 官方提供的工具(只能从单节点迁移到集群上 不支持在线迁移 不能断点续传 单线程迁移) 唯品会和豌豆荚有两款工具支持在线迁移

在这里插入图片描述

缓存击穿和雪崩 https://www.jianshu.com/p/b57d0773ee96

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
牙科就诊管理系统利用当下成熟完善的SSM框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的Mysql数据库进行程序开发。实现了用户在线查看数据。管理员管理病例管理、字典管理、公告管理、药单管理、药品管理、药品收藏管理、药品评价管理、药品订单管理、牙医管理、牙医收藏管理、牙医评价管理、牙医挂号管理、用户管理、管理员管理等功能。牙科就诊管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 管理员在后台主要管理病例管理、字典管理、公告管理、药单管理、药品管理、药品收藏管理、药品评价管理、药品订单管理、牙医管理、牙医收藏管理、牙医评价管理、牙医挂号管理、用户管理、管理员管理等。 牙医列表页面,此页面提供给管理员的功能有:查看牙医、新增牙医、修改牙医、删除牙医等。公告信息管理页面提供的功能操作有:新增公告,修改公告,删除公告操作。公告类型管理页面显示所有公告类型,在此页面既可以让管理员添加新的公告信息类型,也能对已有的公告类型信息执行编辑更新,失效的公告类型信息也能让管理员快速删除。药品管理页面,此页面提供给管理员的功能有:新增药品,修改药品,删除药品。药品类型管理页面,此页面提供给管理员的功能有:新增药品类型,修改药品类型,删除药品类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值