Bitmap数据类型是什么?能用来干什么?

Redis 的 Bitmap 数据类型是一种位图数据结构,可以表示大量的二进制位,并对这些位进行高效的位操作。Bitmap 在许多实际场景中都有广泛的应用,以下是几个常见的使用场景:

用户在线状态:
Bitmap 可以用于记录用户的在线状态,每个用户使用一个位来表示在线或离线。可以通过设置或清除相应的位来更新用户的在线状态,以及进行快速的查询和统计在线用户数量。

签到系统:
Bitmap 可以用于实现用户的签到系统。每个用户使用一个位表示每天是否签到,可以通过设置或清除相应的位来记录用户的签到情况,并对签到数据进行统计和分析。[……]

继续阅读

消息队列是个啥?干啥用的?

消息队列是一种用于在应用程序之间传输数据的软件模式。它允许不同的应用程序通过在共享队列中存储和检索消息来实现异步通信。

消息队列通常包括三个主要组件:消息生产者、消息队列和消息消费者。消息生产者负责将消息发送到消息队列,而消息消费者则从消息队列中接收消息并进行处理。消息队列则充当了这两者之间的缓冲区。

消息队列通常用于以下情况:

解耦:消息队列可以帮助解耦应用程序之间的依赖关系,因为消息生产者和消息消费者可以独立地运行,而不必知道对方的具体实现。
异步通信:通过消息队列,应用程序可以异步地通信,这意味着一个应用程序可以发送消息并继续进行其他[……]

继续阅读

传家宝级八股文问题:Redis为什么这么快?

简单回答:
1. 基于内存实现
2. 高效的数据结构(动态字符串(SDS)、跳表(skiplist)、哈希表(hashtable)、整数数组(intset)、快速列表(quicklist)、紧凑列表(listpack)、基数树(stream)等等)
3. 单线程结合多线程(避免频繁的上下文切换和资源竞争)
4. I/O多路复用;非阻塞I/O模型
5. 高性能的自定义通讯协议RESP

接下来展开说说

基于内存实现

低延迟高读取速度:以ddr4内存为例,延迟基本在15纳秒左右,优秀的硬件可以做到更低;读写速度基本在30[……]

继续阅读

背景

问题:
如何在秒杀环境下保证库存不卖超?
如何在保证整点开抢的优惠券能不多不少的发放完毕?

解决方案:
1. 使用MySQL中的库存字段进行扣减。在高并发的情况下由于业务代码的处理延迟,可能导致卖超,如果数据库还有读写分离,那就更加灾难了。
2. 将库存数据读取到内存中加锁进行扣减。在单机器部署的情况下可以很完美的解决问题,但是在分布式系统中,每个独立实例的扣减最终汇总很难完美统一。
3. 利用Redis的单线程特性集中扣减。可以很好的解决分布式系统中集中扣减的问题,但也是由于单线程的原因,单核CPU始终有极限,并发超过一定阈值的时候,由于串行计算的原因,前端需要等待很[……]

继续阅读

HyperLogLog 是什么?

HyperLogLog 是一种基数估算算法, 并非redis独有。
目的是做基数统计,故不是集合,不会保存元数据,只记录数量而不是数值。
消耗空间极小,支持输入非常大体积的数据量。

具体应用场景

说人话,HyperLogLog能用来干啥?

假设我们手机APP需要统计登录页、注册输入账号密码页、填写基本资料页、填写附加资料页、广告推荐页这五个页面的PV和UV。
PV好办,在Redis中直接放5个key,咱们访问哪个页面一次加一次即可;可是UV不行呐,需要区分不同的用户的访问,同一个用户访问1000次都是加1,需要去重。
假设此时我们的[……]

继续阅读

背景

上古面试题:让你实现一个附近的人功能,你有什么方案?

“附近的人” 功能生活中是比较常用的,像外卖app附近的餐厅,共享单车app里附近的车辆。既然常用面试被问的概率就很大,实现方法有很多种,MySQL8之后的空间索引,MongoDB的2d索引,Redis3.2之后的GEO等都可以很高效且完美的满足需求,本文主要讨论如何用Redis GEO实现距离计算和排序,以及分页。

本文仅讨论Redis GEO 的实战应用,不讨论具体算法实现。

科普:

世界上标识一个位置,通用的做法就使用经、纬度。经度的范围在 (-180, 180],纬度的范围 在(-85, 85)左右,纬度[……]

继续阅读

Redis是干嘛用的?为什么要选用Redis?

Redis一个开源的,是高性能的 key-value 数据库,单线程,所有操作均为原子操作。可以用来进行高性能的内存缓存,例如高度重复的数据库查询、秒杀活动中的库存防超卖、消息队列、数据基数统计、距离数据索引/查询等等。本文先从基本的数据结构入手,进行实际应用。

Redis有几种数据类型或结构?

Redis有如下几种数据类型:
* String
* Hash
* List
* Set
* Sorted Set
* Pub/Sub
* Geo
* HyperLogLog
* Bitmap
* Bitfields
*[……]

继续阅读

背景:

出于折腾和网络设备降价,最近入手了2.5G软路由,家里NAS和电脑都升级了2.5G网卡,电脑端正常打驱动后直接可以使用,外网网速跑满1300MB。但True NAS系统则迟迟打不上驱动,或者驱动不生效,多方爬贴也仅在网上找到最晚支持12.0版本FreeBSD核心的驱动,但我的系统已经更新到最新13.1,当然是不能用的。这里必然就要发挥作为一个程序猿的专长了,毕竟FreeBSD还是很熟的。

[cc lang=”bash”]
root@truenas[~]# uname -a
FreeBSD truenas.local 13.1-RELEASE-p2 FreeBSD 13.1-[……]

继续阅读

概述

“NAS播放器”是由本人(@程序猿老龚)开发的一款app。我非常谨慎和严肃地对用户隐私数据。这份文档包含了在您使用“NAS播放器”过程中我是如何收集和处理信息的。

我收集的信息

我不会收集、存储或传输任何可识别或不可识别的信息到我的服务器。未经您的同意,“NAS播放器”绝对不会传输您的数据和文件到任何地方。

我不会收集任何联系信息、位置信息、文件等数据。

我怎么使用您的信息

由于我不收集有关您的任何信息,因此我无法使用任何信息。

使用数据分析服务和第三方服务

使用此应用程序的过程中,NAS播放器没有接入任何数据分析服务。 NAS播放器不会监视您的使用情况或[……]

继续阅读

问题描述

今天在软路由上安装无线网卡,网卡型号为AR5B125,网上找资料得到驱动包在kmod-ath9k中,一顿操作安装,报错kmod-ath9k found, but incompatible with the architectures configured。

固件版本 Openwrt Koolshare Router V2.37 r17471-8ed31dafdf
内核版本 5.4.108

软件包地址:https://downloads.openwrt.org/snapshots/targets/x86/64/packages/
需要内核版本:5.4.137

解决方[……]

继续阅读