【Redis】

一.Widows下如何安装Redis?

*(1) .下载地址: 点击跳转.

如下图:

在这里插入图片描述

*(2) .下载成功后将其移动到我们想要安装的目录下并且解压:

如下图:

在这里插入图片描述

*(3) .进入后有以下内容文件:

*(4) .先点击redis-server.exe启动Redis服务,显示如下:

*(5) .再点击redis-cli.exel连接Redis,如下图所示:

*(6) .至此,在Windows下的安装就结束了。不过Redis官方文档不建议我们在Widows环境下搭建Redis服务。

解决redis-server.exe闪退问题:

首先cd到我们的redis-server.exe文件目录下打开cmd:输入以下代码

`redis-server.exe redis.windows.conf`

运行后就能打开redis文件了;


二、数据类型命令

(一)字符串String

  • SET key value - 将字符串值 value 关联到 key。

  • GET key - 获取与 key 相关联的字符串值。

  • SETNX key value - 如果 key 不存在,则将 key 的值设置为 value。

(二)列表List

LLEN key 获取列表长度

LPOP key 移出并获取列表的第一个元素

LPUSH key value1 [value2] 将一个或多个值插入到列表头部

LPUSHX key value 将一个值插入到已存在的列表头部

LRANGE key start stop 获取列表指定范围内的元素

LREM key count value 移除列表元素

LTRIM key start stop 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。

RPOP key 移除列表的最后一个元素,返回值为移除的元素。

(三)集合Set

SADD myset1 "hello"

(integer) 1

SADD myset1 "world"

(integer) 1

SADD myset1 "bar"

(integer) 1

SADD myset2 "hello"

(integer) 1

SADD myset2 "bar"

(integer) 1

SUNION myset1 myset2

  1. "bar"

  2. "world"

  3. "hello"

  4. "foo"

Redis Smembers 命令 - 返回集合中的所有成员

redis 127.0.0.1:6379> SADD myset "hello"

(integer) 1

redis 127.0.0.1:6379> SADD myset "foo"

(integer) 1

redis 127.0.0.1:6379> SADD myset "bar"

(integer) 1

redis 127.0.0.1:6379> SADD myset2 "hello"

(integer) 1

redis 127.0.0.1:6379> SADD myset2 "world"

(integer) 1

redis 127.0.0.1:6379> SINTER myset myset2

  1. "hello"

(三)有序集合SortedSet

有配对的分数

> ZADD result 680 清华 660 北大

>ZRANGE result 0 -1 显示第一个元素到最后一个元素

>ZRANGE result 0 -1 WITHSCORES 显示第一个元素到最后一个元素及其分数

>ZSCORE result 清华 查看清华的分数

>ZRANK result 清华 查看清华的排名

>ZREVRANK result 清华 查看清华排名 (反转下排名)

(四)哈希Hash


三、发布订阅模式

发布订阅模式有一些局限性,比如消息无法持久性,无法记录历史消息


四、消息队列Stream

*指ID


五、地理空间


六、HyperLogLog算法

适用于:精确度要求不高 数据量很大的统计工作

基数:集合12345的基数就是5 集合1234512345的基数还是5

HyperLogLog是一种概率数据结构,用于估计集合中不同元素的个数,即基数。Redis中的HyperLogLog实现使用大约12KB的内存,并提供标准误差为0.81%的基数估计 。与传统的集合数据结构不同,HyperLogLog不需要存储每个不同的元素,而是通过哈希函数将元素映射到位图中的某些位置,并基于位图的统计信息来估计基数,这使得它在处理大规模数据集时非常高效且节省内存。

常用命令:

  1. PFADD:向HyperLogLog添加元素。
  2. PFCOUNT:返回HyperLogLog的基数估算值。
  3. PFMERGE:合并多个HyperLogLog为一个,以估算它们的并集大小 。

添加课程

合并课程


七、位图

Redis中的位图(Bitmap)是一种基于字符串类型的数据结构,它使用位(bit)来表示信息,每个位可以是0或1,从而可以高效地存储和处理布尔值。位图在Redis中不是一个新的数据类型,而是通过在字符串类型上定义的一组位操作命令来实现的,这样可以利用字符串类型的二进制安全特性和最大长度达到512MB的优势 。

位图使用场景多样,如用户签到、在线状态监控、活跃用户统计、IP访问统计等。例如,可以使用位图来记录用户的签到情况,每天对应一个位,签到则将该位设为1,未签到设为0 。此外,位图还可以用来实现布隆过滤器,进行数据压缩,以及缓存预热等 。

位图的基本操作包括:

  • SETBIT key offset value:在指定的偏移量上设置位的值(0或1)。
  • GETBIT key offset:获取指定偏移量上的位值。
  • BITCOUNT key [start end]:统计指定范围内(或整个位图)值为1的位数。
  • BITOP operation destkey key [key ...]:对一个或多个位图执行AND、OR、XOR或NOT操作,并将结果保存到指定的键。
  • BITPOS key bit [start] [end]:返回位图中第一个(或最后一个)值为指定值的位的位置 。

位图在节省空间方面表现出色,但需要注意其在Redis中的使用限制,如最大偏移量不能超过2^32-1,这是由于字符串类型的最大长度限制所决定的 。此外,位图操作的时间复杂度通常为O(1),但读取长字符串时的时间复杂度为O(n),因此需要合理设计key的位数以避免性能问题 。

设置和获取某个偏移量的值

按字符串设置 ,并获取

八、位域

Redis中的位域(Bitfield)是一种数据结构,它允许用户对存储在位图中的整数值进行原子操作,包括设置、递增和获取。位域可以操作从无符号1位整数到有符号63位整数的任何内容,并且这些值使用二进制编码的Redis字符串进行存储 。

