Redis常用操作(持续补充)_笑小枫的博客-程序员秘密

技术标签: java  JAVA-与你白头偕老  缓存  redis  

设置密码

# 设置密码
CONFIG set requirepass "123456"
# 查询密码
CONFIG get requirepass
# 密码登录
AUTH password
auth 123456
# 访问其他服务上redis。需要在本地装redis客户端
redis-cli -h ip地址 -p 6379

Redis常用的操作

  • hash的操作
> hset hash-key sub-key1 value1
(integer) 1

> hset hash-key sub-key2 value2
(integer) 1

> hset hash-key sub-key1 value1
(integer) 0

> hgetall hash-key
1) "sub-key1"
2) "value1"
3) "sub-key2"
4) "value2"

> hdel hash-key sub-key2
(integer) 1

> hdel hash-key sub-key2
(integer) 0

> hget hash-key sub-key1
"value1"

> hgetall hash-key
1) "sub-key1"
2) "value1"

windows 下设置开机自启动

redis-server --service-install redis.windows-service.conf --loglevel verbose

过期时间操作

  • 设置过期时间(单位:秒)
expire key seconds
  • 设置过期时间(时间戳)
expireat key unixTime
  • 设置过期时间(单位:豪秒)
pexpire key milliseconds
  • 返回剩余过期时间(单位:秒)
TTL key
  • 返回剩余过期时间(单位:豪秒)
PTTL key
  • 移除过期时间的设置
persist key

设置ID递增递减

  • key的value每次递增1
incr key
  • key的value每次递增指定数
incrby key num
  • key的value每次减1
encr key
  • key的value每次递减指定数
encrby key num

Redis使用ip地址访问

  1. (必须)修改redis服务器的配置文件redis.windows.conf

注释绑定的主机地址

# bind 127.0.0.1
  1. 修改redis的守护进程为no,不启用
daemonize "no"
  1. (必须)修改redis的保护模式为no,不启用
protected-mode"no"
  1. 在Redis根目录下,以管理员身份打开CMD命令窗口
    输入redis-server redis.windows.conf,启动服务

  2. 在Redis根目录下尝试远程连接并查看
    redis-cli -h ip地址 -p 6379 能够连接
    info 能够输出信息

java使用redis递增

如果key在redis中不存在,则会自动初始化生成key,并返回0。

public Long getIncr(String key){
    RedisAtomicLong redisAtomicLong = new RedisAtomicLong(key, redisTemplate.getConnectionFactory());
    return redisAtomicLong.getAndIncrement();
}

Redis分布式锁

class Redis{
    
   /**
     * setNX
     * @param lockKey  锁
     * @param value   请求标识
     * @param exptime 过期时间
     * @return 是否获取到锁
     */
    public boolean tryGetDistributedRedisLock( String lockKey, Serializable value, final long exptime) {
    
        return (Boolean) redisTemplate.execute(new RedisCallback<Boolean>() {
    
            @Override
            public Boolean doInRedis(RedisConnection connection) {
    
                RedisSerializer valueSerializer = redisTemplate.getValueSerializer();
                RedisSerializer keySerializer = redisTemplate.getKeySerializer();
                Object obj = connection.execute("set", keySerializer.serialize(lockKey),
                        valueSerializer.serialize(value),
                        SafeEncoder.encode("NX"),
                        SafeEncoder.encode("EX"),
                        Protocol.toByteArray(exptime));
                return obj != null;
            }
        });
    }

    /**
     * 释放锁
     */
    private  final Long RELEASE_SUCCESS = 1L;

