redis详解

redis数据结构

Redis采用的是键值对存储,(key)键的类型只能为字符串,(value)值支持五种数据类型:

  • 字符串:String
  • 哈希:HashMap
  • 双向链表:LinkedList
  • 无序集合:HashSet
  • 有序集合:LinkedHashSet(zset)
1.String字符串
  • 新增
    set key value
  • 查询
    get key
  • 删除
    del key
  • 新增的时候设置过期时间(验证码)
    setex key second value
  • 查看剩余时间
    ttl key
  • 根据键判断记录是否存在
    exists key 0:不存在 1:存在
  • 自增(减)操作:
    incr/decr key
2.Hash哈希

Hash类型极其类似于java中的Map,值里面可以存放一组组的键值对

该类型非常适合于存储java中对象的信息

  • 新增
    hset key hkey hvalue
  • 查询
    ----所有
    hgetall key
    ----单个
    hget key hkey
  • 删除
    ----单个
    hdel key hkey
    ----所有
    del key
  • 获取所有hkey
    hkeys key
  • 获取所有hvalue
    hvals key
Jedis的使用
API
方法解释
new Jedis(host, port)创建jedis对象,参数host是redis服务器地址,参数port是redis服务端口
set(key,value)设置字符串类型的数据
get(key)获得字符串类型的数据
hset(key,field,value)设置哈希类型的数据
hget(key,field)获得哈希类型的数据
lpush(key,values)设置列表类型的数据
lpop(key)列表左面弹栈
rpop(key)列表右面弹栈
del(key)删除指定的key
具体步骤

1.引入依赖

<dependencies>
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>2.9.3</version>
    </dependency>
</dependencies>

2.编写测试类

public class JedisTest {

    public static void main(String[] args) {
        // 1.创建连接
        Jedis jedis = new Jedis("127.0.0.1", 6379);

        // 2.新增
        jedis.set("1002", "李四");
      	//3.查询
        String value = jedis.get("1002");
        System.out.println(value);

        // 4.关闭连接
        jedis.close();
    }
}
Jedis连接池
public class JedisPoolTest {

    public static void main(String[] args) {
        // 0.创建连接池配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(50); // 最大连接数
        config.setMaxIdle(20); // 最大空闲数
        // 1.创建连接池
        JedisPool jedisPool = new JedisPool(config,"127.0.0.1",6379);
        // 2.获取连接
        Jedis jedis = jedisPool.getResource();
        // 3.进行 新增、修改、删除、查询

        // 4.归还连接
        jedis.close();
    }
}
SpringDataRedis(Spring整合的redis)

Spring Data Redis提供了从Spring应用程序轻松配置和访问Redis的功能

通过RedisTemplate对底层Jedis进行了高度封装,提供了redis各种操作

  • ValueOperations:简单键值对操作 String

  • SetOperations:set类型数据操作 set

  • ZSetOperations:zset类型数据操作 sortedset---->zset

  • HashOperations:针对hash类型的数据操作 hash

  • ListOperations:针对list类型的数据操作 list

使用步骤

1.引入依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.4.5</version>
</parent>

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

2.添加配置文件application.yml

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

3.创建启动类

@SpringBootApplication
public class RedisApplication {
    public static void main(String[] args) {
        SpringApplication.run(RedisApplication.class, args);
    }
} 
各数据类型通用操作
// 通用操作
@Test
public void test06()throws Exception{
    // 查询所有key
    Set<String> keys = stringRedisTemplate.keys("*");
    for (String key : keys) {
        System.out.println(key);
    }
    // 判断某个key是否存在
    Boolean itheima = stringRedisTemplate.hasKey("1005");
    System.out.println(itheima);

    // 判断某个key的类型
    DataType type = stringRedisTemplate.type("1005");
    System.out.println(type.name());
}
String类型操作方法
// 操作字符串类型
@Test
public void test01() throws Exception {
    // 获取string操作对象
    ValueOperations<String, String> opsForValue = stringRedisTemplate.opsForValue();

    // 存值
    opsForValue.set("city", "北京");

    // 取值
     String value = opsForValue.get("city");
     System.out.println(value);

    // 存验证码存活5分钟
     opsForValue.set("sms_13700137000", "6375",TimeUnit.SECONDS);
  
   //删除
   redisTemplate.delete("city");

}
hash类型操作方法
// 操作hash类型
@Test
public void test02() throws Exception {
    // 获取hash操作对象
    HashOperations<String, Object, Object> opsForHash = stringRedisTemplate.opsForHash();

    // 存值
    //opsForHash.put("1005", "nage", "zhangsan");
    //opsForHash.put("1005", "age", "18");
    //opsForHash.put("1005", "sex", "man");

    // 取出年龄
    String age = (String) opsForHash.get("1005", "age");
    System.out.println(age);
    System.out.println("---------------");
    // 取出所有key
    Set<Object> keys = opsForHash.keys("1005");
    for (Object key : keys) {
        System.out.println(key);
    }
    System.out.println("---------------");
    // 取出所有value
    List<Object> values = opsForHash.values("1005");
    for (Object value : values) {
        System.out.println(value);
    }

    // 删除
    opsForHash.delete("1005", "name");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值