Redis学习笔记

初识Redis -远程词典服务器 NoSQL:非关系型数据库 NoSQL:常见 1.Redis:键值对存储,对k和value没那么强的约束,value支持多种不同的数据结构,很丰富 2.document:以json形式存在 特点: 1.NoSQL的存储方式是内存方式,响应比较快 2.键值xing 3

初识Redis -远程词典服务器

NoSQL:非关系型数据库

NoSQL:常见

1.Redis:键值对存储,对k和value没那么强的约束,value支持多种不同的数据结构,很丰富

2.document:以json形式存在

特点:

1.NoSQL的存储方式是内存方式,响应比较快

2.键值xing

3.单线程

4.低延迟,速度快:基于内存,io多路复用

5.支持数据持久化(防止断电,数据消失,数据会放到磁盘中)

6.支持主从集群,分片集群

7.多语言客户端

Redis入门

查看Redis是否运行

 ps -ef | grep redis

通过相对信息观看是否运行

Redis命令行

命令行客户端:redis-cli

参数:

  • -h : 指定ip地址,默认本机

  • -p :连接redis端口

  • -a : redis的密码

在/usr/local/bin/目录下 输入

redis-cli -h ip地址 -p 端口号 -a 密码

输入ping redis会回复 pong

Redis图形化客户端

通过图形化界面能看到Redis有十六个库(db0-db15)

通过select 数字 来切换库

假设在db0库中存放键值对name-tom1

在db1库中存放键值对name-tom2

使用select 1就可以使用db1号库

get name得到的值就是tom2

Redis数据结构

Redis是k-v的数据库

k值就是key一般是String类型

但是value的值有很多

常见基本类型有

  • String

  • Hash

  • SortedSet

  • List

  • Set

Redis通用命令

查看一个命令的具体用法 help 命令

通用命令

  • KEYS:查看符合模板的所有key

  • DEL:删除key,可以删除多个key

  • MSET:加入多个k-v

  • EXISTS:判断key是否存在

  • EXPIPE:给一个key设置有效时期,时间到期,会被自动删除

  • TTL:查看一个key的剩余有效期(-1代表永久有效)

Redis数据类型

String类型:

分为三类

  • string:字符串

  • int:整数类型

  • float:浮点型

底层都是字节数组的形式存储

key

value

xitong:user:1

{name:"tom",age:12}

xitong:user:2

{name:"xiaohua",age:13}

Hash类型

hash类型,散列,是一个无序字典

hash结构

key

value

k

v

xitong:user:1

name

tom

age

12

xitong:user:2

name

xiaohua

age

13

常见命令:

  • hset key 属性 值

  • hget key 属性

  • hmset:添加多个值

  • hmget:获取多个k的值

List类型

Redis的List类型与java的LinkedList双向链表类型类似

特点

  • 有序

  • 元素可重复

  • 插入和删除快

  • 查询速度慢

常见命令:

  • lpush:向左侧插入一个或者多个元素

  • lpop:一处左侧第一个元素并返回

  • rpush:向右侧插入一个或者多个元素

  • rpop:移除右侧第一个元素并返回

  • lrange:返回角标范围内的元素

  • blpop和brpop:没有元素的时候等待

Set类型

Redis中的set结构和java中的HashSet类似,可以看做是一个value是空的HashMap

特征:

  • 无序

  • 去重

  • 查找快

基础命令:

  • sadd:向set添加一个或者多个元素

  • srem:移除set中指定元素

  • scard:返回set中元素的个数

  • sismember:判断一个元素是否存在set中

  • smembers:获取set中的所有元素

  • sinter k1 k2:求k1和k2的交集

  • sdiff k1 k2:求k1和k2的差集

  • sunion k1 k2:求k1和k2的并集

SortedSet类型

Redis的SortedSet是一个可排序的set集合,和java中的TreeSet类似,但是TreeSet底层是红黑树,而SortedSet是跳表+hash表,SortedSet中每一个元素都带一个score属性,可以对score元素排序,常用于排行榜

