数据库——redis
目录
一 安装redis
二 类型
1. string 字符串
2. 列表List
3. 集合set
4. 有序集合 zset
5. 哈希hash
三 事务
1. 基本概念
2. redis事务与MySQL事务区别
四 乐观锁
五 redis的持久化
1. 概念
2. RDB
3. AOF
4. 区别
六 redis发布订阅
订阅端
发送端
七 redis主从复制
1. 概念
2. 测试
3. 哨兵模式
八 redis缓存穿透 击穿 雪崩
1. 缓存穿透——查不到
2. 缓存击穿——量太大,缓存过期
3. 缓存雪崩
缓存,数据库,消息队列
c/s结构 服务器端口6379
是一个用 C 语言编写的开源、高性能非关系型(NoSQL)键值对数据库,遵循 BSD 许可协议
redis五种基本数据类型:字符串,列表,集合,有序集合,哈希
一 安装redis
ping
- 作用:检测客户端与 Redis 服务器的连接状态。
- 原理:客户端向服务器发送
ping
请求,服务器接收到后返回PONG
,证明连接正常。select <db>
- 作用:切换数据库。Redis 默认有 16 个数据库,编号从 0 到 15 。
- 示例:
select 1
将切换到 1 号数据库;select 15
切换到 15 号数据库 ;执行select 16
报错(error) ERR DB index is out of range
,因为数据库编号最大为 15 ,超出范围。select 0
又切换回 0 号数据库。set <key> <value>
- 作用:设置键值对。若键不存在则创建,若存在则覆盖旧值。
- 示例:
set name xiaobai
将键name
的值设为xiaobai
;set k1 v1
将键k1
的值设为v1
;set k1 vvv
把k1
的值更新为vvv
。get <key>
- 作用:获取指定键的值。
- 示例:
get name
获取键name
的值,返回"xiaobai"
;get k1
获取键k1
的值,先后返回"v1"
和"vvv"
,和set
操作结果对应 。
二 类型
1. string 字符串
最简单数据结构,键值对形式,值可包含任何数据,如图片、序列化对象等。采用预分配冗余空间减少内存频繁分配,最大长度 512M。可用于缓存对象、计数器(利用自增自减操作)、分布式锁(借助SETNX
命令 )等。
set str hello:在 Redis 中设置键为str
,值为hello
的键值对。若键str
不存在则创建,若已存在则覆盖原有值。
get str:获取键str
对应的值。
expire str 10:为键str
设置过期时间,单位是秒。这里设置str
键在 10 秒后过期
ttl str:查看键str
剩余的过期时间,单位是秒。
key*:查找所有符合给定模式的键,*
是通配符,表示匹配所有键
exists a:检查键a
是否存在。
del a:删除键b
及其对应的值。
type a:获取键a
对应值的数据类型,如string
(字符串 )、hash
(哈希 )、list
(列表 )等。
incr a:将键b
对应的值视为整数并自增 1 。若键b
不存在,会先初始化为 0 再执行自增操作。
incrby a 5:将键b
对应的值增加指定的整数(这里是 5 )。
decr 5:将键b
对应的值视为整数并自减 1
decrby a 5:将键b
对应的值减少指定的整数(这里是 3 )。
2. 列表List
双向链表结构,插入和删除操作快(时间复杂度 O (1) ),索引定位慢(时间复杂度 O (n) ) 。列表弹出最后一个元素后自动删除回收内存。常被用作异步队列,将任务序列化成字符串存入,另一线程轮询处理;也可用于存储列表型数据,如粉丝列表、评论列表等。
lpush list1 2
、lpush list1 3:
push
是将一个或多个值从列表左侧(头部)插入到名为list1
的列表中。先执行lpush list1 2
,将元素2
从左侧插入列表;再执行lpush list1 3
,将元素3
从左侧插入列表 。返回插入操作后列表的长度
rpush list1 4
、rpush list1 5:
rpush
是将一个或多个值从列表右侧(尾部)插入到列表list1
中。rpush list1 4
将元素4
从右侧插入,rpush list1 5
将元素5
从右侧插入。
lrange list1 0 -1:
lrange
用于获取列表指定范围内的元素。0
表示起始索引(索引从 0 开始 ),-1
表示结束索引(-1
代表最后一个元素 ),即获取列表list1
的所有元素
lpop list1 1:
lpop
从列表左侧(头部)移除并返回一个或多个元素,这里移除 1 个元素。
3. 集合set
无序且自动去重的集合数据类型。底层根据元素个数和类型,采用整数集合(intset,元素个数少于默认值 512 且元素为整型 )或字典(dict )存储。可用于存储活动中奖用户 ID(保证同一用户不重复中奖 ),还能进行交集、并集、差集运算,如计算共同好友。
set中的值是不能重复的
添加:saddr key member1 [member2 ...]
,往集合key
里加元素。
查看:smembers key
,获取集合所有元素;scade key
,看元素个数;sismember key member
,判断元素是否在集合中 。
删除:spop key
随机删一个;srem key member1 [member2 ...]
删指定元素 。
运算:sdiff
算差集,sinter求交集,sunion 得并集 ,对应*STORE
命令可把运算结果存到指定集合
将指定的元素从一个set中移动到另一个set中,格式:smove set1 set2 value