Redis常用指令以及在AVA中的使用

文章目录


一、Redis是什么?

Redis 是一个开源(BSD 许可)的内存数据结构存储,用作数据库、缓存、消息代理和流引擎。Redis 提供数据结构,例如 字符串、散列、列表、集合、带范围查询的排序集合、位图、超日志、地理空间索引和流。Redis 内置了复制、Lua 脚本、LRU 驱逐、事务和不同级别的磁盘持久性,并通过Redis Sentinel和Redis Cluster自动分区提供高可用性。Reids官方文档链接

二、Key的常用命令以及JAVA实现

(1)Redis对key操作命令

一、删除一个或多个key

del key1 key2…keyn

二、重命名key

rename oldKey newKey

三、重命名key,如果新的key不存在则修改,存在则不修改

renamenx oldKey newKey
作用: 把key改名为newkey 返回: 发生修改返回1,未发生修改返回0
注: nx–>not exists, 即, newkey不存在时,作改名动作

四、切换redis库

select index(库的序号)
注:redis默认有16个库,index表示要切换到哪一个库

五、查询相应的Key

在redis里,允许模糊查询key 有3个通配符 *, ? ,[]
*: 通配任意多个字符
?: 通配单个字符
[]: 通配括号内的某1个字符

1.比如查询当前库所有的key,则使用 KEYS *
2.查询以x开头的key,则使用KEYS *x
3.查询以x结尾的key,则使用KEYS *[x]
4.查询有两个字符组成的key,则使用KEYS ??

六、随机返回一个Key

RANDOMKEY

七、判断某个Key是否存在

exists key
返回1表示该key存在,返回0表示不存在

八、查询某个key的数据类型

type key
注:返回key存储的值的类型,有string,link,set,order set, hash

九、查询key的生命周期

ttl key
作用: 查询key的生命周期,返回: 秒数。
不过期的key,返回-1,过期或者不存在的key,返回-2

十、设置key的生命周期

expire key 整型值
作用: 设置key的生命周期,以秒为单位
同理:
pexpire key 毫秒数, 设置生命周期
pttl key, 以毫秒返回生命周期

十一、将指定key设置成永久有效

persist key

十二、清空当前库中所有的key(谨慎操作)

flushdb

(2) JAVA实现对Redis的key操作

一、引入Maven依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

二、yaml配置Redis信息

spring:
  redis:
    database: ${
    
    REDIS_DB:1}
    host: 127.0.0.1
    port: ${
    
    REDIS_PORT:6379}
    password: ${
    
    REDIS_PWD:pwd}
    maxIdle: ${
    
    REDIS_MAXIDLE:30}
    minIdle: ${
    
    REDIS_MINIDEL:2}
    timeout: 5000

三、指定Redis序列化方式,redis默认采用JDK序列化方式,这样会导致使用Redis客户端工具查看数据时,显示乱码

/**
 * @Author: Greyfus
 * @Create: 2022-09-12 12:03
 * @Version:
 * @Description:
 */
