Redis笔记(二)

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis笔记

Redis文件配置


找到文件redis.conf并打开
(想详细了解的,可以自己去读一下redis.conf文件注解)


###Units单位###


配置大小单位,开头定义了一些基本的度量单位,只支持bytes,不支持bit,大小写不敏感


###include###


一个页面包含另一个页面的内容,类似jsp中的include,多实例的情况可以把公用的配置文件提取出来


###network###


  • bind 配置默认情况bind=127.0.0.1只能接收本机的访问请求;不写的情况下,无限制接收任何ip地址的访问,如果开启了protected-mode,那么在没有设定bind ip且没有设密码的情况下,redis只允许接收本机的响应
  • protected-mode 开启他的保护模式,开启之后就只能本机访问,而远程无法访问,默认为yes
  • port 端口号,默认为6379
  • tcp-backlog 511 设置tcp的backlog,backlog其实是一个连接队列,backlog队列总和 = 未完成三次握手队列+已完成三次握手队列。在高并发环境下你需要一个高backlog值来避免慢客户端连接问题注意linux内核会将减小到/proc/sys/net/core/somaxconn的值(128),所以需要确认增大/proc/sys/net/core/somaxconn和/proc/sys/net/ipv4/tcp_max_syn_backlog(128)两个值来达到想要的效果
  • timeout 0 一个空闲的客户端维持多少秒会关闭,0表示永不关闭
  • tcp-keepalive 300 检查心跳时间,检查redis活连接数,单位为秒,如果设置为0,则不会进行Keepalive检测,建议设置成60


###GENERAL###


  • daemonize 是否为后台进程,设置为yes守护进程,后台启动
  • pidfile 存放pid文件的位置,每个实例会产生一个不同的pid文件
  • loglevel notice 日志的输出级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为notice
  • logfile  "" 日志文件名称
  • databases 16 默认有16个库,默认使用数据库为0


###SECURITY安全###


  • 密码设置,打开注释 requirepass


访问密码的查看、设置和取消
在命令中设置密码,只是临时的。重启redis服务器,密码就还原了。
永久设置,需要再配置文件中进行设置。

网络异常,图片无法展示
|


###LIMITS限制###


  • maxclients 设置redis同时可以与多少个客户端进行连接,默认情况下为10000个客户端如果达到了限制,redis则会拒绝新的连接请求,并且会向这些连接请求方发出“max number of clients reacher“以作回应
  • maxmemory 建议必须设置,否则,将内存占满,造成服务器宕机。设置redis可以使用的内存量,一旦到达内存使用上限,redis将会试图移除内部数据,一处规则可以通过maxmemory-policy来指定。 如果redis无法根据移除规则来移除内存中的数据,或者设置了“不允许移除”,那么redis则会针对那些需要申请内存的指令返回错误信息,比如SET、LPUSH等。 但是对于无内存申请的指令,仍然会正常响应,比如GET等。如果你的redis是主redis(说明你的redis有从redis),那么在设置内存使用上限时,需要在系统中留出一些内存空间给同步队列缓存,只有在你设置的是“不移除”的情况下,才不用考虑这个因素。
  • maxmemory-polocy
  • volatile-lru :使用lru算法移除key,只对设置了过期时间的键;(最近最少使用)
  • allkeys-lru: 在所有集合key中,使用lru算法移除key
  • volatile-random 在过期集合中移除随机的key,只对设置了过期时间的键
  • allkeys-random:在所有集合key中,移除随机的key
  • volatile-tll:移除那写tll值最小的key,即那些最近要过期的key
  • noeviction: 不进行移除,针对写操作,只是返回错误信息


  • maxmemory-samples 设置样本数量,LRU算法和最小TTL算法都并非是精确的算法,而是估算值,所以你可以设置样本的大小,redis默认会检查这么多个key并选择其中LRU的那个。 一般设置3到7的数字,数值越小样本越不准确,但性能消耗越小。

消息的发布与订阅


消息的发布与订阅是redis带的一个功能
redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息
redis客户端可以订阅任意数量的频道
1、客户端可以订阅频道如下图

网络异常,图片无法展示
|

2、当给这个频道发布消息后,消息就会发送给订阅的客户端

网络异常,图片无法展示
|


发布订阅命令行实现


1、 打开一个客户端订阅channel1
SUBSCRIBE channel1

网络异常,图片无法展示
|

2、打开另一个客户端,给channel1发布消息hello
publish channel1 hello

网络异常,图片无法展示
|

返回的1是订阅者数量
3、打开第一个客户端可以看到发送的消息

网络异常,图片无法展示
|

注:发布的消息没有持久化,如果在订阅的客户端收不到hello,只能收到订阅后发布的消息


Bitmap(Redis新数据类型)


简介

现代计算机用二进制(位)作为信息的基础单位,1个字节等于8位, 例如“abc”字符串是由3个字节组成, 但实际在计算机存储时将其用二进制表示, “abc”分别对应的ASCII码分别是97、98、99,对应的二进制分别是01100001、01100010和01100011,合理地使用操作位能够有效地提高内存使用率和开发效率。
Redis提供了Bitmaps这个“数据类型”可以实现对位的操作:
(1) Bitmaps本身不是一种数据类型,实际上它就是字符串(key-value) , 但是它可以对字符串的位进行操作。
(2) Bitmaps单独提供了一套命令, 所以在Redis中使用Bitmaps和使用字符串的方法不太相同。 可以把Bitmaps想象成一个以位为单位的数组, 数组的每个单元只能存储0和1, 数组的下标在Bitmaps中叫做偏移量。(不太清楚的可以继续往下看,实例说明)

