redis

  1.redis五种基本的数据结构

  • string---String
  • hash---HashMap
  • list--- LinkedList
  • set---HashSet
  • sorted-set---TreeSet

string类型基本操作

#添加/修改数据
set key value
#获取数据
get key
#删除数据
del key
#添加/修改多个数据 Multiple
mset key1 value1 key2 value2...
#获取多个数据
mget key1 key2...
#获取数据字符个数(长度)
strlen key
#追加信息到原始信息后部(如果原始信息存在就追加,不存在新建)
append key value

#设置数值数据增加指定范围的值
incr key  #默认增加1
incrby key increment #增加为负数就是减少
incrbyfloat key increment  #专门针对小数
#设置数值数据减少
decr key
decrby key increment

#设置数据具有指定的声明周期
setex key seconds value
psetex key milliseconds value

hash类型基本操作

#添加/修改数据
hset key field value
#获取数据
hget key field
hgetall key  #获取所有数据
#删除数据
hdel key field1 field2...

#添加或修改多个数据
hmset key field1 value1 field2 value2...
#获取多个数据
hmget key field1 field2...
#获取哈希表中字段的数量
hlen key
#获取哈希表中是否存在指定的字段
hexists key field

#获取哈希表中所有的字段名或字段值
hkeys key
hvals key
#设置指定字段的数值数据增加指定范围的值
hincrby key field increment
hincrbyfloat key field increment

list类型基本操作

#添加或修改数据
lpush key value1 [value2]...  #左边添加修改
rpush key value1 [value2]...  #右边添加修改
#获取数据
lrange key start stop   #list数据从0开始
lindex key index
llen key
#获取并移除数据 ,一个一个的移除
lpop key
rpop key

#规定时间后去并移除数据
blpop key1 [key2] timeout
brpop key1 [key2] timeout
#移除指定数据
lrem key count value

set类型数据基本操作

#添加数据
sadd key member1 [member2]
#获取全部数据
smembers key
#删除数据
srem key menber1 [menber2]
#获取集合数据总量
scard key
#判断集合中是否包含指定数据
sismember key member
.....
扩展操作比较多:集合的交并差等等

sorted_set类型数据的基本操作

#添加数据
zadd key score1 member1 [score2 member2]
#获取全部数据
zrange key start stop
#删除数据
zrem key member [member ...]

.....
扩展操作也比较多

2.RDB和AOP数据持久化

RDB:记录数据的变化

AOF:记录操作步骤的变化

#默认方式就是RDB方式持久化
save   #RDB方式的持久化命令

#save指令的相关配置
dbfilename dump-端口号.rdb   #设置本地数据库文件名
dir 路径                                  #设置存储路径
rdbcompression yes               #设置储存到本地数据库时是否压缩数据
rdbchecksum yes                   #是否进行rdb文件格式校验


#save指令会阻塞redis服务,一般线上不使用,而是使用bgsave

bgsave                                    #不是立即执行的,非阻塞




#AOF持久化

#AOF功能开启yes|no
appendonly yes
#AOF持久化文件名
appendfilename "appendonly-6379.aof"
#AOF写数据的三种策略always|everysec|no
appendfsync everysec

AOF重写

解决的问题:

  • 无效的数据不再写入文件
  • 忽略无效指令
  • 对同一数据的多条写命令合并为一条命令
#第一种后台指令
bgrewriteaof
#自动重写
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

3.redis事务

#开启事务
multi    #设定事务的开启位置
#执行事务
exec     #设定事务的结束位置
#取消事务
discard  #事务定义过程中出现了问题,数据赋值错误等
#事务过程中,命令格式输入错误 整体事务不会执行
#事务过程中,命令执行出现错误,正确的执行错误的不执行
注意!对已经执行完毕的命令对应的数据不会自动回滚,需要程序员自己在代码中实现回滚

4.锁

#监视锁的作用是监控key变不变的
#对key添加监视锁
watch key1 [key2.....]
#取消对所有key的监视
unwatch

#分布式锁解决的问题
#设置公共的锁
setnx lock-key value
del lock-key释放锁

#分布式锁改良
#为锁key添加时间限定,到时不释放,放弃锁
expire lock-key second
pexpire lock-key millseconds

5.数据删除策略

  • 定时删除       
  • 惰性删除
  • 定期 删除

删除策略对比

定时删除 节约内存,无占用 不分时段占用cpu资源,频度高 拿时间换空间
惰性删除 内存占用严重 延时执行,cpu利用率高 拿空间换时间
定期删除 内存定期随机清理 每秒花费固定的cpu资源维护内存 随机抽查,重点抽查

6.数据逐出算法

redis使用内存存储数据,在执行每一个命令前,会调用freeMemoryIfNeeded()检测内存是否充足。如果内存不满足新加入数据的最低存储要求,就需要删除一些数据为当前指令清理存储空间

#最大可使用内存
maxmemory
#每次选取待删除数据的个数
maxmemory-samples
#删除策略  8种
maxmemory-policy     #不详细展开

7.redis高级数据类型

  • Bitmaps 位
  • HyperLogLog 基数统计
  • GEO 坐标

8.主从复制(集群中的问题)

为了避免单点redis服务器故障,准备多台服务器,互相连通。将数据复制多个副本保存在不同的服务器上,连接在一起,并保证数据是同步的。即使有其中一台服务器宕机,其他服务器依然可以继续提供服务,实现reids的高可用,同时实现数据冗余备份

原理!!!重点

9.哨兵模式

用于主从结构中每台服务器进行监控,当出现故障时及时通过投票机制选择新的maste并将所有的slave连接到新的master。

哨兵的作用:

  • 监控:不断的检查master和slave是否正常运行
  • 通知:当被监控的服务器出现故障,向其他(哨兵,客户端)发送通知
  • 自动故障转移:断开连接,选取无故障的连接

10.企业级解决方案

  • 缓存预热

  系统启动前,提前将相关的缓存数据直接加载到缓存系统。避免用户请求,先查询数据库再将数据缓存的问题

  • 缓存雪崩

  瞬间过期数据量太大,导致对数据库服务器造成压力,未命中redis后,发起了大量对同一数的数据库访问

  • 缓存击穿

  单个高热数据过期的瞬间,数据访问量较大

  • 缓存穿透

  访问了不存在的数据,跳过了合法数据的redis数据缓存阶段,每次访问数据库,导致对数据库造成压力

  • 性能指标监控
      • 性能指标:Performance
      • 内存指标: Memory
      • 基本活动指标: Basic activity
      • 持久性指标: Persistence
      • 错误指标:Error
原文地址:https://www.cnblogs.com/baconZhang/p/13603138.html