package com.example.demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig {
    
    

    @Bean
    public RedisTemplate<String,String> redisTemplate (RedisTemplate<String, String> redisTemplate) {
    
    
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setStringSerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}

四、JAVA实现对Redis Key的常用操作


@SpringBootTest
class RedisDemoApplicationTests {
    
    

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    void operationKey() {
    
    
        /**
         * Interface that specified a basic set of Redis operations,
         * implemented by {@link RedisTemplate}. Not often used but a
         * useful option for extensibility and testability (as it can be easily mocked or stubbed).
         */
        RedisOperations redisOperations = redisTemplate.opsForValue().getOperations();

        //删除指定的KEY,如果要批量删除,传入一个集合
        // return true if the key was removed
        Boolean isRemove = redisOperations.delete("test");

        //重命名指定KEY,将Key test重命名为new_test
        redisOperations.rename("test","new_test");

        //重命名指定Key,如果新的Key名不存在,则返回True,存在则返回False
        Boolean isRename = redisOperations.renameIfAbsent("test", "new_test");

        //查询相应的Key,返回结果为一个集合
        Set keys = redisOperations.keys("test");

        //随机返回一个Key
        String randomKey = (String)redisOperations.randomKey();

        //判断指定Key是否存在,存在返回True,不存在返回False
        Boolean isExists = redisOperations.hasKey("test");

        //查询指定KEY剩余存活时间 返回-2则该KEY失效或不存在
        Long expire = redisOperations.getExpire("test");

        //设置KEY的生命周期 返回True表示设置成功
        Boolean expireStatus = redisOperations.expire("test", 5, TimeUnit.SECONDS);
        
        //设置KEY永不过期
        Boolean persistStatus = redisOperations.persist("test");
    }

}

三 .Redis字符串类型的操作以及JAVA实现

(1)Redis对字符串操作命令

一、设置指定字符串KEY有效时间

Set key value [ex 秒数] / [px 毫秒数] [nx]/[xx]
如: set a 1 ex 10 , 表示设置key a的值为1,有效时间为10秒
注: 如果ex,px同时写,以后面的有效期为准
如 set a 1 ex 100 px 9000, 实际有效期是9000毫秒
nx: 表示key不存在时,执行操作
xx: 表示key存在时,执行操作

二、一次性设置多个键值

multi set key1 value1 key2 value2 …
例: mset key1 v1 key2 v2 …

三、一次性获取多个key值

mget key1 key2…

四、修改字符串指定位置的值

setrange key offset value
作用:把字符串的offset偏移字节,改成value
在这里插入图片描述

五、向指定字符串追加内容

append key value
作用: 把value追加到key的原值上
在这里插入图片描述

六、截取字符串部分值

getrange key startIndex endIndex
作用: 是获取字符串中 [start, stop]范围的值
注意: 对于字符串的下标,左数从0开始,右数从-1开始
在这里插入图片描述

七、获取旧值,设置新值

getset a newValue
作用: 获取并返回旧值,设置新值
在这里插入图片描述

八、指定key的值加1,并返回加1后的值

incr key
作用: 指定的key的值加1,并返回加1后的值
1:不存在的key当成0,再incr操作
2: 范围为64有符号

在这里插入图片描述

九、指定key的值加N,并返回加N后的值

incrby key value
作用:向指定的key增加N
在这里插入图片描述

十、指定key的值减1,并返回减1后的值

decr key
作用: 指定的key的减加1,并返回减1后的值
1:不存在的key当成0,再decr操作

2: 范围为64有符号
在这里插入图片描述

十一、指定key的减加N,并返回减N后的值

decrby key
作用:向指定的key增加N
在这里插入图片描述

(2)JAVA实现对Redis字符串操作

    @Test
    void operationString() {
    
    

        ValueOperations valueOperations = redisTemplate.opsForValue();

        //设置指定KEY有效时间
        valueOperations.set("test","testValue",2, TimeUnit.MINUTES);

        //mset,一次性设置多个键值
        HashMap<String, String> keys = new HashMap<>();
        keys.put("a","1");
        keys.put("b","2");
        valueOperations.multiSet(keys);

        //mget,一次性获取多个键的值
        List values = valueOperations.multiGet(Arrays.asList("a", "b"));

        //修改字符串指定位置的值
        RedisConnection connection = redisTemplate.getConnectionFactory().getConnection();
        connection.setRange("test".getBytes(), "Hi boy".getBytes(), 0);

        //向指定KEY的值追加内容
        valueOperations.append("test", "Hi,it's nice weather today.");

        //截取字符串部分值
        byte[] range = connection.getRange("test".getBytes(), 0, 5);

        //获取字符串的值并设置新的值
        String oldValue = (String) valueOperations.getAndSet("test", "Hi boy");

        //指定KEY的值加1并返回加1后的值
        valueOperations.set("number", "1");
        Long increment = valueOperations.increment("number");

        //指定KEY的值减1并返回减1后的值
        Long decrement = valueOperations.decrement("number");
    }

四 .Redis Link链表类型的操作以及JAVA实现

(1)Redis对链表操作命令

一、把值插入到链表头部

lpush key value1 value2 …

二、把值插入到链表尾部

rpush key value1 value2 …

三、返回并删除链表尾元素

rpop key

四、获取链表某个范围的值

lrange key start stop
作用: 返回链表中[start ,stop]中的元素
规律: 左数从0开始,右数从-1开始

例子:获取链表key为link的所有值,lrange link 0 -1

五、删除链表中的某个值

lrem key count value
作用: 从key链表中删除 value值
注: 删除count的绝对值个value后结束
Count>0 从表头删除
Count<0 从表尾删除
例如删除链表link里的一个a,lrem link 1 a

六、剪切链表,并把剪切后的值重新赋给key

ltrim key start stop
作用: 剪切key对应的链接,切[start,stop]一段,并把该段重新赋给key

在这里插入图片描述

七、获取链表某个位置下的值

lindex key index
作用: 返回index索引上的值
例如查看2在链表link中的位置:lindex link 2

在这里插入图片描述

八、查看链表长度

llen key

九、在某个值后或前插入数据

linsert key before | after pivot element
作用: 在key链表中寻找’pivot ’,并在pivot值之前|之后,.插入value 注: 一旦找到一个search后,命令就结束了,因此不会插入多个value
在这里插入图片描述

十、rpoplpush

rpoplpush source dest
作用: 把source的尾部拿出,放在dest的头部, 并返回 该单元值

在这里插入图片描述

十一、等待弹出链表头/尾元素

brpop ,blpop key timeout
作用:等待弹出key的尾/头元素, Timeout为等待超时时间
如果timeout为0,则一直等待

(2)JAVA实现对Redis 链表操作

    @Test
    void operationLink() {
    
    

        ListOperations listOperations = redisTemplate.opsForList();
        //把值插入到链表头部
        listOperations.leftPush("link","1");
        //把值插入到链表尾部
        listOperations.rightPush("link","2");
        //返回并删除链表尾元素
        String lastValue = (String)listOperations.rightPop("link");
        //获取链表某个范围的值
        List<String> link = listOperations.range("link", 0, -1);
        //删除链表中的某个值
        Long  remove= listOperations.remove("link", 1, "1");
        //剪切链表,并把剪切后的值重新赋给key
        listOperations.trim("link",0,1);
        //获取链表某个位置下的值
        String value = (String) listOperations.index("link", 0);
        //查看链表长度
        Long size = listOperations.size("link");
        //在某个值后或前插入数据
        redisTemplate.getConnectionFactory().getConnection().lInsert("link".getBytes(), RedisListCommands.Position.AFTER,"1".getBytes(),"2".getBytes());
        //RPOPLPUSH
        listOperations.rightPopAndLeftPush("link","desc");
        //等待弹出链表头/尾元素
        listOperations.rightPop("link",1,TimeUnit.MINUTES);

    }

四 .Redis Set集合类型的操作以及JAVA实现

(1)Redis对Set操作命令

Set集合特性:唯一性、无序性、确定性

一、往Set集合中增加元素

sadd key value1 value2

二、删除Set集合中某个元素

srem key value1 value2
返回值: 忽略不存在的元素后,真正删除掉的元素的个数
在这里插入图片描述

三、返回并删除Set集合中key中1个随机元素

spop key
作用: 返回并删除集合中key中1个随机元素,可以用于抽奖功能

四、随机返回Set集合中某个key中的n个元素

srandmember key count
作用: 作用: 返回集合key中,随机的1个元素
在这里插入图片描述

五、判断Set集合中某个key是否存在某个元素

sismember key value
返回值:1表示存在,0表示不存在
在这里插入图片描述

六、返回Set集合中某个Key所有的元素

smembers key
作用:返回Set集合中某个key的所有元素
在这里插入图片描述

七、返回Set集合中某个Key的元素个数

scard key
在这里插入图片描述

八、Set集合求Key之间的交集(共同部分)

sinter key1 key2 key3
返回值为交集部分
在这里插入图片描述

九、Set集合求Key之间的并集

sunion key1 key2 key…
在这里插入图片描述

十、Set集合求Key之间的差集

sdiff key1 key2 key…
在这里插入图片描述

(2)JAVA实现对Redis Set集合操作

    @Test
    void operationSet() {
    
    
        SetOperations setOperations = redisTemplate.opsForSet();
        //往集合key中增加元素
        setOperations.add("setKey","test");
        // 删除集合中key的某个值
        setOperations.remove("setKey","test");
        // 返回并删除集合中key中的一个或N个随机元素
        List popKeys = setOperations.pop("setKey", 2);
        //返回集合key中一个或N个随机元素
        List randomMembers = setOperations.randomMembers("setKey", 2);
        //判断否个值是存在集合Key中
        Boolean isMemberValue = setOperations.isMember("setKey", "1");
        // 查看集合key中所有的元素
        Set setValues = setOperations.members("setKey");
        // 返回集合中元素个数
        Long setSize = setOperations.size("setKey");
        //将source中的某个value删除并添加到dest集合中
        Boolean moveSuccess = setOperations.move("setKey","1", "destKey");
        //求Set集合并集
        Set union = setOperations.union("setKey", "destKey");
        //求Set集合差集
        Set difference = setOperations.union("setKey", "destKey");
    }

五.Redis 哈希类型的操作以及JAVA实现

(1)Redis对哈希类型操作命令

一、往哈希中增加元素

hset key field value
作用: 把key中 filed域的值设为value,如果没有field域,直接添加,如果有,则覆盖原field域的值
在这里插入图片描述

二、往哈希中某个key增加多个field以及value

hmset key field1 value1 field2 value2 field3 value3
作用: 设置field1->N 个域, 对应的值是value1->N
在这里插入图片描述

三、返回key中field域的值

hget key field
在这里插入图片描述

四、返回key中field1 field2 fieldN域的值

hmget key field1 field2 field3
在这里插入图片描述

五、获取某个key中的所有field和value

hgetall key
在这里插入图片描述

六、删除key中 field域

hdel key field
返回值为删除个数
在这里插入图片描述

七、判断key中有没有field域

hexists key field
返回值1表示存,0表示不存在
在这里插入图片描述

八、获取某个key中所有的field

hkeys key
在这里插入图片描述

九、返回某个key中所有的value

hvals key
在这里插入图片描述

十、返回某个key中field的个数

hlen key

(2)JAVA实现对哈希操作

 @Test
    void operationHash() {
    
    
        HashOperations hashOperations = redisTemplate.opsForHash();
        //往hashKey中增加filed名为张三,value为90
        hashOperations.put("hashKey","张三","90");
        //往hashKey中批量设置field和value
        HashMap<String, String> map = new HashMap<>();
        map.put("lili","99");
        map.put("nini","100");
        hashOperations.putAll("hashKey",map);
        //获取key中某个field的值
        String value = (String)hashOperations.get("hashKey", "lili");
        //获取某个key中多个field的值
        List values = hashOperations.multiGet("hashKey", new HashSet(Arrays.asList("lili", "nini")));
       //获取某个key中的所有field
        Set fields = hashOperations.keys("hashKey");
        //删除key中某个field
        Long deleteCount = hashOperations.delete("hashKey", "lili");
        //判断key是否存在某个field
        Boolean hasKey = hashOperations.hasKey("hashKey", "nini");
        // 获取某个key中的所有values
        List allValue = hashOperations.values("hashKey");
    }

总结

以上是Redis常用操作,更多关于Redis的信息可以访问连接redis中文网进行连接。如果发现文章有误的地方,请留言提示,我将实时进行修正。

猜你喜欢

转载自blog.csdn.net/qq_43600166/article/details/126819596