Redis学习笔记

1.什么是Redis,为什么要用Redis?  

  由于Mysql和Oracle等关系型数据库是存储在磁盘当中的,所以由于磁盘的IO速度与CPU处理速度相比,速度较慢,所有说关系型数据库非常影响效率,因此出现了Redis这种Nosql(非关系型数据库)存储在内存(并不是完全存储在内存中)中的高性能的键值对存储系统。

2.Redis中的数据类型

Redis中有五种基本数据类型和五种高级数据类型

 基本数据类型:String ,List,Set,SortedSet,Hash

 高级数据类型: 消息队列Stream, 地理空间Geospatial, HyperLogLog ,位图,位域

 3.Redis常用命令(String)(Redis中的键是区分大小写的)
设置数据

Set key value(Set name Fuffu)

查看数据

Get key (Get name)(Redis中的值默认都是已字符串的形式存储)

查看键的过期时间

TTL key (TTL name)若返回值为-1代表未设置返回值,返回值为-2代表键已过期

设置键的过期时间
在定义键的时候设置过期时间

SETEX   key second value

设置已存在的键的过期时间

EXPIRE key 20(EXPIRE name 20)

查看是否存在某个键

EXITS key(EXITS name)

查看已存在的所有键

Keys * (KEYS *me 查看名称以me结尾的所有的键)

删除键

DEL key(DEL name)

删除所有的键

FLAUSHHALL

Redis常用命令(LINK,元素可重复)
创建列表并添加值

LPUSH(从左到右添加元素,最后添加的元素放在队列的头部)/RPUSH(从右到左添加元素,最后添加的元素放在队列的尾部)

LPUSH/RPUSH key element[elements....](LPUSH/RPUSH letter a)

查看元素

LRANGE/RRANGE key start stop(LRANGE/RRANGE letter 0 -1)(0到-1代表所有元素)

删除元素

LPOP/RPOP key [count] (LPOP代表从头部删除,RPOP从尾部删除,count代表删除的个数)

查看列表的长度

LLEN key(LLEN letter)

截取列表的元素

LTRIM key start stop(保留从开始位置到结束位置的元素)

Redis常用命令(Set,无序不可重复)
添加元素(若添加重复元素则输出0表示添加失败)

SADD key member[members](SADD course Redis)

查看元素

SMEMBERS key

删除元素

SREM key member

判断是否存在某个元素

SISMEMBER key element

集合之间的运算(sinter,sunion,sdiff)
Redis常用命令(SortedSet,有序集合,每个元素都有一个浮点类型的分数,按照分数从小到大排序)
添加元素

ZADD key score member [score member...](ZADD result 690 清华 680 北大 650 复旦 640 浙大)

查看元素

ZRANGE key start stop (ZRANGE result 0 -1 )(输出结果按分数从大到小排序,但不会输出分数)

查看元素(包含分数)

ZRANGE key start stop WITHSCORES

查看某个元素的分数

ZSCORE key member (ZSCORE result 清华)

查看某个元素的排名

ZRANK key member (ZRANK result 清华)排名为按分数倒序)

查看某个元素的降序排名

ZREVRANK key member(ZREVRANK result 清华)

删除某个元素

ZREM key member(ZREM result 清华)

Redis常用命令(Geospatial,用于保存地理位置的经纬度)
添加元素

GEOADD key [经度|维度] value

查看元素的经纬度

GEOPOS key value

查看两个地理位置的距离

GEODIST key  value1 value2(默认以米为单位,若要换算为千米 在命令后添加 KM)

查询指定范围内的元素

GEOSERCH key FROMMEMBER member1 BYRADIUS 300 KM  

Redis常用命令(HyperLogLog,HyperLogLog是一种基数估计算法,而它算法的最本源则是伯努利过程。)
实现原理

HyperLogLog是一种基数估计算法,它可以在只使用很少的内存空间的情况下,近似地估计一个集合中不重复元素的数量。

