- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我使用lua脚本:
local lock = redis.call('get', KEYS[1])
if not lock then
return redis.call('SETEX', KEYS[1], ARGV[1] ,ARGV[2] );
end
return false
我使用脚本从 spring boot 应用程序调用 redis
DefaultRedisScript<Boolean> redisScript = new
DefaultRedisScript<Boolean>();
redisScript.setScriptSource(new ResourceScriptSource(new ClassPathResource("checkandset2.lua")));
redisScript.setResultType(Boolean.class);
System.out.println(redisTemplate.execute(redisScript , Collections.singletonList("value123"),"10" ,"key123"));
我总是遇到异常:
java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.String
at org.springframework.data.redis.serializer.StringRedisSerializer.serialize(StringRedisSerializer.java:32)
at org.springframework.data.redis.core.script.DefaultScriptExecutor.keysAndArgs(DefaultScriptExecutor.java:116)
at org.springframework.data.redis.core.script.DefaultScriptExecutor$1.doInRedis(DefaultScriptExecutor.java:63)
at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:202)
at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:164)
at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:152)
at org.springframework.data.redis.core.script.DefaultScriptExecutor.execute(DefaultScriptExecutor.java:60)
at org.springframework.data.redis.core.script.DefaultScriptExecutor.execute(DefaultScriptExecutor.java:54)
at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:298)
at com.masary.ledger.ResisScriptTestClass.msisdnJustRechargedException(ResisScriptTestClass.java:34)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
当我使用
System.out.println(redisTemplate.execute(redisScript , Collections.singletonList("value123"),new Long(10) ,"key123"));
我得到异常
org.springframework.data.redis.RedisSystemException: Unknown redis exception; nested exception is java.lang.ClassCastException: [B cannot be cast to java.lang.Long
at org.springframework.data.redis.FallbackExceptionTranslationStrategy.getFallback(FallbackExceptionTranslationStrategy.java:48)
at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38)
at org.springframework.data.redis.connection.jedis.JedisConnection.convertJedisAccessException(JedisConnection.java:212)
at org.springframework.data.redis.connection.jedis.JedisConnection.evalSha(JedisConnection.java:3173)
at org.springframework.data.redis.connection.jedis.JedisConnection.evalSha(JedisConnection.java:3158)
at org.springframework.data.redis.connection.DefaultStringRedisConnection.evalSha(DefaultStringRedisConnection.java:1374)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.data.redis.core.CloseSuppressingInvocationHandler.invoke(CloseSuppressingInvocationHandler.java:57)
at com.sun.proxy.$Proxy182.evalSha(Unknown Source)
at org.springframework.data.redis.core.script.DefaultScriptExecutor.eval(DefaultScriptExecutor.java:81)
at org.springframework.data.redis.core.script.DefaultScriptExecutor$1.doInRedis(DefaultScriptExecutor.java:71)
at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:202)
at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:164)
at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:152)
at org.springframework.data.redis.core.script.DefaultScriptExecutor.execute(DefaultScriptExecutor.java:60)
at org.springframework.data.redis.core.script.DefaultScriptExecutor.execute(DefaultScriptExecutor.java:54)
at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:298)
at com.masary.ledger.ResisScriptTestClass.msisdnJustRechargedException(ResisScriptTestClass.java:34)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
.
.
Caused by: java.lang.ClassCastException: [B cannot be cast to java.lang.Long
at org.springframework.data.redis.connection.jedis.JedisScriptReturnConverter.convert(JedisScriptReturnConverter.java:53)
at org.springframework.data.redis.connection.jedis.JedisConnection.evalSha(JedisConnection.java:3171)
... 46 more
有什么建议可以将到期时间值传递给 lua 脚本吗?
最佳答案
我自己是新手,也遇到过类似的问题。尝试发送字符串 "10"
,而不是 Long
。为我工作。
关于spring-boot - spring redis运行脚本: how to pass expiry time value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40527024/
我正在 LAMP 堆栈上使用 MySQL 数据库。我有一个表,其中有一些简单的条目。这些条目应该在十分钟不使用后自动删除。 “正在使用”被定义为插入、更新或只是通过 SELECT 请求(显然删除并不重
我使用的是 Caffeine v2.8.5,我想创建一个基于以下内容的可变到期缓存: 值(value)的创造/更新 最后一次访问(读取)此值。 无论先发生什么都应该触发该条目的删除。 缓存将成为三层值
我使用的是 Caffeine v2.8.5,我想创建一个基于以下内容的可变到期缓存: 值(value)的创造/更新 最后一次访问(读取)此值。 无论先发生什么都应该触发该条目的删除。 缓存将成为三层值
我刚刚从 Rails 3.2 切换到 Rails 4。我正在努力确保我尽可能了解安全问题,并且我现在担心 session 。看起来 Rails 4 已经不再支持除基于 cookie 的 session
因此,在 Parse 中,我上传了一个数组,其中填充了用户提交的值。 是否可以为用户提交的单个值设置到期时间(最好是一小时)。 本质上,一旦提交了值,就会启动一个“计时器”(由于缺乏更好的术语),并在
我有传入的数据,我必须聚合一段时间,并在 key 过期时处理数据。 我尝试过使用 redis 键空间通知,但它只提供了键。 有没有更好的方法来处理这种情况? 最佳答案 不是设置到期日,而是将数据聚合到
我正在开发一个相机应用程序,它会自动对拍摄的每张照片进行地理标记。使用 LocationManager.requestLocationUpdates() //simply to get the
当我从 API 收到 token 已过期的错误时,我希望能够重新颁发新 token 并重复第一次发送的请求,而不会让用户感觉到任何差异。有没有办法优雅地处理这个用例? function relogin
我在 NodeJS,Express 应用程序上,我正在为我的应用程序的某些功能使用 cookie。我需要将 cookie 生命周期设置为一个月。 为此,我将 cookie maxAge 设置为 day
有什么方法可以为 PostgreSQL 中的数据条目设置某种“过期”时间吗? ?我正在考虑等同于 EXPIRE in Redis 的东西. 我不想存储时间戳,然后手动编码某种 cron检查哪些条目已过
我是 Spring 框架的初学者。 在我的情况下, session 可以通过以下方式过期 --> 成功登出(显式登出) --> session 超时(隐式注销) 每当某些用户登录时,我都会在数据库中执
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我有一个用户登录。我如何延长/更新从请求中收到的 session 的到期日期?提前致谢! 最佳答案 没有必要为此制作自定义中间件。 设置 SESSION_SAVE_EVERY_REQUEST = Tr
我使用lua脚本: local lock = redis.call('get', KEYS[1]) if not lock then return redis.call('SETEX',
我正在使用FTP当我在页面速度工具上运行我的网站时,它会显示以下消息“在静态资源的 HTTP header 中设置到期日期或最长期限会指示浏览器从本地磁盘而不是通过网络加载以前下载的资源。”我怎样才能
我使用 Cognito 开发人员身份验证提供程序作为我的移动应用程序的访问控制。问题出在移动应用程序中,一旦用户登录,他/她就不必再次登录。但是使用 AWS cognito, token 只持续大约
我正在开发一个使用 facebook 集成的应用程序。我正在尝试从 facebook 库类接收 access_token 和 expires_in token 。一旦我登录,我就正确地获得了 acce
我正在使用 Google Play Billing Library 5 并且有一个具有不同基本计划的订阅产品。 在处理 PurchasesUpdatedListener 中的购买时或在 queryPu
我目前正在使用 kafka 流来整理窗口内的相关事件。如果所有相关事件都没有在一个窗口内到达,那么在 Kafka 流中是否有一种方法可以让我们获得过期事件的句柄。这将有助于处理/通知下游应用程序所有相
我的问题是,如何编辑脚本以便如果 PASS_MAX_DAYS 等于或小于 14 天,则它等于“漏洞:否”? Output 我的脚本 #!/bin/bash passwordexpiry=`grep "
我是一名优秀的程序员,十分优秀!