Redis学习
Redis简介
Redis是一个开源的基于内存的数据存储系统,他可以用作数据库缓存和消息队列等各种场景,他也是目前的最热门的NoSQL数据库之一- 来源:由于MySQL这类关系型数据库的访问是磁盘IO所以访问的速度并没有内存的读写速度快,故Redis这种基于内存的数据库应运而生
- 共有10种数据类型:五种基本数据类型和五种高级数据类型
- 基本数据类型:
- 字符串 String
- 列表 List
- 集合 Set
- 有序集合 SortedSet
- 哈希 Hash
- 高级数据类型
- 消息队列 Stream
- 地理空间 Geospatial
- HyperLogLog
- 位图 Bitmap
- 位域 Bitfield
Redisy优点
- 性能极高
- 数据类型丰富,单键值对最大支持512M大小的数据
- 简单易用,支持所有主流编程语言
- 支持数据持久化、主从复制、哨兵模式等高可用特性
字符串 String
- 使用
set命令:set name miraculous - 使用
get命令可以获取数据get name

- 使用
del命令来删除键 - 使用
exists命令来判断某个键是否存在 - 使用
keys命令来查看数据库中都有哪些键

- 使用
flushall来删除所有的键
注意:redis中的键值对默认采用二进制存储,所以默认是不能存储中文的。
- 解决方法:先使用
quit命令退出当前客户端,然后redis-cli --raw重新进入后即可正常显示中文
- 使用
ttl命令来查看某个键的过期时间 - 使用
expire命令来设置某个键的过期时间 - 使用
setex命令来设置一个带有过期时间的键值对 - 使用
setnx命令只有当键不存在的时候才设置键的值,如果键已经存在那么它不会执行任何操作
列表List
- 一般用来存储和操作一组有顺序的数据和数组的概念比较类似
- 使用
lpush命令将数据插入到列表的头部 - 使用
rpush命令将数据插入到列表的尾部 - 使用
lrange + 列表名 + 起始位置 + 结束位置来获取列表中的内容,其中-1表示最后一个元素 - 使用
rpop命令删除列表的尾部元素,也可在其后面加入参数来指定删除元素的数量 - 使用
lpop命令删除列表的头部元素,也可在其后面加入参数来指定删除元素的数量 - 使用
ltrim + 起始位置 + 结束位置命令删除列表中指定范围以外的元素
集合Set
- Set是一种无序集合,和列表的区别是:列表中的元素都是可以重复的,但是Set中的元素是不能重复的
- 使用
sadd命令向set中添加一个元素 - 使用
smembers + set名字命令来查看集合中的元素 - 使用
sismember + 集合名 + 元素名命令来判断一个元素是否在集合中 - 使用
srem + 集合名 + 元素名称元素来删除集合中的元素
有序集合SortedSet
- 它和集合的区别是有序集合的每个元素都给会关联一个浮点类型的分数,然后按照这个分数来对集合中的元素进行从小到大的排序,分数可以重复但是元素不可以重复
- 使用
zadd命令来向有序集合来添加一个元素:zadd+集合名字 + 元素 - 使用
zrange + 集合名字 + 起始位置+ 结束位置命令来查看有序集合中范围中的元素 - 使用
zscore命令来查看某个成员的分数 - 使用
zrank命令来查看某个成员的排名 - 使用
zrevrank命令来反转排名
哈希Hash
- 哈希是一个字符类型的字段和值的映射表
- 使用
hset + 哈希名称 + 键 + 值命令向哈希中添加一个键值对 - 使用
hget命令来获取哈希中的某个键值对 - 使用
hgetall命令来获取哈希中的所有键值对 - 使用
hdel命令来删除哈希中的某一个键值对 - 使用
hexists命令来查看哈希中是否存在某个键 - 使用
hkeys命令来获取哈希中的所有键
发布订阅功能
- 使用
publish命令将消息发送到指定的频道 - 使用
subscribe命令来订阅这个频道然后就可以接收到这个频道的消息了 - 订阅频道的终端可以有多个,即一个频道可以被多个终端订阅
- 局限性:无法消息持久化,无法记录历史消息等
消息队列Stream
- 它是一个轻量级的消息队列
- 使用
xadd命令来向stream中添加一个消息 - 使用
xlen命令来查看stream中的消息的数量 - 使用
xrange命令来查看消息中的详细内容 - 使用
xdel命令来删除stream中的消息 - 使用
xread命令来读取消息:xread count 2 block 1000 streams 消息名称 0:0表示从第一个消息开始读取,count表示读取的数量,block表示阻塞的时长 - 使用
xgroup create命令来创建一个消费者组 - 使用
xinfo groups + 组名可以查看消费者组的信息 - 使用
xgroup createconsumer来创建消费者组的消费者
地理空间Geospatial
- 它提供了一种存储地理位置信息的数据结构,同时支持对地理位置进行各种计算操作。
- 使用
geoadd命令来添加地理位置信息,可以设置经纬度 - 使用
geopos命令来获取某个地理位置的经纬度 - 使用
geodist命令来获取两个位置的直线距离,默认单位是米 - 使用
geosearch命令来搜索指定范围内的成员并返回
HyperLogLog
- 是一种用来做基数统计的算法,计算一个集合中不重复元素的个数
- 使用
pfadd命令来添加一个元素 - 使用
pfcount命令来查看一个元素的基数 - 使用
pfmerge命令来合并两个元素
位图Bitmap
- 位图是string类型的一个扩展
- 使用
setbit命令来设置位图中的偏移量和值 - 使用
getbit命令来获取位图中的偏移量和值
位域Bitfield
- 位域可以将很多小的整数存储到一个较大的位图中
事务
- 可以在一次请求中执行多个命令
- Redis中的事务不具备原子性:某一个命令执行失败后不会影响其实命令的执行
- 使用
multi命令来开启一个事务 - 使用
exec命令来执行一个事务
持久化
- Redis中的持久化主要有两种方式:
- RDB方式(Redis Database):在指定的时间间隔内,将内存中的数据快照写入磁盘,它是某一个时间点上数据的完整副本
- AOF方式(Append Only File):追加文件,它的原理是在执行写命令的时候不仅会将命令写入到内存中,还会将命令写入到一个追加的文件中,这个文件就是AOF文件,它会以日志的形式来记录每一个写操作,当Redis重启的时候就会通过重新执行AOP文件中的命令来在内存中重建整个数据库的内容。
主从复制
- 是指将一个Redis服务器的数据复制到其他Redis服务器,也叫主节点和从节点,一个主节点可以有多个从节点,一个从节点只能有一个主节点,数据的复制是单向的,只能由主节点到从节点,主节点负责写操作,从节点负责读操作,主节点会将自己的数据变化通过异步的方式发送给从节点,从节点接收到主节点的数据之后更新自己的数据,这样就达到了数据一致的目的
哨兵模式
- 哨兵会以一个独立的进程运行在Redis集群中,用来监控Redis集群中各个节点是否运行正常,它的主要功能如下:
- 监控:通过不断地发送命令来检查Redis节点是否正常
- 通知:如果发现某个节点出了问题,哨兵就会通过发布订阅模式来通知其他节点
- 自动故障转移:当主节点不能正常工作的时候,哨兵会开始一个自动故障转移的操作它会将一个从节点升级为新的主节点然后将其他的从节点指向新的主节点
932

被折叠的 条评论
为什么被折叠?