HyperLogLog算法的核心思想是将每个元素映射为一个二进制字符串,并对这个字符串进行一些特殊的处理,最终得到一个估计值,表示集合中不重复元素的数量。HyperLogLog算法的基本原理可以概括为以下几步:

对每个元素进行哈希运算,得到一个二进制字符串。

将这个二进制字符串分成若干个组(比如分成4个组),每个组的长度相等。

对每个组分别取最高位为1的位置(即从左往右数第一个为1的位置),得到一个索引值。

将这些索引值合并成一个二进制数,并将其转换为一个整数,作为集合中不重复元素的数量的估计值。

HyperLogLog算法的估计值的精度和存储空间有关,通常来说,可以通过调整存储空间的大小来控制估计值的误差率。HyperLogLog算法的误差率可以控制在0.81%以内。
                        

添加元素

PFADD key element  [element...]

查看基数

PFCOUNT key

合并到新的HypeLogLog中

PFMERGE newkey key1 key2(将key1和key2合并到result中)

Redis常用命令(Stream 消息队列)
添加消息队列

XADD * stream key value (*代表自动生成序列号,序列号的格式为 时间戳-序号)

查看内容

XRANGE stream - + (查看所有的内容)

删除信息

XDEL stream id(根据序列号删除信息)

读取信息

XREAD COUNT number BLOCK time STREAMS stream  number2(从stream中读取信息,一次性读取number条数据,若读取不到数据则阻塞time毫秒,从number2条信息开始读取)

创建一个消费者组

XGROUP CREATE stream group id(在steam消息中创建了一个名为grop的组 ID为id)

查看组的信息

XINFO  GROUPS stream (查看消息stream中所有组的信息)

在组中添加消费者

XGROUP CREATECONSUMER stream group consumer 

消费者读取信息

XREADGROUP group consumer COUNT number BLOCK time STREAMS stream number >

Redis常用命令(位图BitMap)

位图是特殊的String类型,类似于java中的数组,可以通过位图的偏移量查找指定位置的值,位图中的值只能是0或者1

添加元素

ADDBIT key 偏移量 value (ADDBIT dianzan 0 1)

查看指定位置的值

GETBIT key 偏移量(GETBIT dianzan 0)

因为位图就是特殊的String类型,所以也可以使用String类型的命令

ADD key value (ADD dianzan "/xF0")

统计位图中所有值为1的数量

BITCOUNT key [start stop]

查看第一次出现0的下标位置

BITPOS key 0 [start stop] 

Redis常用命令(位域 BITFIELD)

位域能够将很多较小的整数存储在一个较大的位图当中,这样可以提高空间的利用率

以游戏中的等级,金币数量为例

添加一个等级为1金币数量为一百的玩家1.

BITFIELD paly:1 set u8 #0 1(u8代表8位无符号整数)

BITFIELD payl:1 set u32 #1 100(u32代表三十二位无符号的整数,因为金币的数量较大)

查看一号玩家的等级

BITFIELD paly:1 get u8 #0

在该玩家杀掉一个小怪获得100金币后

BITFIELD play:1 incrby u32 #1 100

Redis数据库的事务

众所周知Mysql数据库是支持事务的并且Mysql的事务有四大特性分别是

原子性:事务中的操作是一个整体,不可分割,要么全部成功要么全部失败。

一致性:在同一个事务中多次访问数据库中的同一条数据,得到的值应该是一致的,相同的。

隔离性性:事务中的操作相互隔离互不影响。

持久性:事务一旦提交之后,对数据库的修改是永久的。

Redis中的事务与关系型数据库中的事务不同,Redis中的事务不存在原子性的特点,也就是说当事务中出现无法执行的操作时并不会影响其他的的操作。Redis在输入MULTI命令后开启事务,事务中的所有操作会缓存到队列中,在得到EXEC命令后依次执行。

Redis持久化

因为Redis是基于内存存储的,因此一旦服务器重启就会丢失所有数据,所以说Redis的持久化是非常重要的。Redis持久化提供的两种方式。

RDB(Redis DataBase)

