Redis

一、

1.1.1 redis连接

D:\Redis>redis-server.exe redis.windows.conf
//服务端启动


redis-cli.exe
//连接客户端

设置Redis服务密码,修改redis.windows.conf,找到 # requirepass foobared
requirepass 123456

 

 1.2.1 数据类型 

1.3.1 redis常用命令

1.3.1 字符串命令: SET key value 设置指定key的值   GET key 获取指定key的值

SELEX key seconds value 设置指定key的值,并将key的过期时间设为seconds秒

 SETNX key value  只有在key不存在时设置key的值

1.3.2 哈希操作命令

HSET key field value  将哈希表 key 中的字段 field 的值设为 value

HGET key field     获取存储在哈希表中指定字段的值

HDEL key field     删除存储在哈希表中的指定字段

HKEYS key   获取哈希表中所有字段

HVALS key     获取哈希表中所有值

1.3.3 列表操作命令

LPUSH key value1 [value2]      将一个或多个值插入到列表头部(左边)

LRANGE key start stop          获取列表指定范围内的元素

RPOP key                 移除并获取列表最后一个元素(右边)

LLEN key           获取列表长度

1.3.4    集合操作命令 

 Redis set string类型的无序集合。集合成员是唯一的,集合中不能出现重复的数据。

SADD key member1 [member2]   向集合添加一个或多个成员

SMEMBERS key   返回集合中的所有成员

SCARD key   获取集合的成员数

SINTER key1 [key2]   返回给定所有集合的交集

SUNION key1 [key2]   返回所有给定集合的并集

SREM key member1 [member2]   删除集合中一个或多个成员

1.3.5   有序集合操作命令

Redis有序集合是string类型元素的集合,且不允许有重复成员。每个元素都会关联一个double类型的分数。常用命令:

ZADD key score1 member1 [score2 member2]   向有序集合添加一个或多个成员

ZRANGE key start stop [WITHSCORES]   通过索引区间返回有序集合中指定区间内的成员

ZINCRBY key increment member   有序集合中对指定成员的分数加上增量 increment

ZREM key member [member ...]   移除有序集合中的一个或多个成员

1.3.6 通用命令

Redis的通用命令是不分数据类型的,都可以使用的命令:

KEYS pattern   查找所有符合给定模式( pattern)key

EXISTS key   检查给定 key 是否存在

TYPE key   返回 key 所储存的值的类型

DEL key   该命令用于在 key 存在是删除 key

二、

2.1 Redis的Java客户端

Jedis(官方推荐),Lettuce,Spring Data Redis

      Spring Data Redis 是 Spring 的一部分,对 Redis 底层开发包进行了高度封装。

在 Spring 项目中,可以使用Spring Data Redis来简化操作。

2.1.1 Spring Data Redis使用方式

操作步骤:

导入 Spring Data Redis maven 坐标
配置 Redis 数据源
编写配置类,创建 RedisTemplate 对象
通过 RedisTemplate 对象操作 Redis
<dependency>    
<groupId>org.springframework.boot</groupId>  
 <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>


//pom.xml

spring: 
    redis:
    host: localhost
    port: 6379
    password: 123456


//application.yml

       配置项一般不直接放在application.yml里面。而是通过引用来配置,具体做法:

           创建application-dev.yml 把上面内容放入此yml中,在application.yml里引用

例如:

redis:

host: ${sky.redis.host}

        当前配置类不是必须的,因为 Spring Boot 框架会自动装配 RedisTemplate 对象,但是默认的key序列化器为JdkSerializationRedisSerializer,导致我们存到Redis中后的数据和原始数据有差别,故设置为StringRedisSerializer序列化器。

      redisTemplate 方法创建并配置一个 RedisTemplate 对象,用于与Redis进行交互。
redisTemplate.setKeySerializer(new StringRedisSerializer()); 设置了Redis的键序列化器,将默认的序列化器替换为 StringRedisSerializer,这使得Redis中的键以字符串形式存储。
redisTemplate.setConnectionFactory(redisConnectionFactory); 将Redis的连接工厂注入到 RedisTemplate 中,连接工厂用于建立与Redis服务器的连接。
最后,返回配置好的 RedisTemplate 实例。

