SpecialWeekSpecialWeek

Redis快速入门

本文导航按标题快速定位

入门

Redis是一个基于内存的Key-value结构数据库。mysql是以数据文件的形式存在磁盘的数据库,存储介质不同。数据结构不同:Redis是以键值对的方式,mysql是以二维表的方式

Redis的优势:

  • 基于内存存储,读写能力强
  • 适合存储热点数据(热点商品,资讯,新闻)
  • 企业应用广泛
热点数据就是有大量的用户访问的数据。Redis和MySQL是互补的。

Redis下载连接:https://github.com/microsoftarchive/redis/releases

在Redis所在文件加下打开命令行窗口输入:redis-server.exe redis.windows.conf就启动了。ctrl+c退出。可以在windows.conf中配置端口号(默认6379),密码等。然后打开一个新的命令行窗口(上一个命令行窗口不要关闭),输入:redis-cli.exe连接客户端(可以指定连接的服务器如:redis-cli.exe -h localhost -p 6379 -a 密码)

对于客户端我们还可以下载使用Another-Redis-Desktop-Manager应用程序比命令行操控方便的多,前提是用cmd开启redis服务端。

redis 初始就自动创建了16个数据库。DB0 ~ DB15;

常用的Redis数据类型

其中key是字符串类型的,value有五种常用类型:string hash list set 和有序集合(sorted set / zset)其中的hash类似于java中的hashMap结构

alt text

Redis的常用命令

1.字符串

  • SET key value 设置指定key的值(这个会覆盖原来的值)
  • GET key 获取指定key的值
  • SETEX key seconds value 设置指定key的值,并将key的过期时间设为seconds秒
  • SETNX key value 只有在key不存在的时候设置key的值

2.hash操作命令
hash的结构 key ->(fild -> value)。像map。
alt text

3.列表
新增元素是在列表的头部添加的。一个键可以存多个值,就像链表一样,key像头指针。
alt text

4.集合
alt text

5.有序集合
double类型用来排序用的。那个score是指定这个double。
alt text

–通用命令

  • KEYS pattern 查找所有符合给定模式(pattern)的key
  • EXISTS key 检查给定key是否存在
  • TYPE key 返回key所存储的值的类型
  • DEL key 该命令用于在key存在时删除key

java中操作Reids

Redis的java客户端

1.jedis 2.Lettuce 3.Spring Data Redis

Spring Data Redis是Spring的一部分,对Redis底层开发包进行了高度封装。在Spring项目中,可以使用Spring Data Redis来简化操作。

Spring Data Redis使用

1.导入坐标(在server的xml中导入)

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

2.配置Redis数据源(在苍穹外卖的server->resources->application.yml也是数据库配置的地方)
```YML
spring:
  redis:
    host: localhost
    port: 6379
    password: 258000
    database: 指定数据库,默认时DB0

3.编写配置类,创建RedisTemplate对象

@Configuration
@S1f4j
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;
  }
}

4.通过RedisTemplate对象操作Redis

注入redisTemplate调用函数控制数据库。

java的Sring和Redis中的String不太一样。所以在java程序中会对数据进行序列化在传给Redis。在RedisConfiguration中我们配置序列化器,如果不配置的话他会使用默认的序列化器,在Redis数据库中会出现乱码,但在java程序中使用数据的时候不会出现问题。

示例:
redisTemplate.opsForValue().set("name","小明");
String city = (String) redisTemplate.opsForValue().get("name");
System.out.println(city);
redisTemplate.opsForValue().set( key: "code", value: "1234", timeout: 3, TimeUnit.MINUTES);
redisTemplate.opsForValue().setIfAbsent("lock","1");
redisTemplate.opsForValue().setIfAbsent("lock","2");

对于哈希类型的我们先用opsForHash()获取一个hash对象。然后照葫芦画瓢跟着做就行了。

HashOperations hashOperations = redisTemplate.opsForHash();

hashOperations.put( key: "100", hashKey: "name", value: "tom");
hashOperations.put( key: "100", hashKey: "age", value: "20");

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

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

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

hashOperations.delete( key: "100", ... hashKeys: "age");

剩下的几种类型一样。如:列表ListOperations 集合SetOperations,对应的方法会有所不同。因为只是快速入门,反正也记不住问ai就行。