一.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
"bar"
"world"
"hello"
"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
- "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不需要存储每个不同的元素,而是通过哈希函数将元素映射到位图中的某些位置,并基于位图的统计信息来估计基数,这使得它在处理大规模数据集时非常高效且节省内存。
常用命令:
PFADD:向HyperLogLog添加元素。PFCOUNT:返回HyperLogLog的基数估算值。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,未签到设为0 。
- 用户在线状态监控:利用位图可以高效地记录和查询用户是否在线,每个用户占用一个位,通过
SETBIT和GETBIT命令进行操作 。 - 统计数据:位域可以用于聚合统计,如统计一定时间段内的用户行为,例如访问次数等 。
位域的基本命令包括:
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中,单条命令是原子性执行的,但事务不保证原子性,且没有回滚。事务中任意命令执行失败,其余的命令仍会被执行。备注
原子性(Atomicity):
- 原子性是指一个事务(Transaction)中的所有操作要么全部完成,要么全部不完成,不会结束在中间某个点。
- 如果事务中的任何操作失败,整个事务将被回滚到开始状态,就像这些操作从未发生过一样。
- 原子性确保了事务的"不可分割性",使得事务成为了数据库的可靠操作单元。
隔离性(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 通过复制功能实现主节点的多个副本。
主节点用来写,从节点用来读,这样做可以降低主节点的访问压力。
复制支持多种拓扑结构,可以在适当的场景选择合适的拓扑结构。
复制分为全量复制,部分复制和实时复制。
主从节点之间通过心跳机制保证主从节点通信正常和数据⼀致性。

