redis------在java中操作redis

Redis(非关系型数据库)简介

redis下载 点击即可进入redis中文网进行下载

百度网盘windows版本 提取码 DMH6

redis------在java中操作redis_第1张图片


redis主要特点

  • 基于内存存储,读写性能高

  • 适合存储热点数据(热点商品、资讯、新闻)

  • 企业应用广泛

  • redis不同于Mysql他是将数据存储到内存中,这样可以提高数据的访问速度,但是不适用于大量数据存储

  • Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供的数据是可以达到100000+的QPS(每秒内查询次数)。它存储的value类型比较丰富,也被称为结构化的NoSql数据库。

redis安装 

Redis的Windows版属于绿色软件,直接解压即可使用,解压后目录结构如下:

redis------在java中操作redis_第2张图片

linux版本

在Linux系统安装Redis步骤:

  1. 将Redis安装包上传到Linux

  2. 解压安装包,命令:tar -zxvf redis-4.0.0.tar.gz -C /usr/local

  3. 安装Redis的依赖环境gcc,命令:yum install gcc-c++

  4. 进入/usr/local/redis-4.0.0,进行编译,命令:make

  5. 进入redis的src目录进行安装,命令:make install

安装后重点文件说明:

  • /usr/local/redis-4.0.0/src/redis-server:Redis服务启动脚本

  • /usr/local/redis-4.0.0/src/redis-cli:Redis客户端脚本

  • /usr/local/redis-4.0.0/redis.conf:Redis配置文件

windows启动redis 

在解压的文件夹下

redis------在java中操作redis_第3张图片

打开命令行窗口

输入 redis-server.exe redis.windows.conf

连接客户端

redis-cli.exe

修改密码--在redis.windows.conf

redis------在java中操作redis_第4张图片

连接redis

redis-cli.exe -h localhost -p 6379 -a 123456

图形化操作redis 

上面的百度网盘内已经提供

redis------在java中操作redis_第5张图片

redis5种数据类型

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

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

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

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

  • 有序集合(sorted set/zset):集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素

redis常用数据命令

字符串操作命令

  • SET key value 设置指定key的值

  • GET key 获取指定key的值

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

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

哈希操作命令hash

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

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

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

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

  • HVALS key 获取哈希表中所有值

列表操作命令

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

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

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

  • LLEN key 获取列表长度

  • BRPOP key1 [key2 ] timeout 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超 时或发现可弹出元素为止

集合操作命令set

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

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

  • SCARD key 获取集合的成员数

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

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

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

有序集合操作命令(zset)

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

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

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

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

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

通用命令

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

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

  • EXISTS key 检查给定 key 是否存在

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

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

使用Spring Data Redis在Java种操作redis

  1.  导入maven坐标
    1. 
      	org.springframework.boot
      	spring-boot-starter-data-redis
      
  2. 配置redis数据源
    1. redis------在java中操作redis_第6张图片
  3. 编写配置类,创建RedisTemplate对象
    1. 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 redisConnectionFactory){
              log.info("开始创建redis模板对象...");
              RedisTemplate redisTemplate = new RedisTemplate();
              //设置redis的连接工厂对象
              redisTemplate.setConnectionFactory(redisConnectionFactory);
              //设置redis key的序列化器
              redisTemplate.setKeySerializer(new StringRedisSerializer());
              return redisTemplate;
          }
      }

 在Java中操作redis数据库

操作字符串类型数据

redis------在java中操作redis_第7张图片

2). 操作哈希类型数据

redis------在java中操作redis_第8张图片

3). 操作列表类型数据

redis------在java中操作redis_第9张图片

4). 操作集合类型数据

redis------在java中操作redis_第10张图片

操作集合类型数据无序 不重复

redis------在java中操作redis_第11张图片

5). 操作有序集合类型数据

redis------在java中操作redis_第12张图片

6). 通用命令操作

redis------在java中操作redis_第13张图片

注意:

Java向redis中存储的是什么类型的数据,取出来就是什么类型

Spring Cache缓存数据

Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。

Spring Cache 提供了一层抽象,底层可以切换不同的缓存实现,例如:

  • EHCache

  • Caffeine

  • Redis(常用)       如果想要切换只需要引入别的数据库的坐标就可以

底层:其实是代理对象技术,在执行方法之前对redis进行操作


在maven中引入依赖


	org.springframework.boot
	spring-boot-starter-cache  		            		       	 2.7.3 
2.1.2 常用注解  一般放在controller层上

在SpringCache中提供了很多缓存操作的注解,常见的是以下的几个:

注解 说明
@EnableCaching 开启缓存注解功能,通常加在启动类上
@Cacheable 在方法执行通过代理对象前先查询缓存中是否有数据,如果有数据,则直接返回缓存数据不执行方法;如果没有缓存数据,通过反射调用方法并将方法返回值放到缓存中
@CachePut 将方法的返回值放到缓存中
@CacheEvict 将一条或多条数据从缓存中删除

@CacheEvict(cacheNames = "自己定义",key = "#id")

在spring boot项目中,使用缓存技术只需在项目中导入相关缓存技术的依赖包,并在启动类上使用@EnableCaching开启缓存支持即可。

@CachePut 说明:

作用: 将方法返回值,放入缓存

value: 缓存的名称, 每个缓存名称下面可以有很多key

key: 缓存的key ----------> 支持Spring的表达式语言SPEL语法

/**
	* CachePut:将方法返回值放入缓存
	* value:缓存的名称,每个缓存名称下面可以有多个key
	* key:缓存的key
	*/
	@PostMapping
    @CachePut(value = "userCache", key = "#user.id")//key的生成:userCache::1
    public User save(@RequestBody User user){
        userMapper.insert(user);
        return user;
    }

说明:key的写法如下

  • #user.id : #user指的是方法形参的名称, id指的是user的id属性 , 也就是使用user的id属性作为key ;
  • #result.id : #result代表方法返回值,该表达式 代表以返回对象的id属性作为key ;
  • #p0.id:#p0指的是方法中的第一个参数,id指的是第一个参数的id属性,也就是使用第一个参数的id属性作为key ;
  • #a0.id:#a0指的是方法中的第一个参数,id指的是第一个参数的id属性,也就是使用第一个参数的id属性作为key ;
  • #root.args[0].id:#root.args[0]指的是方法中的第一个参数,id指的是第一个参数的id属性,也就是使用第一个参数
  • 的id属性作为key ;
@DeleteMapping
@CacheEvict(cacheNames = "userCache",key = "#id")//删除某个key对应的缓存数据
public void deleteById(Long id){
    userMapper.deleteById(id);
}

@DeleteMapping("/delAll")
@CacheEvict(cacheNames = "userCache",allEntries = true)//删除userCache下所有的缓存数据
public void deleteAll(){
   userMapper.deleteAll();
}
/**
	* Cacheable:在方法执行前spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,	  *调用方法并将方法返回值放到缓存中
	* value:缓存的名称,每个缓存名称下面可以有多个key
	* key:缓存的key
	*/
	@GetMapping
    @Cacheable(cacheNames = "userCache",key="#id")
    public User getById(Long id){
        User user = userMapper.getById(id);
        return user;
    }

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