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
-