redis基础

Redis 是Remote Dictionary Server 的缩写,是一个开源的基于内存的数据存储系统,它可以用作数据库缓存和消息队列等各种场景,它也是目前最热门的NOSOL数据库之一。

一、Redis支持多种数据结构

  1. 字符串string
  2. 列表list
  3. 集合set
  4. 有序集合sortedset
  5. 哈希hash
  6. 消息队列 Stream
  7. 地理空间 Geospatial
  8. HyperLogLog
  9. 位图 Bitmap
  10. 位域 Bitfield

二、Redis的优势

  1. 性能极高
  2. 数据类型丰富,单键值对最大支持512M大小的数据
  3. 简单易用,支持所有主流编程语言
  4. 支持数据持久化、主从复制、哨兵模式等高可用特性

三、基础命令

3.1 字符串string
  1. SET key value  设置键key的值为value
  2. GET key  返回键key的值设置为value
  3. DEL key [key ...]  删除给定的⼀个或多个键的值
  4. EXISTS key 判断键是否存在
  5. FLUSHALL 删除所有的键(谨慎使用
  6. KEYS * 查看所有的键
  7. TTL key 查看键的过期时间
  8. EXPIRE key 设置键的过期时间
  9. SETEX key seconds value   将键 key 的值设置为 value ,并且超时时间为 seconds
  10. SETNX key value   只有在键 key 不存在的情况下,将 key 的值设置为 value
3.2 列表list:一般用来存储和操作一组有顺序的数据,和数组的概念比较类似
  1. LPUSH key element [element ...]   将⼀个或多个元素添加到列表 key 的表头(左侧) ,多个值则从左⾄右依次插⼊表头,如果列表 key 不存在,则创建⼀个然后执⾏ LPUSH 插⼊操作,如果列表 key 存在但不是列表类型,则返回错误
  2. RPUSH key element [element ...]   将⼀个或多个元素添加到列表 key 的表尾(右侧) ,多个值则从左⾄右依次插⼊表尾,如果列表 key 不存在,则创建⼀个然后执⾏ RPUSH 插⼊操作,如果列表 key 存在但不是列表类型,则返回错误
  3. LRANGE key 0 -1 获取列表所有元素 0是起始位置 -1表示最后一个元素
  4. LPOP key [count ...]   将⼀个或 count个元素从列表头⽅向移除并将其返回,如果列表 key 不存在,则返回 nil
  5. RPOP key [count ... ]  将⼀个或 count个元素从列表尾⽅向移除并将其返回,如果列表 key 不存在,则返回 nil
  6. LTRIM key start stop   只保留列表 key 中索引为 start stop 之间的元素
3.3 集合set:SET是一种无序集合,它和列表的区别在于,列表中的元素都是可以重复的,而SET中的元素是不能重复的
  1. SADD key member [member ...]    将⼀个或多个元素加⼊到集合 key 中。已存在于集合中的元素将被忽略
  2. SMEMBERS key   返回集合 key 中的所有成员
  3. SISMEMBER key member   判断 MEMBER 是否是集合 key 的成员,是返回 1 ,不是或 key 不存在返回 0
  4. SREM key member [member ...]   将⼀个或多个元素从集合 key 中移除。不存在的 member 元素将被忽略
  5. SMOVE source destination member   member 元素从 source 集合移动到 destination 集合
 3.4 有序集合sortedset:sortedset也叫ZSet,它和集合的区别是:有序集合的每个元素,都会关联一个浮点类型的分数,然后按照这个分数,来对集合中的元素进行从小到大的排序,有序集合的成员是唯一的,但是分数是可以重复的
  1. ZADD key [NX|XX] [GT|LT] [CH] [INCR] score member [score member ..]   将⼀个或多个 member 元素及其分数 score 加⼊到有序集合 key
  2. ZRANGE key 0 -1 查看集合所有元素 0其实位置 -1最后一个元素
  3. ZRANGE key 0 -1 WITHSCORES 查看集合所有分数和元素 
  4. ZSCORE key member   返回有序集合 key 中的成员 member 的分数值( score
  5. ZRANK key member   返回有序集合 key 中成员 member 的排名。(按照 score 从⼩到⼤排列)
  6. ZREVRANK key member   返回有序集合 key 中成员 member 的排名。(按照 score 从⼤到⼩排列)
  7. ZREM key member [member ..]    将⼀个或多个成员从集合 key 中移除。不存在的 member 成员将被忽略
 3.5 哈希hash:哈希 是一个字符类型的字段和值的映射表,简单来说就是一个键值对的集合,特别适合用来存储对象
  1.  HSET key field value [field value ...]  将哈希表key中的域field的值设置为value
  2. HGET key field   返回哈希表 key 中给定域 field 的值
  3. HGETALL key   返回哈希表 key 中所有的域和值
  4. HDEL key field [field ...]   删除哈希表 key 中的⼀个或多个指定域 field
  5. HEXISTS key field  判断给定域 field 是否存在于哈希表 key
  6. HKEYS key   返回哈希表 key 中的所有键
  7. HVALS key   返回哈希表 key 中所有域的值
 3.6 发布订阅模式:Redis提供了发布订阅的功能,可以通过PUBLISH命令,来将消息发送到指定的频道,然后通过SUBSCRIBE命令,来订阅这个频道,这样就可以接收到这个频道的消息了,但是发布订阅功能还有一些局限性,比如消息无法持久化,无法记录历史消总等等, 消息队列 Stream可以解决这个问题
  1. SUBSCRIBE channel [channel ...] 订阅一个channel频道
  2. PUBLISH channel message 向channel频道发送消息
3.7 消息队列 Stream:Stream是Redis 5.0版本中,引入的一个新的数据结构,它是一个轻量级的消息队列
  1.  XADD key [NOMKSTREAM] [MAXLEN|MINID [=|~] threshold [LIMIT count]] *|id field value [field value ...]  向流追加⼀个新的消息,如果key不存在则创建
  2. XLEN key 返回流key中消息的数量
  3. XRANGE key start end [COUNT count] 返回流key中,id位于startend之间的消息可以用+ - 代替
  4. XDEL key id [id ...]   从流key中移除消息并返回移除消息的数量
  5. XTRIM key 0 代表删除所有的消息
  6. XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key ...]  id [id ...]  读取和返回流key中⽐id⼤的消息,若没有则阻塞⾄消息可⽤
  7. XGROUP CREATE key groupname id|$ [MKSTREAM] [ENTRIESREAD  entries_read]  创建⼀个消费者组
  8. XINFO GROUPS key 返回流key的消费者组列表
3.8 地理空间 Geospatial: Geospatial是Redis3.2版本中的新特性,它提供了一种存储地理位置信息的数据结构,同时支持对地理位置进行各种计算操作,比如计算两个位置之间的距离,获取某个地理位置的经纬度,查找附近的人等等
  1. GEOADD key [NX|XX] [CH] longitude latitude member [longitude latitude member ...]  添加⼀个或者多个成员到地理空间中
  2. GEOPOS key member [member ...]  返回⼀个或多个成员的位置经纬度信息
  3. GEODIST key member1 member2 [M|KM|FT|MI]  返回两个成员的距离
  4. GEOSEARCH key FROMMEMBER member|FROMLONLAT longitude latitude BYRADIUS radius M|KM|FT|MI|BYBOX width height M|KM|FT|MI [ASC|DESC] [COUNT count [ANY]] [WITHCOORD] [WITHDIST] [WITHHASH] 指定范围内搜索member并返回。可以按成员(FROMMEMBER),或按经纬度(FROMLONLAT),范围可以是圆形( BYRADIUS)或矩形(BYBOX
 3.9 HyperLogLog :HyperLogLog是一种用来做基数统计的算法,如果集合中的每个元素都是唯一且不重复的,那么这个集合的基数就是集合中元素的个数,比如集合12345的基数就是5,而把12345后面再加上12345,变成一个十个元素的集合的话,它的基数还是5,HyperLogLog算法就是用来计算这个基数的,它的原理是使用随机算法来计算,通过牺牲一定的精确度,来换取更小的内存消耗,优点就是占用内存小,缺点就是会有一定的误差,所以它适合用来做一些对精确度要求不高的,而且数据非常大的统计工作,比如统计某个网站的uv,统计某个词的搜索次数等等

四、 Redis事务

redis支持事务,但redis的事务和mysql的事务是不一样的,mysql的事务要么全部执行成功,要么全部执行失败,而在redis中,事务并不能保证所以都命令都会执行成功

  1. MULTI  开启一个事务
  2. EXEC  执行事务  

五、Redis持久化

持久化是redis中一个重要的功能,因为redis是基于内存的数据库,如果没有持久化,一旦服务器重启或者断电,之前所有的数据都会丢失。

redis的持久化有两种方式:

1.RDB 快照保存,缺点如果在服务器宕机了,最后一次快照之后的所有修改内容都会丢失掉,rdb更适合做来备份

2.它是以日志的形式来记录每一个写操作,当redis重启的时候,就要通过执行AOF文件的命令来在内存中重建整个数据库的内容。

  1. RDB  在指定时间间隔内,内存的数据快照写入磁盘。可以在vim redis.vonf找到save参数进行配置,例如 save 3600 1 第一个参数代表秒数,第二个参数表示修改次数。在终端直接输入save命令可以手动执行快照 生成的文件dump.rdb bgsave会单独创建一个子进程,将内存的数据写入硬盘中
  2. AOF 开启AOF的方式在vim redis.vonf文件 appendonly这个值改成yes就可以了

六、主从复制

主从复制是将一台redis服务器的数据,复制到其他redis服务器中,也叫主节点和从节点,一个主节点可以有多个从节点。一般来说主节点负责写操作,从节点负责读操作。

  • 配置主从复制:主节点不需要修改任何配置,默认的配置就是主节点,只需要修改从节点的配置就可以了
  • 修改redis.conf这个配置文件
  • port 6380 修改端口号改成6380
  • pidfile /var/run/redis_6380.pid pidfile文件也改成6380
  • dbfilename dump-6380.rdb  这个是rdb文件也修改成功6380
  • replicaof 127.0.0.1 6379 把replicaof打开表示这个是6379的从节点

进入从节点输入命令:info replication 

role:slave 看到slave表示这个是从节点

七、哨兵模式

redis哨兵模式可以实现主从复制自动故障转移,它会以一个独立的进程,运行在redis集群中,用来监控redis集群中的各个节点是否运行正常。

1.监控。通过不断的发送命令,来检查redis是否正常

2.通知。如果发现某个节点出现了问题,哨兵就会发送订阅模式来通知其他节点

3.自动故障转移。当主节点不能正常工作,哨兵会开启一个自动故障转移的操作,它会将一个从节点升级为新的主节点,让其他从节点执行新的主节点

哨兵本身也是一种进程,它自己也有单节点故障的问题,一般在实际的生成环境,会使用3个哨兵节点来保证高可用,这三个哨兵会通过选举的方式选出一个领导者,然后由领导者来监控其他节点,如果领导者挂了,其他哨兵节点会重新选取一个领导者

  • 在redis中添加一个sentinel.conf文件
  • 在文件中添加 
  • sentinel monitor master 127.0.0.1 6379 1
  •   master表示要监控的主节点名称 + 主节点的ip和端口号 参数1表示一个哨兵,一般配置3个
  • redis-sentinel sentinel.conf  启动哨兵节点

  • 18
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于学习Redis基础知识,可以按照以下思路进行学习: 1. 了解Redis的概念和特点:首先需要了解Redis是什么,它的主要特点是什么,它为什么被广泛应用于缓存、消息队列、会话管理等场景。 2. 安装和配置Redis:根据你的操作系统,安装Redis并进行相关配置。可以参考Redis官方文档或其他教程来完成这一步。 3. 学习Redis的数据结构:Redis支持多种数据结构,如字符串、哈希、列表、集合和有序集合等。了解每种数据结构的特点、用途和操作命令,并通过实际操作来加深理解。 4. 掌握Redis的常用命令:学习Redis的常用命令,如get、set、hget、hset、lpush、lrange、sadd、smembers等,了解每个命令的具体用法和参数含义。 5. 理解Redis的持久化机制:了解Redis的RDB和AOF两种持久化方式,以及它们的优缺点。学习如何进行备份和恢复数据。 6. 学习Redis的事务和Lua脚本:了解Redis事务的基本概念和使用方法,以及如何使用Lua脚本来进行复杂的操作。 7. 深入了解Redis的性能优化和高可用方案:学习如何优化Redis的性能,包括配置调优、使用合适的数据结构、合理地使用缓存等。同时了解Redis的高可用方案,如主从复制、哨兵模式和集群模式。 8. 学习Redis与其他技术的结合:了解Redis如何与其他技术进行结合,如与Python、Java等编程语言的配合使用,以及与Spring、Django等框架的整合。 以上是学习Redis基础知识的一个思路,你可以根据自己的实际情况和需求进行学习和拓展。推荐参考一些经典的Redis教程和实战案例,通过实际操作和项目实践来提升自己的技能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值