Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。
redis不仅支持key-value类型的数据,还支持其他复杂的数据类型。
redis主要支持的数据类型有5种:
String字符串,Hash哈希 ,List列表,Set集合,zset有序集合(sorted set)。
#set 设置值
set key value
#get 取值
get value
# 如果key 被用过,需删除
del key
# hash 设置值
hmset key key1 value1 key2 value2
# hash 取值
hget key key1/key2
# 如果有其他类型key,需删除,否则报错
del key
# list 设置值
lpush key value1 //lpush头部添加,可以多次value设置
# list 取值
lrange key 0 10 //0 ,10 是范围
# 如果有其他类型key,需删除,否则报错
del key
# set 设置值
sadd key value1 //可以多次value设置
# set 取值
smembers key
# 如果有其他类型key,需删除,否则报错
del key
# zset 设置值
zadd key 0 value1 //可以多次value设置; 0 是分数(次数),可重复
# zset 取值
zrangebyscore key 0 10 //通过分数排序去 0~10 之间的值
redis指令测试练习工具
Redis 提供了两种持久化方式:RDB (Redis DataBase)(默认)和 AOF (Append Only File)。
ps : 持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。
在指定的时间间隔内,执行指定次数的写操作,则会将内存中的数据写入到磁盘中。即在指定目录下生成一个dump.rdb文件。redis 重启会通过加载dump.rdb文件恢复数据。
附:
redis.conf 配置文件中RDB持久化配置信息:
# RDB 持久化,快照保存频率
# 900秒内,如果超过1个key被修改,则发起快照保存
# 300秒内,如果超过10个key被修改,则发起快照保存
# 60秒内,如果1万个key被修改,则发起快照保存
save 900 1
save 300 10
save 60 10000
# 启用rdb文件压缩手段,默认为yes。
rdbcompression yes
Redis 默认不开启。是以文件形式存储。
它的出现是为了弥补RDB的不足(数据的不一致性),所以它采用日志的形式来记录每个写操作,并追加到文件中。
redis 重启 会根据日志文件的内容将 写指令从前到后执行一次以完成数据的恢复工作。
附:
redis.conf 配置文件中AOF持久化配置信息:
# 开启 AOF 持久化
appendonly yes
redis事务是 一组命令集合,1.开启事务可以一次执行多条命令,一条事务中的所有命令会被序列化。
2.其他客户端提交的命令请求不会插入到事务执行命令序列中。
注:不分大小写
# 1、开启一个事务
MULTI
# 2、执行事务
EXEC
# 3、放弃事务:客户端取消事务队列,退出事务
DISCARD
# 4、监控 一个或多个key,若其中一个key被修改,则事务不执行。
# 监控一直持续到EXEC命令结束
WATCH key [key ...]
架构分析:有图可以帮你更好的理解
Redis系统架构详解
架构具体实现:
Redis 系列文章导读
会话缓存是在项目中最常见的运用方式。redis做会话缓存(session cache),可以缓存一些用户常用信息和历史信息,再次访问时可以直接访问redis中的数据,速度很快,加强了用户体验
内存中对数字进行递增或递减的操作实现快,redis提供的集合(Set)和有序集合(Sorted Set)数据结构可以有效对排名等问题的快速处理。
redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。
运用背景:
分布式锁:在分布式环境中,多个进程的同步访问临界资源,为了让其有序的访问某种临界资源,防止“脏数据”,用分布式锁解决该类问题。
现实解决:
一般为了实现分布式锁,可以用zookeeper或 redis 作为具体的实现方式。(这里主要说redis)
redis一般做缓存数据库,可以加快访问数据的速度。但也可以在分布式应用中用来实现分布式锁。1.在客户端访问目标资源时,有redis数据库控制访问权限(通过加锁,解锁)2. 通过加锁 setNX,解锁del,锁超时expire等设置实现有序的访问数据库资源。
缓存击穿: 某个key很热点,访问量很大,处于高并发的访问状态。当遇到key值过期等情况,则失效的瞬间,持续的并发击穿缓存,直接访问DB,造成数据压力大崩溃。
特点: 单个key 引起的高并发
解决:1.事前:Redis 高可用,主从+哨兵,Redis cluster,避免全盘崩溃。
2、事中:本地 ehcache 缓存 + Hystrix 限流+降级,避免MySQL 被打死。
3、事后:Redis 持久化 RDB+AOF,一旦重启,自动从磁盘上加载数据,快速恢复缓存数据。
参考文档:
redis菜鸟教程
Redis 持久化之RDB和AOF