在Java中使用Redis

黑马课程Redis笔记,供个人复习用,若有侵权,联系删除

一、Redis入门

1.Redis简介

Redis是一个基于内存的key-value结构数据库,即非关系型数据库,与MySQL二维表格数据库不同。并不是取代MySQL,而是对MySQL的补充

2.Redis特点

  • 基于内存存储,读写性能高
  • 适合存储热点数据,即访问量大的数据(热点商品、资讯、新闻)
  • 企业应用广泛

3.Redis下载与安装

链接:https://pan.baidu.com/s/1mIxr8IEWj-vdLSl7EJnovw?pwd=w8ah 
提取码:w8ah

在Java中使用Redis_第1张图片

①启动Redis服务端:redis-server.exe redis.windows.conf

在Java中使用Redis_第2张图片

②启动客户端,连接Redis服务:redis-cli.exe (默认连接本地Redis服务,即6379

测试Redis服务启动是否正确:keys *

在Java中使用Redis_第3张图片

③也可以连接指定IP和端口号的Redis服务

在Java中使用Redis_第4张图片

④更改redis服务的密码

在Java中使用Redis_第5张图片

在Java中使用Redis_第6张图片

⑤重新启动redis服务,再启动客户端,输入密码,连接服务

在Java中使用Redis_第7张图片

4.安装Redis客户端图形界面(Another Redis)简化Redis操作

链接:https://pan.baidu.com/s/1gwBh5AcMagAKHEk5W5vEQw?pwd=umxc 
提取码:umxc

在Java中使用Redis_第8张图片在Java中使用Redis_第9张图片

5.Redis常用数据类型

Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型:

  • 字符串 string
  • 哈希 hash
  • 列表 list
  • 集合 set
  • 有序集合 sorted set / zset

在Java中使用Redis_第10张图片

二、Redis常用命令

1.字符串操作命令

  • SET key value 设置指定key的值
  • GET key  获取指定key的值
  • SETEX key seconds value 设置指定key的值,并将key的过期时间设为seconds秒
  • SETNX key value  只有在key不存在时设置key的值

2.哈希操作命令

Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象,常用命令:

  • HSET key field value  将哈希表key中的字段field的值设为value
  • HGET key field  获取存储在哈希表中指定字段的值
  • HDEL key field  删除存储在哈希表中的指定字段
  • HKEYS key       获取哈希表中所有字段
  • HVALS key        获取哈希表中所有值

3.列表操作命令

Redis列表是简单的字符串列表,按照插入顺序排序,常用命令:

  • LPUSH key value1 [value2]  将一个或多个值插入列表头部(左侧
  • LRANGE key start stop        获取列表指定范围内的原始
  • RPOP key              移除并获取列表最后一个元素
  • LLEN key               获取列表长度

在Java中使用Redis_第11张图片

4.集合操作命令

Redis set是string类型的无序集合。集合成员是唯一的,集合中不能出现重复的数据,常用命令:

  • SADD key member1 [member2]  向集合添加一个或多个成员
  • SMEMBERS key        返回集合中的所有成员
  • SCARD key                获取集合的成员数
  • SINTER key1 [key2]   返回给定所有集合的交集
  • SUNION key1 [key2]  返回所有给定集合的并集
  • SREM key member1 [member2] 删除集合中的一个或多个成员

5.有序集合操作命令

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

  • ZADD key score1 member1 [score2 member2]  向有序集合添加一个或多个成员
  • ZRANGE key start stop [WITHSCORES]  通过索引区间返回有序集合中指定区间内的成员
  • ZINCRBY key increment member   有序集合中对指定成员的分数加上增量increment
  • ZREM key member [member...]       移除有序集合中的一个或多个成员

6.通用命令

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

在Java中使用Redis_第12张图片

三、在Java中操作Redis

1.Redis的Java客户端

Redis的Java客户端很多,常用的几种:

  • Jedis      封装优秀,方法名与Redis命令一一对应
  • Lettuce   基于Netty多线程框架,性能高效
  • Spring Data Redis  

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

2.Spring Data Redis使用方式

操作步骤:

①导入Spring Data Redis的maven坐标

        
            org.springframework.boot
            spring-boot-starter-data-redis
        
②配置Redis数据源
spring:
  # redis配置
  redis:
    host: localhost
    port: 6379
    password: 123456
    database: 0
③编写配置类,创建RedisTemplate对象
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;

/**
 * Redis配置类
 */
@Configuration
@Slf4j
public class RedisConfiguration {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
        RedisTemplate redisTemplate = new RedisTemplate();
        //设置Redis的连接工厂
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置Redis key的序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}
④通过RedisTemplate对象操作Redis
1)操作字符串类型的数据
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.*;

import java.util.concurrent.TimeUnit;

@SpringBootTest
public class SpringDataRedisTest {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void testRedistTemplate() {
        System.out.println(redisTemplate);
        ValueOperations valueOperations = redisTemplate.opsForValue();//字符串
        ListOperations listOperations = redisTemplate.opsForList();//列表
        HashOperations hashOperations = redisTemplate.opsForHash();//哈希
        SetOperations setOperations = redisTemplate.opsForSet();//集合
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();//有序集合
    }

    /**
     * 操作字符串类型的数据
     */
    @Test
    public void testString(){
        // set get setex setnx
        redisTemplate.opsForValue().set("city", "潜江");
        String city = (String) redisTemplate.opsForValue().get("city");
        System.out.println(city);
        redisTemplate.opsForValue().set("code", "1234", 3, TimeUnit.MINUTES);
        redisTemplate.opsForValue().setIfAbsent("lock", "1");
        redisTemplate.opsForValue().setIfAbsent("lock", "2");
    }
}
2)操作哈希类型的数据
/**
     * 操作哈希类型的数据
     */
    @Test
    public void testHash(){
        //hset hget hdel hkeys hvals
        HashOperations hashOperations = redisTemplate.opsForHash();
        //hset
        hashOperations.put("100", "name", "张三");
        hashOperations.put("100", "age", "20");
        //hget
        String name = (String) hashOperations.get("100", "name");
        System.out.println(name);
        //hkeys
        Set keys = hashOperations.keys("100");
        System.out.println(keys);
        //hvals
        List values = hashOperations.values("100");
        System.out.println(values);
        //hdel
        hashOperations.delete("100", "age");
    }
