java中使用redis

1、redis数据类型

1.1、5种数据类型

redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型:字符串 string、哈希 hash、列表 list、集合 set、有序集合 sorted set / zset。

java中使用redis_第1张图片

字符串(string):普通字符串,Redis中最简单的数据类型。

哈希(hash):也叫散列,类似于Java中的HashMap结构。

列表(list):按照插入顺序排序,可以有重复元素,类似于Java中的LinkedList。

集合(set):无序集合,没有重复元素,类似于Java中的HashSet。

有序集合(sorted set/zset):集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素
字符串类型操作指令开头一般为s开头(SET 、GET、SETEX 、SETNX )

哈希操作命令操作指令开头一般为h开头(HSET ​​​​​​​、HGET ​​​​​​​、HDEL ​​​​​​​、HKEYS ​​​​​​​、HVALS )

列表操作命令指令开头一般为l开头(LPUSH ​​​​​​​、LRANGE ​​​​​​​、RPOP ​​​​​​​、LLEN ​​​​​​​、BRPOP )

集合操作命令指令开头一般为s开头(SADD 、SMEMBERS ​​​​​​​、SCARD ​​​​​​​、SINTER 、SUNION ​​​​​​​、SREM )

有序集合操作命令指令开头一般为z开头(ZADD ​​​​​​​、ZRANGE ​​​​​​​、ZINCRBY ​​​​​​​、ZREM )

1.2、字符串操作命令

SET key value 设置指定key的值

java中使用redis_第2张图片

GET key 获取指定key的值

java中使用redis_第3张图片

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

java中使用redis_第4张图片

100秒之后它会自动销毁java中使用redis_第5张图片

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

 java中使用redis_第6张图片

1.3、哈希操作命令 

java中使用redis_第7张图片redis hash 是一个string类型的 field 和 value 的映射表,hash特别适合用于存储对象

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

java中使用redis_第8张图片

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

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

 

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

java中使用redis_第9张图片

HVALS key 获取哈希表中所有值

 java中使用redis_第10张图片

1.4、列表操作命令 

java中使用redis_第11张图片

redis 列表是简单的字符串列表,按照插入顺序排序 

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

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

 

RPOP key 移除并获取列表最后一个元素

 java中使用redis_第12张图片

1.5、集合操作命令 

java中使用redis_第13张图片redis set 是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据

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

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

 java中使用redis_第14张图片

SCARD key 获取集合的成员数

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

java中使用redis_第15张图片

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

java中使用redis_第16张图片

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

 java中使用redis_第17张图片

1.6、有序集合操作命令

java中使用redis_第18张图片redis有序集合是string类型元素的集合,且不允许有重复成员。每个元素都会关联一个double类型的分数,根据分数来进行排序

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

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

java中使用redis_第19张图片

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

 java中使用redis_第20张图片

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

 java中使用redis_第21张图片

1.7、通用命令 

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

java中使用redis_第22张图片

EXISTS key 检查给定 key 是否存在

 java中使用redis_第23张图片

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

 java中使用redis_第24张图片

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

 java中使用redis_第25张图片

2、java中使用redis

2.1、引入maven依赖

 pom.xml


	org.springframework.boot
	spring-boot-starter-data-redis

RedisTemplate,对相关api进行了归类封装,将同一类型操作封装为operation接口,分类如下:

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

 application.yml中 

spring:
  application:
    name: springdataredis_demo
  #Redis相关配置
  redis:
    host: localhost
    port: 6379
    #password: 123456
    database: 0 #默认操作的是0号数据库
    jedis:
      #Redis连接池配置
      pool:
        max-active: 8 #最大连接数
        max-wait: 1ms #连接池最大阻塞等待时间
        max-idle: 4 #连接池中的最大空闲连接
        min-idle: 0 #连接池中的最小空闲连接
/**
 * Redis配置类
 */

@Configuration
public class RedisConfig extends CachingConfigurerSupport {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) {

        RedisTemplate redisTemplate = new RedisTemplate<>();

        //默认的Key序列化器为:JdkSerializationRedisSerializer
        //String类型序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //hash类型序列化器
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());

        redisTemplate.setConnectionFactory(connectionFactory);

        return redisTemplate;
    }

}

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

2.2、操作String类型数据