RDB持久化的原理是,在配置文件中可以设置在某个时间段内,执行了多少此操作,就可以触发快照,RDB就是将快照保存到磁盘当中。也可以通过save命令手动触发快照。由于在生产环境下开辟的redis空间都是比较大的,而且在Redis中的数据写入到磁盘的时候,Redis是处于阻塞状态的,无法进行其他操作,所以Redis又提供了另一个命令bgsave,这个命令会创建一个线程去进行保存操作。从而解决了保存时Redis无法进行操作的问题。然而创建线程仍然会有一定的性能损耗,因为folk一个线程也是需要时间这段时间Redis仍然无法执行任何操作,无法做到秒及的快照,为了解决这个问题因此产生了AOF。

AOF(append-only file)(追加文件)

AOF 的原理是,在执行Redis的写操作不仅会修改内存中的Redis数据,还会将该操作写入到AOF文件当中,AOF会以日志的形式去记录这些操作。在重启Redis后会重新执行AOF文件中的操作,去重建Redis中的数据,开启AOF的方式就是在配置文件中将append-only设置问yes。

Redis主从复制

定义

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);

数据的复制是单向的,只能由主节点到从节点。

默认情况下,每台Redis服务器都是主节点,且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

目前很多中小企业都没有使用到 Redis 的集群,但是至少都做了主从。有了主从,当 master 挂掉的时候,运维让从库过来接管,服务就可以继续,否则 master 需要经过数据恢复和重启的过程,这就可能会拖很长的时间,影响线上业务的持续服务。

启用方式

从节点开启主从复制,有3种方式:

(1)配置文件

在从服务器的配置文件中加入:slaveof masterip masterport

(2)启动命令

redis-server启动命令后加入 --slaveof masterip masterport

(3)客户端命令

Redis服务器启动后,直接通过客户端执行命令:slaveof masterip masterport,则该Redis实例成为从节点。

上述3种方式是等效的,下面以客户端命令的方式为例,看一下当执行了slaveof后,Redis主节点和从节点的变化。

完成上面的配置后, 从服务器会将主服务器的ip地址和端口号保存到服务器状态的属性里面。可以Redis使用info Replication 命令分别查看从服务器和主服务器的主从信息

Redis哨兵模式
定义

哨兵(sentinel)是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的master并将所有slave连接到新的master

作用
监控:哨兵节点会不不断的检查主节点和从节点是否正常。
通知:当哨兵节点监控的节点出现故障之后,会向哨兵间或者客户端发送通知。
自动故障处理:当主节点出现故障之后,会送slave中选举一个成为主节点。
注意:

Redis哨兵节点也是一个Redis服务,只是不提供数据服务,所以哨兵节点也会出现故障,因为一般会创建多个哨兵节点(大部分为单数),多个哨兵节点会选举出一个领导者来进行监控,若领导者挂了,则会从其他的哨兵节点中重新选举出一个。

  • 16
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
尚硅谷是一个教育机构,他们提供了一份关于Redis学习笔记。根据提供的引用内容,我们可以了解到他们提到了一些关于Redis配置和使用的内容。 首先,在引用中提到了通过执行命令"vi /redis-6.2.6/redis.conf"来编辑Redis配置文件。这个命令可以让你进入只读模式来查询"daemonize"配置项的位置。 在引用中提到了Redis会根据键值计算出应该送往的插槽,并且如果不是该客户端对应服务器的插槽,Redis会报错并告知应该前往的Redis实例的地址和端口。 在引用中提到了通过修改Redis的配置文件来指定Redis的日志文件位置。可以使用命令"sudo vim /etc/redis.conf"来编辑Redis的配置文件,并且在文件中指定日志文件的位置。 通过这些引用内容,我们可以得出结论,尚硅谷的Redis学习笔记涵盖了关于Redis的配置和使用的内容,并提供了一些相关的命令和操作示例。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Redis学习笔记--尚硅谷](https://blog.csdn.net/HHCS231/article/details/123637379)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Redis学习笔记——尚硅谷](https://blog.csdn.net/qq_48092631/article/details/129662119)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值