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 集合

1.2.4 有序集合

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

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));
    }

                
            
浙公网安备 33010602011771号