3)操作列表类型的数据
/**
     * 操作列表类型的数据
     */
    @Test
    public void testList() {
        //lpush lrange rpop llen
        ListOperations listOperations = redisTemplate.opsForList();
        //lpush
        listOperations.leftPushAll("mylist", "a", "b", "c");
        listOperations.leftPush("mylist", "d");
        //lrange
        List mylist = listOperations.range("mylist", 0, -1);
        System.out.println(mylist);
        //rpop
        listOperations.rightPop("mylist");
        //llen
        Long size = listOperations.size("mylist");
        System.out.println(size);
    }
4)操作集合类型的数据
/**
     * 操作集合类型的数据
     */
    @Test
    public void testSet() {
        //sadd smembers scard sinter sunion srem
        SetOperations setOperations = redisTemplate.opsForSet();
        //sadd
        setOperations.add("set1", "a", "b", "c", "d");
        setOperations.add("set2", "a", "b", "x", "y");
        //smembers
        Set set1 = setOperations.members("set1");
        System.out.println(set1);
        //scard
        Long size = setOperations.size("set1");
        System.out.println(size);
        //sinter
        Set intersect = setOperations.intersect("set1", "set2");
        System.out.println(intersect);
        //sunion
        Set union = setOperations.union("set1", "set2");
        System.out.println(union);
        //srem
        setOperations.remove("set1", "a", "b");
    }
5)操作有序集合类型的数据
/**
     * 操作有序集合类型的数据
     */
    @Test
    public void testZset() {
        //zadd zrange zincrby zrem
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
        //zadd
        zSetOperations.add("zset1", "a", 10);
        zSetOperations.add("zset1", "b", 12);
        zSetOperations.add("zset1", "c", 9);
        //zrange
        Set zset1 = zSetOperations.range("zset1", 0, -1);
        System.out.println(zset1);
        //zincrby
        zSetOperations.incrementScore("zset1", "c", 10);
        //zrem
        zSetOperations.remove("zset1", "a","b");
    }
6)通用命令的操作
/**
     * 通用命令操作
     */
    @Test
    public  void testCommon() {
        //keys exists type del
        //keys
        Set keys = redisTemplate.keys("*");
        System.out.println(keys);
        //exists
        Boolean name = redisTemplate.hasKey("name");
        Boolean set1 = redisTemplate.hasKey("set1");
        //type
        for (Object key: keys) {
            DataType type = redisTemplate.type(key);
            System.out.println(type.name());
        }
        //del
        redisTemplate.delete("mylist");
    }

你可能感兴趣的:(笔记,java,redis,开发语言)