@Configuration
@Slf4j
public class RedisConfiguration {
    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory)
{        
        log.info("开始创建redis模板类...");
       
        RedisTemplate redisTemplate = new RedisTemplate();

       // 设置Key的序列化器,默认为JdkSerializationRedisSerializer  
                              
        redisTemplate.setKeySerializer(new StringRedisSerializer());         
         redisTemplate.setConnectionFactory(redisConnectionFactory); 
         return redisTemplate;
    }
}


2.1.2   RedisTemplate 对象的使用

RedisTemplate 针对大量api进行了归类封装,将同一数据类型操作封装为对应的Operation接口,具体分类如下:

ValueOperations: s tring数据操作
SetOperations:set类型数据操作
ZSetOperations:zset类型数据操作
HashOperations:hash类型的数据操作
ListOperations:list类型的数据操作

2.2.1 测试案例(通过RedisTemplate对象操作Redis)

在test下新建测试类com.sky.test

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.*;

@SpringBootTest
public class SpringDataRedisTest {
    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void testRedisTemplate(){
        System.out.println(redisTemplate);
        //string数据操作
        ValueOperations valueOperations = redisTemplate.opsForValue();
        //hash类型的数据操作
        HashOperations hashOperations = redisTemplate.opsForHash();
        //list类型的数据操作
        ListOperations listOperations = redisTemplate.opsForList();
        //set类型数据操作
        SetOperations setOperations = redisTemplate.opsForSet();
        //zset类型数据操作
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
    }
}

 2.2.2 不同数据类型的操作写法

/**
     * 操作字符串类型的数据
     */
    @Test
    public void testString(){
        // set get setex setnx
        redisTemplate.opsForValue().set("name","小明");
        String city = (String) redisTemplate.opsForValue().get("name");
        System.out.println(city);
        redisTemplate.opsForValue().set("code","1234",3, TimeUnit.MINUTES);
        redisTemplate.opsForValue().setIfAbsent("lock","1");
        redisTemplate.opsForValue().setIfAbsent("lock","2");
    }
/**
     * 操作哈希类型的数据
     */
    @Test
    public void testHash(){
        //hset hget hdel hkeys hvals
        HashOperations hashOperations = redisTemplate.opsForHash();

        hashOperations.put("100","name","tom");
        hashOperations.put("100","age","20");

        String name = (String) hashOperations.get("100", "name");
        System.out.println(name);

        Set keys = hashOperations.keys("100");
        System.out.println(keys);

        List values = hashOperations.values("100");
        System.out.println(values);

        hashOperations.delete("100","age");
    }
/**
     * 操作列表类型的数据
     */
    @Test
    public void testList(){
        //lpush lrange rpop llen
        ListOperations listOperations = redisTemplate.opsForList();

        listOperations.leftPushAll("mylist","a","b","c");
        listOperations.leftPush("mylist","d");

        List mylist = listOperations.range("mylist", 0, -1);
        System.out.println(mylist);

        listOperations.rightPop("mylist");

        Long size = listOperations.size("mylist");
        System.out.println(size);
    }
/**
     * 操作集合类型的数据
     */
    @Test
    public void testSet(){
        //sadd smembers scard sinter sunion srem
        SetOperations setOperations = redisTemplate.opsForSet();

        setOperations.add("set1","a","b","c","d");
        setOperations.add("set2","a","b","x","y");

        Set members = setOperations.members("set1");
        System.out.println(members);

        Long size = setOperations.size("set1");
        System.out.println(size);

        Set intersect = setOperations.intersect("set1", "set2");
        System.out.println(intersect);

        Set union = setOperations.union("set1", "set2");
        System.out.println(union);

        setOperations.remove("set1","a","b");
    }
/**
     * 操作有序集合类型的数据
     */
    @Test
    public void testZset(){
        //zadd zrange zincrby zrem
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();

        zSetOperations.add("zset1","a",10);
        zSetOperations.add("zset1","b",12);
        zSetOperations.add("zset1","c",9);

        Set zset1 = zSetOperations.range("zset1", 0, -1);
        System.out.println(zset1);

        zSetOperations.incrementScore("zset1","c",10);

        zSetOperations.remove("zset1","a","b");
    }
/**
     * 通用命令操作
     */
    @Test
    public void testCommon(){
        //keys exists type del
        Set keys = redisTemplate.keys("*");
        System.out.println(keys);

        Boolean name = redisTemplate.hasKey("name");
        Boolean set1 = redisTemplate.hasKey("set1");

        for (Object key : keys) {
            DataType type = redisTemplate.type(key);
            System.out.println(type.name());
        }

        redisTemplate.delete("mylist");
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值