redis核心特性
Redis 概念
redis 基于内存存储的数据库,具有内存数据缓存和消息队列等功能,数据类如下:
String 存储常用的数据类型
set key value ex 5s
set key value px 5000ms
get key
批量操作
mset key value key1 values1 ...
mget key key1
incr key --整形自增
incr key value --按照value 自增
decr key --整形自减
incrbyfloat --float自增
append --追加字符串
getrange key start end --范围查找
setrange key index value --设置指定位置值
strlen key --字符串长度
hash 散列存储数据
HSET key fields value
HGET key fields...
HGETALL key
HKEYS key --所有的属性fields
HVALS key --所有的属性值
HSETNX key fields value --不存在则设置
HEXISTS key fields --是否存在属性
HINCRBY key fields value --对属性进行自增
HLEN key --有多少属性
list 双端队列,不利遍历查找,可进行头尾访问操作
lpush key values ... --从左边放入
LRANGE key 0 -1 --获取左边的数据
rpush key values ... --从右边放入
lpop key --从左弹出
rpop key --从右弹出
BLPOP key1 key2 --阻塞队里拿
llen key --取数量
lren key 次数 value --移除指定value 几次
ltrim key start stop --留下指定start到stop位置的元素
linsert key before value value2 --在value之前插入value2
lset key index 3 value --设置指定位置的元素为value
lindex key index --查询指定位置的元素
set 不重复集合,可方便进行交并集的运算操作
sadd key value1 value2 ...--添加元素到集合
SMEMBERS key --取集合数据
spop key index --弹出指定位置的元素
SRANDMEMBER key count --随机返回指定count的元素
SREM key value --移除指定value
Sinter key1 key2 --取集合的交集
sinterStore key key1 key2 --将集合key1和key2 的交集存储到key集合中
sunion key1 key2 --取并集
sunionStore key key1 key2 --将集合key1和key2 的并集存储到key集合中
sdiff key1 key2 -- 从集合key1中去掉key2中的重复元素
scard key --获取集合中元素数量
sorted set 有序集合,放入的时候已进行排序
zadd key score1 value1 score2 value2 ...--添加元素
ZRANGE key start end withscores -- 获取指定下标的元素,默认按照score 升序
zcard key --获取集合的数量
zscore key value --获取指定value的排名分数
zrank key value --获取value对应的排名位次
zcount key (min (max -- 获取score分数在min到max区间的数量
zrangebyscore key score1 score2 --获取score1 到score2 分数之间元素
zrevrange key 0 5 --score倒序返回元素
Redis 核心功能
- 持久化策略
RDB 内存快照,异步保存的方式,fork子线程完成写入,不影响redis主线程,是基于Copy-on-Writer机制实现;
适合于灾难恢复,fork子线程来进行日志写入,不影响主线程,大量数据恢复速度比AOF方式快
AOF 执行命令加入的文件,会重写文件和压缩存储
AOF文件写入时候如果宕机,会造成文件出错,redis重启则不会加载AOF文件,可用redis-check-aof 程序修复;
丢失数据少,几乎实时写入,大量数据的情况下,AOF恢复比RDB要慢许多;
混合日志
集成了RDB和AOF的优点
aof-use-rdb-preamble yes
注意:对于内存数据可靠性要求高的话,需要写定期脚本备份数据;
- 内置复制
集群和分布式具有的基本特性;有利于多读少写的应用性能
并发过高的情况下,要考虑master-slaver,提高读写性能,
从节点会主动发送sync命令获取数据快照,主节点采用异步的方式,基于copy-on-wirter,接受RDB快照数据;
从节点会丢弃自己已有数据,加载主服务器的数据快照;
- 事务
原子操作,提交多个操作命令,决定同成功或者同失败
原子性,隔离性,redis不支持回滚,例子如下:
MULTI
命令操作1;命令操作2......
EXEC
redis-check-aof 程序可修复,由于事务不完整造成的错误数据,导致redis服务不能启动;
- Lua脚本
支持Lua脚本,批量操作Redis命令集
- Pipeline
管道操作,批量发送多个命令,提高访问性能,减少网络的消耗;
- 缓存策略
LRU 最久没有使用
LFU 最近使用频率最少的键
TTL 最少剩余时间的key先删掉
清理方式:消极删除 和 主动定期清除
- Cluster模式
将数据切分到多个节点,提高并发访问能力,部分节点失效,不会导致集群服务的不可用
哈希槽 16384个槽位,每个槽位不能缺少,否则整个集群不可用
Cluster 集群
Sentinel哨兵模式
提供监控、提醒、自动故障转移,保障redis高可用
客户端连接后,通过sentinel集群通信,获取集群的信息,sentinel和master直接访问
大致流程如下图:
Redis 常用业务场景
业务热点数据,不让频繁访问DB
统计数量,实时更新或者定时更新统计
时效信息 基于时间要求的数据,到时自动清除
关注功能 可以用redis set集合取交并集
Redis 常见问题
缓存击穿--并发访问,击穿了缓存
缓存穿透--查询不存在的数据,可以缓存null数据
缓存雪崩--缓存集体时效,服务大面积打点到节点,导致服务瘫痪
以上是 redis核心特性 的全部内容, 来源链接: utcz.com/z/518436.html