一.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 通过复制功能实现主节点的多个副本。
主节点用来写,从节点用来读,这样做可以降低主节点的访问压力。
复制支持多种拓扑结构,可以在适当的场景选择合适的拓扑结构。
复制分为全量复制,部分复制和实时复制。
主从节点之间通过心跳机制保证主从节点通信正常和数据⼀致性。