Redis之INCR命令,通常用于统计网站访问量,文章访问量,分布式锁

本文主要是介绍Redis之INCR命令,通常用于统计网站访问量,文章访问量,分布式锁,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

Redis的INCR命令用于将键的值增加1。如果键不存在,则会先将键的值设置为0,然后再执行INCR操作。INCR命令的作用是对计数器进行自增操作,可以用于实现多种场景,比如统计网站访问量、文章访问量、分布式锁等。

一、Redis键之INCR命令

1.INCR 命令

(1)用法:INCR key
(2)作用:将 key 中储存的数字值增一。
(3)返回值:执行 INCR 命令之后 key 的值。
(4)示例

redis> SET PageViewNum 20
OKredis> INCR PageViewNum
(integer) 21redis> GET PageViewNum # 数字值在 Redis 中以字符串的形式保存
"21"

二、INCR在Java中的实战运用

private static final long BEGIN_TIMESTAMP = 1701360000; // 开始时间戳:1701360000 -> 2023-12-01 12:00:00private static final int COUNT_BITS = 32;@Overridepublic <T> T redisIncrTest() {HashMap<String, Object> responseObj = new HashMap<>();responseObj.put("code", 200);responseObj.put("success", true);LocalDateTime now = LocalDateTime.now();long currentTimestamp = now.toEpochSecond(ZoneOffset.UTC); // 当前时间戳:1702882165System.out.println("redisIncrTest :: currentTimestamp -> " + currentTimestamp);long dValue = currentTimestamp - BEGIN_TIMESTAMP; // 增长的差值:1551885System.out.println("redisIncrTest :: dValue -> " + dValue);String date = now.format(DateTimeFormatter.ofPattern("yyyyMMdd")); // 年月日:20231218System.out.println("redisIncrTest :: date -> " + date);String REDIS_ICR_KEY = "REDIS-INCR" + ":" + date; // REDIS-INCR:20231218long count = stringRedisTemplate.opsForValue().increment(REDIS_ICR_KEY); // INCR REDIS-INCR:20231218System.out.println("redisIncrTest :: count -> " + count); // 1String countStr = stringRedisTemplate.opsForValue().get(REDIS_ICR_KEY);System.out.println("redisIncrTest :: countStr -> " + countStr); // 1// 说明:// (1)|:或,当两个位都为0时,结果才为0,两边都会计算// (2)<<:左移,各二进位左移若干位,高位丢弃,低位补零// (3)左移一位相当于乘以2,左移32位相当于将某个数乘以2的32次方long rs = dValue << COUNT_BITS | count;System.out.println(rs);System.out.println(dValue << 32);responseObj.put("data", rs);return (T) responseObj;}

三、基于INCR实现的分布式锁思路

INCR命令还可以用于实现分布式锁。我们可以将某个键的值初始化为0,每次获取锁时使用INCR命令将值加1,释放锁时使用DECR命令将值减1。如果值为1,表示锁已被获取,否则表示锁已被释放。

这篇关于Redis之INCR命令,通常用于统计网站访问量,文章访问量,分布式锁的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/511616

相关文章

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Redis中的AOF原理及分析

《Redis中的AOF原理及分析》Redis的AOF通过记录所有写操作命令实现持久化,支持always/everysec/no三种同步策略,重写机制优化文件体积,与RDB结合可平衡数据安全与恢复效率... 目录开篇:从日记本到AOF一、AOF的基本执行流程1. 命令执行与记录2. AOF重写机制二、AOF的

Java 线程池+分布式实现代码

《Java线程池+分布式实现代码》在Java开发中,池通过预先创建并管理一定数量的资源,避免频繁创建和销毁资源带来的性能开销,从而提高系统效率,:本文主要介绍Java线程池+分布式实现代码,需要... 目录1. 线程池1.1 自定义线程池实现1.1.1 线程池核心1.1.2 代码示例1.2 总结流程2. J