位域的使用场景包括但不限于:

  1. 用户签到记录:可以使用位图来记录用户的签到情况,每天对应一个位,签到则将该位设为1,未签到设为0 。
  2. 用户在线状态监控:利用位图可以高效地记录和查询用户是否在线,每个用户占用一个位,通过SETBITGETBIT命令进行操作 。
  3. 统计数据:位域可以用于聚合统计,如统计一定时间段内的用户行为,例如访问次数等 。

位域的基本命令包括:

  • SETBIT:设置指定偏移量上的位值为0或1。
  • GETBIT:获取指定偏移量上的位值。
  • BITCOUNT:统计位图中值为1的位数。
  • BITPOS:返回位图中第一个为

九、事务

multi用于开启事务 事务被放入到消息队列中 exec用于执行事务

Redis事务的相关命令如下:

MULTI:标识一个事务的开启,即开启事务;

EXEC:执行事务中的所有命令,即提交;

DISCARD:放弃事务;和回滚不一样,Redis事务不支持回滚。

WATCH:监视Key改变,用于实现乐观锁。如果监视的Key的值改变,事务最终会执行失败。

UNWATCH:放弃监视。

Redis事务是指将多条命令加入队列,一次批量执行多条命令,每条命令会按顺序执行,事务执行过程中不会受客户端传入的命令请求影响。

总结说:Redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。

Redis事务和关系型数据库的事务不太一样,它不保证原子性,也没有隔离级别的概念。

1.Redis事务没有隔离级别的概念 批量操作在发送 EXEC 命令前被放入队列缓存,并不会被实际执行,也就不存在事务内的查询要看到事务里的更新,事务外查询不能看到。
2.Redis不保证原子性 Redis中,单条命令是原子性执行的,但事务不保证原子性,且没有回滚。事务中任意命令执行失败,其余的命令仍会被执行。

备注

  1. 原子性(Atomicity)

    • 原子性是指一个事务(Transaction)中的所有操作要么全部完成,要么全部不完成,不会结束在中间某个点。
    • 如果事务中的任何操作失败,整个事务将被回滚到开始状态,就像这些操作从未发生过一样。
    • 原子性确保了事务的"不可分割性",使得事务成为了数据库的可靠操作单元。
  2. 隔离性(Isolation)

    • 隔离性是指并发执行的事务之间不会互相影响,每个事务都有如在隔离的环境中执行一样。
    • 事务的隔离性分为不同的级别,包括读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)等。
    • 这些级别定义了事务处理中对数据的可见性和冲突的控制,以避免脏读(Dirty Read)、不可重复读(Non-repeatable Read)和幻读(Phantom Read)等问题。

十、持久化

Redis提供了2种不同形式的持久化方式:

RDB(Redis DataBase) :简而言之,就是在指定的时间间隔内,定时的将 redis 存储的数据生成Snapshot快照并存储到磁盘等介质上;

AOF(Append Of File) :将 redis 执行过的所有写指令记录下来,在下次 redis 重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。

十一、主从复制

在若干个 Redis 节点中,有的是 "主" 节点,有的是 "从" 节点。从节点上的数据要随着主节点变化,和主节点保持一致。从节点是主节点的副本,在该模式中,从节点上的数据不允许修改,只能读取数据。后续如果有客户端来读取数据,就可以从所有节点中随机挑选一个节点,给这个客户端提供读取数据的服务。

引入更多的计算资源,那么能够支撑的并发量也就大幅提高了。如果是挂掉了某个从节点是没有什么影响的,此时继续从主节点(如果是主节点挂掉了,那还是有一定影响的,从系欸但只能读数据,如果需要写数据就没得写了)或者其它的从节点读取数据,得到的效果是完全相同的。

主从模式主要是针对 "读操作" 进行并发量和可用性的提高,而写操作无论是可用性还是并发都是非常依赖主节点的,但主节点又不能设置多个。在实际业务场景中,读操作往往是比写操作更频繁的。

主从结构是分布式系统中比较经典的一种结构。不仅仅是 Redis 支持,MySQL 等其它的常用组件也是支持的。

主从复制的特点:

Redis 通过复制功能实现主节点的多个副本。

主节点用来写,从节点用来读,这样做可以降低主节点的访问压力。

复制支持多种拓扑结构,可以在适当的场景选择合适的拓扑结构。

复制分为全量复制,部分复制和实时复制。

主从节点之间通过心跳机制保证主从节点通信正常和数据⼀致性。

十二、哨兵模式

相关推荐
十叶知秋26 分钟前
【jmeter】jmeter的线程组功能的详细介绍
数据库·jmeter·性能测试
monkey_meng38 分钟前
【Rust中多线程同步机制】
开发语言·redis·后端·rust
想要打 Acm 的小周同学呀1 小时前
LRU缓存算法
java·算法·缓存
hlsd#1 小时前
go 集成go-redis 缓存操作
redis·缓存·golang
镰刀出海1 小时前
Recyclerview缓存原理
java·开发语言·缓存·recyclerview·android面试
瓜牛_gn2 小时前
mysql特性
数据库·mysql
奶糖趣多多3 小时前
Redis知识点
数据库·redis·缓存
CoderIsArt4 小时前
Redis的三种模式:主从模式,哨兵与集群模式
数据库·redis·缓存
师太,答应老衲吧6 小时前
SQL实战训练之,力扣:2020. 无流量的帐户数(递归)
数据库·sql·leetcode
Channing Lewis7 小时前
salesforce case可以新建一个roll up 字段,统计出这个case下的email数量吗
数据库·salesforce