@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {

    //yml中配置支持RedisTemplate对象自动装配
    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * 操作String类型数据
     */
    @Test
    public void testString(){
        //ValueOperations valueOperations = redisTemplate.opsForValue();
        redisTemplate.opsForValue().set("city123","beijing");

        //打印输出
        String value = (String) redisTemplate.opsForValue().get("city123");
        System.out.println(value);

        //设置超时时间
        redisTemplate.opsForValue().set("key1","value1",10l, TimeUnit.SECONDS);

        //当key不存在才设置value
        Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("city1234", "nanjing");
        System.out.println(aBoolean);
        
    }
}

2.3、操作Hash类型数据

@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {

    @Autowired
    private RedisTemplate redisTemplate;
    
    /**
     * 操作Hash类型数据
     */
    @Test
    public void testHash(){
        HashOperations hashOperations = redisTemplate.opsForHash();

        //存值
        hashOperations.put("002","name","xiaoshen");
        hashOperations.put("002","age","20");
        hashOperations.put("002","address","nj");

        //取值
        String age = (String) hashOperations.get("002", "age");
        System.out.println(age);

        //获得hash结构中的所有字段
        Set keys = hashOperations.keys("002");
        for (Object key : keys) {
            System.out.println(key);
        }

        //获得hash结构中的所有值
        List values = hashOperations.values("002");
        for (Object value : values) {
            System.out.println(value);
        }
    }
}

2.4、操作List类型数据

@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {

    @Autowired
    private RedisTemplate redisTemplate;
       /**
     * 操作List类型的数据
     */
    @Test
    public void testList(){
        ListOperations listOperations = redisTemplate.opsForList();

        //存1个值
        listOperations.leftPush("mylist","a");
        //存多个值
        listOperations.leftPushAll("mylist","b","c","d");

        //取值
        List mylist = listOperations.range("mylist", 0, -1);
        for (String value : mylist) {
            System.out.println(value);
        }

        //获得列表长度 llen
        Long size = listOperations.size("mylist");
        int lSize = size.intValue();
        for (int i = 0; i < lSize; i++) {
            //出队列
            String element = (String) listOperations.rightPop("mylist");
            System.out.println(element);
        }
    }
}

2.5、操作Set类型数据

@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {

    @Autowired
    private RedisTemplate redisTemplate;
    /**
     * 操作Set类型的数据
     */
    @Test
    public void testSet(){
        SetOperations setOperations = redisTemplate.opsForSet();

        //存值
        setOperations.add("myset","a","b","c","a");

        //取值
        Set myset = setOperations.members("myset");
        for (String o : myset) {
            System.out.println(o);
        }

        //删除成员
        setOperations.remove("myset","a","b");

        //取值
        myset = setOperations.members("myset");
        for (String o : myset) {
           ![在这里插入图片描述](https://img-blog.csdnimg.cn/498ec17ed8744d25a0cd5ee96fc20b73.png)
 System.out.println(o);
        }

    }
}

2.6、操作ZSet类型数据

@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {

    @Autowired
    private RedisTemplate redisTemplate;
     /**
     * 操作ZSet类型的数据
     */
    @Test
    public void testZset(){
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();

        //存值
        zSetOperations.add("myZset","a",10.0);
        zSetOperations.add("myZset","b",11.0);
        zSetOperations.add("myZset","c",12.0);
        zSetOperations.add("myZset","a",13.0);

        //取值
        Set myZset = zSetOperations.range("myZset", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }

        //修改分数
        zSetOperations.incrementScore("myZset","b",20.0);

        //取值
        myZset = zSetOperations.range("myZset", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }

        //删除成员
        zSetOperations.remove("myZset","a","b");

        //取值
        myZset = zSetOperations.range("myZset", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }
    }
}

2.7、redis 通用操作

@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {

    @Autowired
    private RedisTemplate redisTemplate;
    /**
     * 通用操作,针对不同的数据类型都可以操作
     */
    @Test
    public void testCommon(){
        //获取Redis中所有的key
        Set keys = redisTemplate.keys("*");
        for (String key : keys) {
            System.out.println(key);
        }

        //判断某个key是否存在
        Boolean itcast = redisTemplate.hasKey("dongli");
        System.out.println(itcast);

        //删除指定key
        redisTemplate.delete("myZset");

        //获取指定key对应的value的数据类型
        DataType dataType = redisTemplate.type("myset");
        System.out.println(dataType.name());

    }
}

你可能感兴趣的:(数据库,java,redis,mybatis)