Redis 入门

Redis 入门

1.0启动redis服务端

我们这里使用windows环境,首先在这里 下载对于windows的redis文件

下载后解压,在对应目录运行

 ./redis-server.exe redis.windows.conf

即可运行启动redis服务端,并且读取我们的配置文件

如果我们的redis客户端需要远程连接redis服务端,可以这样:

 ./redis-cli.exe -h 127.0.0.1 -p 6379

加上ip和端口 此处我只在本地演示,所以使用本机ip 注意,config文件中默认开启了只运行本地连接,如果需要

远程连接需要关闭

如果为了安全起见需要使用密码,也需要在配置文件中设置,在连接时添加-a参数

1.1 数据类型

redis数据类型分为字符串,哈希,列表,集合,有序集合

1.2 常用命令

1.2.1 字符串

存值:

set key value

取值

get key

注意,命令不区分大小写,但键区分

setex key time value

该命令可以设置键值对的过期时间,单位是秒

setnx key value

此时会查看是否有该key ,没有该Key时才会创建该键值对,如果有就不会创建

incrby key 数字

可以为键对应的值加上我们所写的数字,这里需要注意,在redis中没有数字这类型,所有的数字都是字符串类

型,不过又增加了数字操作让我们可以对字符串类型的数字进行操作,比如当前的加n,同样还有减n

decr key 数字

1.2.2 哈希

 hset key 字段 值

设置对应键的哈希

hget key 字段

获得指定键的对应字段的值

hdel key 字段

删除对应键的指定字段

hkeys key

获得对应键的所有字段

hvals key 

获得指定键内部的所有值

hgetall key

获取对应key 的所有字段和值

1.2.3 列表

lpush key value1 value2 ....

往列表中从左边开始插入值

既然有左那就有右

rpush key value1 value2 ...
lrange key start end

获得对应范围的值

需要注意的是,左插的情况下越后插入的位置越靠前,举个例子,一开始插入1 现在lpush 2,3,4

最后变成 4,3,2,1 此时我们lrange 0-3 则会按这个顺序返回

如果我们不知道具体的小标,可以这么写

lrange key 0 -1

目前是从0取到倒数第一个,同理可以用-2 -3等

lposh key 

将当前list 左移一格,也就是去掉最左边的

上面的这些都是有左也有右的

llen key

获得元素个数,这个只有L没有r

1.2.4 集合

image-20251014205400075

1.2.4 有序集合

image-20251014205903035

需要注意的是,有序集合内部是有序的,按分数从小到大排序

1.2.5 通用命令

image-20251014211326050

1.3 java使用redis准备

java中使用redis依赖于SpringDataRedis

导入配置后其实就可以直接使用了

  redis:
    database: 0
    host: localhost
    port: 6379

但此时的key名显示的有些问题,我们就需要自己去配置redis模板

新建一个配置类,然后

package com.sky.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
@Slf4j
public class RedisConfiguration {
    @Bean
    public RedisTemplate redisTemplate (RedisConnectionFactory factory){
        log.info("RedisConfiguration.redisTemplate");
        RedisTemplate redisTemplate=new RedisTemplate<>();
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setConnectionFactory(factory);
        return redisTemplate;

    }
}

1.4 java中使用redis

String 操作

package com.sky;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;

import java.util.concurrent.TimeUnit;

public class RedisTest extends SkyApplicationTest{
    @Autowired
    private RedisTemplate redisTemplate ;
    @Test
    public void redisTest(){
        ValueOperations valueOperations = redisTemplate.opsForValue();
        valueOperations.set("code","123456",10, TimeUnit.SECONDS);
        Object code = valueOperations.get("code");
        System.out.println(code);
    }
}

hash操作

    @Test
    public void hashTest(){
        HashOperations hashOperations = redisTemplate.opsForHash();
        hashOperations.put("user","name","zhangsan");
        hashOperations.put("user","age","18");
        //使用putAll方法可以一次一个Map 放入多个键值对
        //下面是获取单个值
        System.out.println(hashOperations.get("user","name"));
        //获取所有键
        System.out.println(hashOperations.keys("user"));
        //获取所有值
        System.out.println(hashOperations.values("user"));
        //获取所有键值对
        System.out.println(hashOperations.entries("user"));
    }

zset操作

    @Test
    public void zsetTest(){
        ZSetOperations zsetOperations = redisTemplate.opsForZSet();
        zsetOperations.add("myZset","zhangsan",10);
        zsetOperations.add("myZset","lisi",20);
        zsetOperations.add("myZset","wangwu",15);
        //获取所有元素,按照分数从小到大排序
        Set set1=zsetOperations.range("myZset",0,-1);
        System.out.println(set1);
        //带分数,返回的类型是值为DefaultTypedTuple的集合
        Set<DefaultTypedTuple> set2=zsetOperations.rangeWithScores("myZset",0,-1);
        for (DefaultTypedTuple tuple: set2) {
            System.out.println(tuple.getValue()+":"+tuple.getScore());
        }
        
    }

set操作

    @Test
    public void setTest(){
        SetOperations setOperations = redisTemplate.opsForSet();
            setOperations.add("mySet","java","php","c++","python");
            //获取所有元素
            Set set = setOperations.members("mySet");
            System.out.println(set);
            setOperations.add("mySet1","java","html","css");
            //求交集
            Set interSet = setOperations.intersect("mySet", "mySet1");
            System.out.println("交集:"+interSet);
            //求并集
            Set unionSet = setOperations.union("mySet", "mySet1");
            System.out.println("并集:"+unionSet);
    }

list操作

    @Test
    public void listTest(){
        ListOperations listOperations = redisTemplate.opsForList();
        //从左边放入
        listOperations.leftPush("myList","a");
        listOperations.leftPush("myList","b");
        listOperations.leftPush("myList","c");
        //从右边放入
        listOperations.rightPush("myList","1");
        listOperations.rightPush("myList","2");
        listOperations.rightPush("myList","3");
        //获取所有元素
        System.out.println(listOperations.range("myList",0,-1));
        //弹出最左边的元素
        System.out.println(listOperations.leftPop("myList"));
        //弹出最右边的元素
        System.out.println(listOperations.rightPop("myList"));
        System.out.println(listOperations.range("myList",0,-1));
    }
posted @ 2025-10-15 15:06  折翼的小鸟先生  阅读(3)  评论(0)    收藏  举报