网络异常,图片无法展示
|

常用命令

setbit 设置bitmaps中某个偏移量的值(0或1)
*offset:偏移量从0开始
实例: unique:users:20201106代表2020-11-06这天的独立访问用户的Bitmaps

网络异常,图片无法展示
|

每个独立用户是否访问过网站存放在Bitmaps中, 将访问的用户记做1, 没有访问的用户记做0, 用偏移量作为用户的id。
设置键的第offset个位的值(从0算起) , 假设现在有20个用户,userid=1, 6, 11, 15, 19的用户对网站进行了访问, 那么当前Bitmaps初始化结果如图

网络异常,图片无法展示
|

第一次初始化bitmaps时,假如偏移量(数组下标)非常大,那么整个初始化过程执行会比较慢,可能会造成redis阻塞。
getbit 获取bitmaps中某个偏移量的值
bitcount (这里我就不详细介绍了)
统计字符串被设置成为1的bit数。一般情况下,给定的整个字符串都会被进行计数,通过指定额外的start或end参数,可以让计数只在特定的位上进行。start和end参数的设置,都可以使用负数值:比如-1表示最后一个位,而-2表示倒数第二个位,start、end是指bit组字节的下标数,二者皆包含
bitcount[start end] 统计字符串从start字节到end字节比特值为1的数量
bitop and(or/not/xor)  [key..]
bitop是一个复合操作,它可以做多个bitmaps的and(交),or(并),not(非),xor(异或)操作并将结果保存在destkey中。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
11天前
|
canal 缓存 NoSQL
【Redis系列笔记】双写一致性
本文讨论了缓存不一致问题及其后果,如价格显示错误和订单计算错误。问题主要源于并发和双写操作的异常。解决方案包括使用分布式锁(但可能导致性能下降和复杂性增加)、延迟双删策略(通过延迟删除缓存来等待数据同步)以及异步同步方法,如通过Canal和MQ实现数据的最终一致性。面试中,可以提及这些策略来确保数据库和缓存数据的一致性。
43 1
【Redis系列笔记】双写一致性
|
11天前
|
缓存 NoSQL 安全
【Redis系列笔记】缓存三剑客
缓存穿透是指请求一个不存在的数据,缓存层和数据库层都没有这个数据,这种请求会穿透缓存直接到数据库进行查询。它通常发生在一些恶意用户可能故意发起不存在的请求,试图让系统陷入这种情况,以耗尽数据库连接资源或者造成性能问题。 缓存击穿发生在访问热点数据,大量请求访问同一个热点数据,当热点数据失效后同时去请求数据库,瞬间耗尽数据库资源,导致数据库无法使用。 缓存雪崩是缓存中大量key失效后当高并发到来时导致大量请求到数据库,瞬间耗尽数据库资源,导致数据库无法使用。
34 1
|
3月前
|
存储 缓存 NoSQL
蚂蚁金服P7私藏的Redis原理与实践内部笔记
Redis 是完全开源免费的,是一个高性能的key-value类型的内存数据库。整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。
61 1
|
4月前
|
NoSQL Redis
Redis原理之网络通信协议笔记
1. RESP协议 ​2. 自定义Socket连接Redis
|
4月前
|
NoSQL Linux Redis
Redis原理之网络模型笔记
Redis采用单线程模型,这意味着一个Redis服务器在任何时刻都只会处理一个请求。Redis的网络模型涉及到阻塞I/O(Blocking I/O)、非阻塞I/O(Non-blocking I/O)、I/O多路复用(I/O Multiplexing)、信号驱动I/O(Signal-driven I/O)以及异步I/O(Asynchronous I/O)。
|
9天前
|
NoSQL Java 关系型数据库
【Redis系列笔记】分布式锁
分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁,只要大家使用的是同一把锁,那么我们就能锁住线程,不让线程进行,让程序串行执行,这就是分布式锁的核心思路
31 2
|
4天前
|
存储 NoSQL Redis
【Redis系列笔记】Redis总结
Redis是一个基于内存的 key-value 结构数据库。 Redis 是互联网技术领域使用最为广泛的存储中间件。 Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供的数据是可以达到100000+的QPS(每秒内查询次数)。 它存储的value类型比较丰富,也被称为结构化的NoSql数据库。
14 0
|
4天前
|
缓存 NoSQL Java
【Redis系列笔记】Redis入门
本文介绍了Redis常用命令,以及SpringBoot集成Spring Data Redis和Spring Cache。Spring Data Redis 提供了对 Redis 的操作方法,而 Spring Cache 则提供了基于注解的缓存功能,可以方便地将方法的返回值缓存到 Redis 中,以提高性能和减少对数据源的访问次数。这样的集成可以帮助开发者更便捷地利用 Redis 来管理应用程序的数据和缓存。
28 4
|
6天前
|
存储 缓存 NoSQL
Redis笔记 | 青训营
Redis笔记 | 青训营
|
9天前
|
缓存 NoSQL Java
【Redis系列笔记】Redis事务
Redis事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。
35 3