特点

  • 可排序

  • 去重

  • 查询快

命令:

  • zadd:添加元素 如果存在,更新score值

  • zrem:删除元素

  • zscore:获取指定的score值

  • zrank:获取指定元素排名

  • zcard:获取元素个数

  • zcount:统计值在给定范围内所有元素的个数

  • zincrby:让指定元素自增,步长为指定值

  • zrange:按照score排序后,获取指定排名范围内的元素

  • zrangebyscore:按照score排序后,获取score范围内的元素

  • zdiff,zinter,zunion:差集,交集,并集

  • z后面+rev就是降序

Redis常见命令

  • set:添加或者修改string键值对

  • get:根据key取value

  • mset:添加多个键值对

  • mget:根据多个key取value

  • incr:让一个整型的key自增

  • incrby:让一个整型的key根据指定大小自增

  • incrbyfloat:让一个浮点类型根据指定大小自增

  • setnx:添加一个键值对,前提是key不存在

  • setex:添加一个键值对,制定有效期

Redis的key格式

项目名:业务名:类型:id

Redis的java客户端

jedis

public class jedis_Test {
    private Jedis  jedis;
    @BeforeEach
    void setUp(){
        jedis = new Jedis("ip地址",6379);
        jedis.auth("密码");
        jedis.select(0);
    }
    @Test
    void test(){
        jedis.set("name","tom");
        System.out.println(jedis.get("name"));
    }
    @AfterEach
    void tearDown() {
        if (jedis != null){
            jedis.close();
    }
    }
}

SpringDataRedis

1.引入依赖

 <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
 </dependency>

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

2.配置文件

spring:
  redis:
    data:
     host: 
     port: 6379
     password: 
     lettuce:
       pool:
        max-active: 10
        max-idle: 10
        min-idle: 0
        max-wait: 100

3.Java代码

@SpringBootTest
class SpringDataRedisTestApplicationTests {
    @Autowired
    private RedisTemplate redisTemplate;
    @Test
    void contextLoads() {
        redisTemplate.opsForValue().set("name","power");
        System.out.println(redisTemplate.opsForValue().get("name"));
    }
}

SpringDataRedis提供了RedisTemplate工具类,封装了对Redis的操作

  • RedisTemplate.opsForValue() 操作String类型数据

  • RedisTemplate.opsForHash() 操作Hash类型数据

  • RedisTemplate.opsForList() 操作List类型数据

  • RedisTemplate.opsForSet 操作Set类型数据

  • RedisTemplate.opsForZSet 操作SortedSet类型数据

String序列化器

 // 自动装配 StringRedisTemplate,用于操作 Redis 中的字符串数据
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    // 定义 ObjectMapper 实例,用于将对象转换为 JSON 字符串以及将 JSON 字符串转换为对象
    private static final ObjectMapper mapper = new ObjectMapper();

    // 测试方法,测试将对象转换为 JSON 并存储到 Redis,然后再从 Redis 中读取并转换回对象
    @Test
    void testObject() throws JsonProcessingException {
        // 创建一个 User 对象
        User user = new User("小花", 18);
        // 使用 ObjectMapper 将 User 对象转换为 JSON 字符串
        String json = mapper.writeValueAsString(user);
        // 使用 StringRedisTemplate 将 JSON 字符串存储到 Redis 中,键为 "user"
        stringRedisTemplate.opsForValue().set("user", json);
        // 使用 StringRedisTemplate 从 Redis 中获取键为 "user" 的值,即 JSON 字符串
        String userJson = stringRedisTemplate.opsForValue().get("user");
        try {
            // 使用 ObjectMapper 将从 Redis 中获取的 JSON 字符串转换为 User 对象
            User user1 = mapper.readValue(userJson, User.class);
            // 打印转换后的 User 对象
            System.out.println(user1);
        } catch (IOException e) {
            // 捕获异常并打印异常信息
            e.printStackTrace();
        }
    }
}

LICENSED UNDER CC BY-NC-SA 4.0
评论