简介
-基于内存的数据库
-快
-存储关键型业务数据,而且尽量定时删除
-数据持久化
-基于硬盘+内存
-存储容量大
-有强大的SQL语句支撑,可以处理更加复杂的业务逻辑
-存放到数据类型
-所有的存放都是以key-value结构存储的
-key的类型默认都是string类型
-value的类型非常丰富(string,list,set,hasttable,sort set)
-在使用redis时,抛开主从集群哨兵等机制,就相当于是一个远程的map
-缓存数据库的注意点
-缓存击穿
-针对于某一个失效key进行大批量访问,热点数据。
-解决方案
-后台刷新
-检查更新
-分级缓存,对key加锁
-缓存雪崩
-如果给key统一设置失效时间为3分钟,失效时会同时失效
-导致短时间内原数据库访问压力增大
-解决方案
-设置时间的时候可以根据业务逻辑设置区间(150-250)(250-350)
-提前加载热数据
-缓存穿透
-如果查询用户 zhangsan的信息,然后把它存放到内存数据库
-如果查询用户lisi的数据,查询结果为空,数据就不会缓存到内存数据库
-这个时候内存数据库就不能拦截用户对源数据库的直接访问
-布隆过滤器
-缓存无效数据 lisi-->null
Redis(单节点版)安装
安装依赖
--语法:
yum install gcc tcl -y
上传解压
--语法:
tar -zxf redis-3.2.9.tar.gz
编译并安装
--进入解压目录
cd redis-3.2.9
--安装
make && make install
软件默认安装到/usr/local/bin目录
启动Redis服务器
--语法:
redis-server
没有配置文件 使用默认配置文件Running in standalone mode
Port: 6379
单节点模式运行
默认端口:6379
客户端连接服务器
--语法:
redis-cli -h 连接地址 -p 端口号
--默认连接本地的6379端口
--示例:
redis-cli
--退出客户端控制台
quit
关闭Redis服务器
语法:
Ctrl + C
ps -ef | grep redis
kill -9 线程号
--查看redis端口并关闭
添加配置文件
--创建目录
mkdir -p /opt/sxt/redis-3.2.9
--拷贝conf配置文件
cp /root/redis-3.2.9/redis.conf /opt/sxt/redis-3.2.9/
--修改配置文件
vim /opt/sxt/redis-3.2.9/redis.conf
配置示例:
#修改绑定的地址
#后台模式
关机拍照
Redis的命令
基本型操作
-切换数据库
-默认创建16个数据库(0-15)
-select index 切换数据库
Key的操作
-keys *
-设置key的时长
-exprie key 10 (设置10秒)
-查看剩余的有效时间
-ttl key (>0有效 =-1永不失效 =-2 已失效)
-查看key对应值的类型
-type key
-删除指定的key
-del key
String
-SET KEY VALUE [EX sec] [NX|XX]
-EX 设置过期时间,秒,等同于SETEX key seconds value
-PX 设置过期时间,毫秒,等同于PSETEX key milliseconds value
-NX 键不存在,才能设置,等同于SETNX key value
-XX 键存在时,才能设置
-工作中设置key的时候,一般加指定的前缀,方便管理
-Get key
-通过key获取value
-append key
-字符串的拼接
-strlen key
-字符串的长度
-getrange key start end
-返回 key 中字符串值的子字符串
-闭区间
-end值为负数视为倒数
-setrage key offset value
-从指定的位置开始替换数据
-setex key seconds value
-同时设置失效时间和值
-decr key
-每次减少一个
-decrby key num
-每次减少num个
-incr key
-每次增加一个
-incrby key num
-每次增加num个
-mget mset
-一次性存取多个值
List(LinkedList)
-lpush key value...
-向链表左面添加
-a b c -->c b a
-rpush key value...
-向链表右面添加
-a b c --> a b c
-lrange list 0 -1
-查看整个列表的数据
-lpop key
-移除左面第一个元素
-rpop key
-移除右面第一个元素
-lindex list 2
-返回指定索引对应的数据
-llen list
-list的长度
-lrem key count value
count 要移除的数量和方向
3 左向右移除三个
-3 右向左移除三个
-0 移除所有
-ltrim key start end
-移除所有区间外的元素
-rpoplpush list1 list2
-将list1的尾移到list2的头
-lset key index value
-lset list 2 x 替换索引位置2的元素
-linsert key after|before pivot value
-在目标值前面或者后面插入值
Set
-sadd key member
-添加元素,无序
-smembers key
-获取所有的元素
-scart key
-返回元素的数量
-srandmember key ---- spop key
-随机获取一个元素
-smove set1 set2 a
-将set1中的a元素添加到set2中
-sinter set1 set2 set3
-获取共同拥有的元素(交集)
-sunion set1 set2 set3
-获取元素的并集
Sort Set
-zadd key score member
-将一个或多个 member 元素及其 score 值加入到有序集 key 当中。
-zrange key 0 -1
-按照score排序获取结果
-zrevrange zset 0 -1
-逆序按照score排序
-zscore key member
-返回成员member的score值
-zcount key 60 100
-统计score的值在60-100之间的数量
-zrank key member
-查看member的排名
HSET
-hset key field value 《String,Map<String,String>》
-设置hash表中的域field的值
-hget key field
-获取field值
-hgetall key
-获取哈希表key中所有的域和值
-hkeys key
-获取哈希表key中所有的域
-hvals key
-获取哈希表key中所有域的值
-hdel key field
-移除key表中的域field
数据的持久化
RDB
- RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照
- 内存中的数据集快照写入磁盘
config set save “”
不自动保存数据
save 立即保存数据
# 格式
save secs changes
# after 900 sec (15 min) if at least 1 key changed
# after 300 sec (5 min) if at least 10 keys changed
# after 60 sec if at least 10000 keys changed
save 900 1
save 300 10
save 60 10000
AOF(Append Only File)
- 将用户所有的操作记录到日志中(除了查询操作)
- AOF的策略
always
no
everysec - rewrite
重写日志,减少日志文件的大小