很多博客只讲了五大基本类型,确实,是最常用的,而且百分之九十的程序员对于Redis只限于了解String这种最常用的。但是我个人认为,既然Redis官方提供了其他的数据类型,肯定是有相应的考量的,在某些特殊的业务场景中,这些特殊的类型还是能够给我们多一种解决思路!
Geospatial: 地理位置
georadius(查询附近位置)操作
再Redis中,可能会有一定的误差性。 官方给出的误差率是0.81%。
如果在实际业务中,允许一定的误差值,我们可以使用基数统计来计算~效率非常高
Hyperloglog: 基数
Bitmap: 位存储
127.0.0.1:6379> setbit login 1 1 #添加周一已登陆 为1
(integer) 0
127.0.0.1:6379> setbit login 2 1
(integer) 0
127.0.0.1:6379> setbit login 3 1
(integer) 0
127.0.0.1:6379> setbit login 4 0 #添加周四已登陆 为0
(integer) 0
127.0.0.1:6379> setbit login 5 0
(integer) 0
127.0.0.1:6379> setbit login 6 1
(integer) 0
127.0.0.1:6379> setbit login 7 0
(integer) 0
127.0.0.1:6379> getbit login 1 #获取周一是否登录
(integer) 1
127.0.0.1:6379> getbit login 4 #获取周四是否登陆
(integer) 0
127.0.0.1:6379> bitcount login #统计这周登陆的天数
(integer) 4
总结:实际需求中,可能需要我们统计用户的登陆信息,员工的打卡信息等等。只要是事务的只有两个状态的,我们都可以用Bitmap来进行操作!!!
您提供的是一个Redis服务器的配置文件内容。以下是对每项配置的中文解释:
- **bind 0.0.0.0**:Redis监听所有可用的网络接口(包括本地回环和所有外部网络接口)。
- **protected-mode no**:关闭保护模式,这允许从任何主机连接到Redis,除非进一步配置了访问控制(如密码)。
- **port 6379**:设置Redis监听的端口号。
- **tcp-backlog 511**:设置TCP连接的backlog队列大小。这通常设置为高于一般系统默认值以处理大量连接。
- **timeout 0**:客户端空闲时间(秒),0表示关闭这个功能,不会断开空闲连接。
- **tcp-keepalive 300**:TCP连接保持活跃的时间间隔(秒),用于检测对方是否还保持连接状态。
- **daemonize yes**:Redis以守护进程的方式运行,即在后台运行。
- **pidfile /var/run/redis_6379.pid**:当Redis以守护进程方式运行时,PID文件的路径。
- **loglevel notice**:日志级别设置为notice,适度详细的日志级别,通常用于生产环境。
- **logfile "./redis.log"**:日志文件的路径。相对路径表示在当前工作目录下。
- **databases 16**:设置数据库的数量。Redis默认有16个数据库(编号0-15)。
- **always-show-logo no**:启动时是否显示Redis的ASCII艺术LOGO。
- **set-proc-title yes**:是否设置进程标题,这有助于监控和识别Redis实例。
- **proc-title-template "{title} {listen-addr} {server-mode}"**:设置进程标题的格式。
- **stop-writes-on-bgsave-error yes**:如果后台保存(BGSAVE)出错,停止写入操作。
- **rdbcompression yes**:对RDB文件进行压缩。
- **rdbchecksum yes**:在写入RDB文件时,加入CRC64校验和,以增加数据完整性检查。
- **dbfilename dump.rdb**:RDB文件的名称。
- **rdb-del-sync-files no**:在完成RDB文件保存后,是否删除旧的RDB文件。
- **dir ./**:工作目录,RDB文件和AOF文件将保存在此目录。
- **masterauth abc123**:如果Redis作为从节点,当连接到主节点时使用的密码。
- **replica-serve-stale-data yes**:如果从节点与主节点失去连接,是否继续提供可能过期的数据。
- **replica-read-only yes**:从节点是否为只读。
- **repl-diskless-sync no**:是否启用无盘复制(直接从主节点复制到从节点内存,不经过磁盘)。
- **repl-diskless-sync-delay 5**:无盘复制的延迟时间(秒)。
- **repl-disable-tcp-nodelay no**:是否在复制连接上禁用TCP_NODELAY选项。
- **replica-priority 100**:从节点的优先级,用于Sentinel(哨兵)系统选择新的主节点- **acllog-max-len 128**:ACL日志的最大长度。
- **requirepass abc123**:设置连接Redis所需的密码。
- **lazyfree-lazy-* no**:一系列关于是否异步释放数据的配置,全部设置为否意味着数据释放是同步的。
- **oom-score-adj no** 和 **oom-score-adj-values 0 200 800**:调整Redis在OOM(Out of Memory) killer下的优先级。设置为no表示不调整。
- **disable-thp yes**:禁用透明大页(Transparent Huge Pages),这通常可以减少内存碎片。
- **appendonly no**:是否启用AOF(Append Only File)持久化模式。
- **appendfilename "appendonly.aof"**:AOF文件名。
- **appendfsync everysec**:AOF文件的fsync策略,每秒同步一次。
- **no-appendfsync-on-rewrite no**:在AOF重写期间,是否在每次写入后调用fsync。
- **auto-aof-rewrite-percentage 100** 和 **auto-aof-rewrite-min-size 64mb**:自动AOF重写的条件,基于文件大小增长百分比和最小文件大小。
- **aof-load-truncated yes**:如果AOF文件结尾损坏,启动时是否加载这个文件。
- **aof-use-rdb-preamble yes**:AOF文件是否以RDB格式开始,这使得AOF文件可以兼容RDB的加载方式。
- **lua-time-limit 5000**:Lua脚本的最大执行时间(毫秒)。
- **slowlog-log-slower-than 10000**:定义什么是慢查询(微秒),超过此时间的查询将被记录。
- **slowlog-max-len 128**:慢查询日志的最大长度。
- **latency-monitor-threshold 0**:延迟监控阈值(毫秒),0表示用。
- **notify-keyspace-events ""**:键空间通知的事件类型,空字符串表示不通知。
- **hash-max-ziplist-entries 512** 和 **hash-max-ziplist-value 64**:哈希数据结构使用ziplist的阈值。
- **list-max-plist-size -2** 和 **list-compress-depth 0**:列表数据结构的配置,影响列表的存储和压缩方式。
- **set-max-intset-entries 512**:集合数据结构使用intset的阈值。
- **zset-maxziplist-entries 128** 和 **zset-max-ziplist-value 64**:有序集合使用ziplist的阈值。
- **hll-sp-max-bytes 3000**:HyperLogLog稀疏表示的最大字节数。
- **stream-node-max-bytes 4096** 和 **stream-node-max-entries 100**:流数据结构的节点大小限制。
- **activerehashing yes**:是否启用主动rehashing。
- **client-output-buffer-limit**:不同类型客户端(普通、副本、发布订阅)的输出缓冲区限制。
- **hz 10**:Redis调用内部函数检查空闲连接和执行其他周期性操作的频率。
- **dynamic-hz yes**:是否动态调整hz值,根据客户端连接的活跃度。
- **aof-rewrite-incremental-fsync yes**:在AOF重写时,是否增量调用fsync。
- **rdb-save-incremental-fsync yes**:在RDB保存时,是否增量调用fsync。
- **jemalloc-bg-thread yes**:是否使用jemalloc后台线程来管理内存,这有助于减少内存碎片和提高性能。
Jedis是Redis官方推荐的Java连接开发工具!
虽然现在的SpringBoot2.×版本已经将Jedis换成了Lettuce
行家有木有!出手就知道啊!
Redis配置对大小写不敏感!
主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master/leader),后者称为从节点(slave/follower);数据的复制是单向的,只能由主节点到从节点。Master以写为主,Slave 以读为主。
在Redis集群中我们讲到了,主机断开后,我们得手动设置另一个从机变成主机!这是不智能的!在实际工作中,我们都是用哨兵模式来自动切换主机。通俗点讲,就是自己去选择‘大哥’!
哨兵集群,基于主从复制模式 ,所有的主从配置优点,它全有
户需要查询一个数据,但是redis中没有(比如说mysql中id=-1的数),直接去请求MySQL