    /**
     * 释放分布式锁
     * @param lockKey 锁
     * @param requestId 请求标识
     * @return 是否释放成功
     */
    public  boolean releaseDistributedRedisLock(String lockKey, String requestId) {
    
        String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";
        Object result = redisTemplate.execute(new DefaultRedisScript(script,Long.class), Collections.singletonList(lockKey), requestId);
        return RELEASE_SUCCESS.equals(result);
    }
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_34988304/article/details/110196668

智能推荐

冒泡排序,选择排序,插入排序,随机生成100个数并保存到数组中_随机生成含有100个数的数组,分别用选择排序、冒泡排序和插入排序对其排序,并统计_叶卡捷琳堡的博客-程序员秘密

1.随机生成范围在1-100的数,并保存到数组中#include&lt;iostream&gt;#include&lt;ctime&gt;using namespace std;int main() { //time()用系统时间初始化种。为rand()生成不同的随机种子。 srand((unsigned)time(NULL)); int* array = new int[10]; for (int index = 0; index &lt; 10; index++) { //范围

【论文笔记】基于多分类器和对抗语料判别器的多语料库语音情感识别_你的宣妹的博客-程序员秘密

Reconciliation of Multiple Corpora for Speech Emotion Recognition by Multiple Classifiers with an Adversarial Corpus DiscriminatorINTERSPEECH 2020 - Fairy Devices, Japan 关键词: 语音情感、多任务学习、对抗学习、多语料库摘要概述: 利用多任务学习和对抗学习压缩语料库特有因素以更好利用语料库,本篇文章研究的是训练数据的生成问题情感

Smarty模板引擎技术(一)_weixin_30797199的博客-程序员秘密

一、Smarty模板引擎简介什么是smarty?   Smarty是采用php写的一个模版引擎,设计的目的是要将php代码与html代码分离,使php程序员只专注于php代码的编写,网页美工只专注于网页的美化 没有模版引擎时出现的问题?   html中php代码比重越来越大   页面的数量越来越多   程序设计与美工设计分工不明确 传统的php文件:   1. php代码跟...

js面试准备(自留,持续更新)_yooo*的博客-程序员秘密

1. 数据类型有哪些6+16种简单数据类型(原始类型):undefined、null、boolean、number、string、symbol。其中symbol是es6新增的。1种复杂数据类型:Object对象1)typeof操作符需要注意的是typeof是一个操作符而不是函数,因此不需要参数。调用typeof null时返回的是“object”,这是因为特殊值null被认为是一个对空对象的引用。严格来讲函数在js里被认为是对象,而不是数据类型,但函数有自己的特性,因此需要通过typeof来区

DirectDraw 与 DirectInput 的游戏编程体验-_zypsg的博客-程序员秘密

代码下载(3个工程) (编辑者:链接失效)  我想关于这个主题的文章,不算少,但也不算太多。但大多是分别介绍 DirectDraw 与 DirectInput,而并没有将其结合起来,也许你会问:“分开与合并起来并没有本质区别啊!”。其实的确没有本质区别,但那样使那些最初对游戏编程报有极大热情的爱好者感到非常失望,因为这其中的一个并不能完全满足他们的要求,并且使其感到巨大的阻力,从而失去信心。所以本

随便推点

Oracle 游标的where current of子句_oracle current of_ETIpiero的博客-程序员秘密

游标中的更新和删除   在PL/SQL中依然可以使用UPDATE和DELETE语句更新或删除数据行。显式游标只有在需要获得多行数据的情况下使用。PL/SQL提供了仅仅使用游标就可以执行删除或更新记录的方法。  UPDATE或DELETE语句中的WHERE CURRENT OF子串专门处理要执行UPDATE或DELETE操作的表中取出的最近的数据。要使用这个方法,在声明游标时必须使用FOR

程序员必会:CDN加速原理_程序员黑叔的博客-程序员秘密

点击上方“程序员黑叔”,选择“置顶或者星标”你的关注意义重大!作者:Kandyhttps://www.jianshu.com/p/1dae6e1680ff一、什么是 CDNCDN的全称...

System Verilog视频学习笔记(11)- Functional converage_纸上谈芯的博客-程序员秘密

Functional converage(功能覆盖率)内容来自启芯-System Verilog视频============================================================== 目录结构:1、验证流程2、计算功能覆盖率3、功能覆盖率建模4、总结 =====================================

SSD作缓存方案之LVM cache_aodiantuan2808的博客-程序员秘密

SSD作缓存方案之LVM cache1. 前言最近因为工作的需要,接触了一些SSD作缓存相关的知识。所谓SSD作缓存就是使用fast device(例如SSD),给slow device(例如机械硬盘)做缓存,以提高计算机整体的I/O存储性能。目前在个人计算机中,使用的比较多的是机械硬盘和固态硬盘(SSD)。机械硬盘具有容量大,价格便宜,容错性好,寿命较长等优点;缺点是读写性能相对...

【论文翻译】VIBE 基于视频的人体3D形状和姿态估计_pa-mpjpe_屿十_的博客-程序员秘密

人体运动是理解行为的基础。 尽管在单幅图像的三维姿态和形状估计方面取得了进展,但现有的基于视频的方法由于缺乏用于训练的地面真实三维运动数据而无法产生准确和自然的运动序列。 为了解决这个问题,我们提出了“用于身体姿势和形状估计的视频推理”(VIBE),它利用了现有的大规模运动捕获数据集(AMASS)和未配对的、野外的2D关键点注释。 我们的主要创新是一个对抗性的学习框架,它利用聚集来区分真实的人体动作和由我们的时间姿势和形状回归网络产生的动作。 我们定义了一种新的具有自我注意机制的时态网络体系结构