在Java中使用Redis

7 篇文章 0 订阅

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

一、Redis入门

1.Redis简介

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

2.Redis特点

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

3.Redis下载与安装

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

f16b58c37e214439bc4c386e73375784.png

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

0b5f0ad1e0c140a5aae2fd34acf0fe8a.png

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

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

9f706457d75f48129f0d6aabe7ae038d.png

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

d0268a0f03764a7d8203771da01fbaf1.png

④更改redis服务的密码

d11c08b5a4f84f11803a362548402b97.png

6ca32a7d60cf460ca479c5a046fdee63.png

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

e7bd9b573d4543d6bdc272bd1914c1e4.png

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

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

d36713f0d46a43838150777f1a09b9de.png401f348ff6214aa2a37fc8b43d1c7dad.png

5.Redis常用数据类型

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

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

192c7e57e31047208cc5fe9477608d0b.png

 

二、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               获取列表长度

59394d281c2a4aafb08d26287aaa7486.png

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

6ad09664cfee427cbfa3350aa66d3012.png

 

三、在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坐标

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

​

②配置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");
    }

 

 

  • 26
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值