Redis基础入门

目录

一:Redis入门

1.1:Redis简介

1.2:Redis下载与安装

1.2.1:Windows版的Redis下载与安装

1.3:Redis服务启动与安装

1.3.1在解压后的文件中输入cmd

1.3.2:在cmd中输入命令

1.3.3:启动成功

1.3.4:连接服务端

1.3.5:停止Redis服务

二:Redis数据类型

2.1:简单介绍5种数据类型

2.2:5种数据类型的特点

三:Redis常用命令

3.1:字符串操作命令

3.2:哈希操作命令

3.3:列表操作命令

3.4:集合操作命令 (无序,不可重复)

3.5:有序集合操作命令 (有序)

3.6:通用命令

四:在Java中操作Redis

4.1:Redis的Java客户端

[4.2:Spring Data Redis使用方式](#4.2:Spring Data Redis使用方式)

4.3:5种类型操作方式

4.3.1:字符串指令在Java中的使用

4.3.2:哈希指令在Java中的使用

4.3.3:列表指令在Java中的使用

4.3.4:无序集合指令在java中的使用

4.3.5:有序集合在Java中的使用

4.3.6:通用命令


一:Redis入门

1.1:Redis简介

Redis是一个基于内存的Key-Value结构数据库。

Redis与SQL不同的是,SQL是以二维表存储数据,Redis以键值对存储数据。

优点:

1:基于内存存储,读写性能高

2:适合存储热点数据(热点商品,资讯,新闻)-->特点:访问量大的数据。

1.2:Redis下载与安装

1.2.1:Windows版的Redis下载与安装

将其下载好的window版的Redis进行下载后,解压缩,会得到下面的目录。

1.3:Redis服务启动与安装

1.3.1在解压后的文件中输入cmd

1.3.2:在cmd中输入命令

复制代码
redis-server.exe redis.windows.conf

1.3.3:启动成功

1.3.4:连接服务端

重复1 2 两个步骤,重新开启一个cmd命令行,输入

复制代码
redis-cli.exe

当出现底下这个代码时:则代表连接到服务端

连接到别的Redis服务

1.3.5:停止Redis服务

二:Redis数据类型

2.1:简单介绍5种数据类型

2.2:5种数据类型的特点

***字符串:**普通字符串,Redis最简单的数据类型。

***哈希:**也叫散列,类似于Java中HashMap结构,常用来存储Java中的对象。

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

***集合:**无序集合,类似于Java中的HashSet

***有序集合:**每个元素会关联一个分数,根据分数升序,无重复元素

三:Redis常用命令

3.1:字符串操作命令

|-------------------------|----------------------------------------|
| SET key value | 设置指定key的值 |
| Get key | 获取指定key的值 |
| SETEX key seconds value | 设置指定key的值,并将key的过期时间设为seconds秒(常用在验证码) |
| SETNX key value | 只有存在key不存在时,设置key的值 |

代码演示:

复制代码
OK
> get  name
jack
> get abc
null
> setex code 30 1234
OK
> get code
1234
> get code
null

3.2:哈希操作命令

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

复制代码
> Hset 100 name xiaoming
1
> hset 100 age 22
1
> Hget 100  name
xiaoming
> Hget 100 age
22
> Hdel 100 name
1
> Hset 100 name zhangsan
1
> HKEYS key
> HKEYS 100
age
name
> HVA
ERR unknown command 'hva'
> HVALS 100
22
zhangsan

3.3:列表操作命令

|----------------------------|---------------|
| LPUSH key value1[value2] | 将一个或多个插入到列表头部 |
| LRIGHT key start stop | 获取列表指定范围内的元素 |
| RPOP key | 移除并获取列表最后一个元素 |
| LIEN key | 获取列表长度 |

复制代码
> lpush mylist a b c
3

0代表从列表的第一个元素开始,-1代表列表的最后一个元素

复制代码
> lrange mylist 0 -1
d
c
b
a

rpop命令删除列表的最后一个元素。rpop key

复制代码
> rpop mylist
a

> Llen mylist
3

3.4:集合操作命令 (无序,不可重复)

|--------------------------|--------------|
| sadd key member1 member2 | 向集合添加一个或多个成员 |
| smembers key | 返回集合中的所有成员 |
| scard key | 返回集合中的成员数 |
| sinter key1 key2 | 返回给定集合中的交集 |
| sunion key1 key2 | 返回所有给定集合的并集 |
| srem key member1 member2 | 删除集合中一个或多个集合 |

添加集合 set1 set2

复制代码
> sadd set1 1 2 3 4 5
5
> sadd set2 1 2 3 4 10
5

查询当前集合的成员

复制代码
> smembers set1
1
2
3
4
5

查询当前集合的成员的个数

复制代码
> scard set1
5

求交集

复制代码
> sinter set1 set2
1
2
3
4

求并集

复制代码
> sunion set1 set2
1
2
3
4
5
10

删除集合中的元素

复制代码
> srem set1 1
1

3.5:有序集合操作命令 (有序)

|----------------------------------------|----------------|
| zadd key score1 member1 score2 member2 | 向有序集合添加一个或多个成员 |
| zrange key start stop【withscores】 | 通过索引返回集合中的成员 |
| zincrby key increment member | 分数+increament |
| zrem key member | 删除集合中的元素 |

在有序集合中添加元素:按刚开始所赋予的分数进行排序,按照升序进行排序

复制代码
> zadd zset1 10.0 a 10.5 b
2
> zadd  zset1 10.2 c
1
复制代码
> zrange zset1 0 -1 withscores
a
10
c
10.199999999999999
b
10.5

给集合中的某一个元素增加score值

复制代码
> zincrby zset1 5.0 a
15

删除某一个元素

复制代码
> zrem zset1 a
1

3.6:通用命令

|--------------|-------------------|
| keys pattern | 查询所有符合给定模式的key |
| exists key | 检查给定key是否存在 |
| type key | 返回key所储存的值的类型 |
| del key | 该命令用于在key存在是删除key |

查看所有的key值

复制代码
> keys *
set1
key1
person
zset1
name
set2
100
mylist

查看key的类型

复制代码
> type 100
hash

判断key存不存在

复制代码
> EXISTS 100
1

删除key值

复制代码
> del 100
1

四:在Java中操作Redis

4.1:Redis的Java客户端

1:Jedis

2:Lettuce:基于多线程实现的redis

3:Spring Data Redis:将jedis和Lettuce进行高度封装。

4.2:Spring Data Redis使用方式

操作步骤

4.2.1:导入Spring Data Redis 的maven坐标

XML 复制代码
  <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
                <version>2.7.3</version>
  </dependency>

4.2.2:配置Redis数据源:可以配置database(默认是0-15个库)

XML 复制代码
spring:
  redis:
    host: localhost
    port: 6379

4.2.3:编写配置类,创建RedisTemplate对象

java 复制代码
@Configuration
@Slf4j
public class RedisConfiguration {
    //返回的是一个RedisTemplate对象,并且添加redis连接的工厂
    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
        log.info("开始创建redis模板对象");
        RedisTemplate redisTemplate = new RedisTemplate();
        //设置redis的连接工厂对象
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置redis的序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}

生成测试类:

java 复制代码
@SpringBootTest
class RedisConfigurationTest {
    @Autowired
    private RedisTemplate redisTemplate;

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

4:通过RedisTemplate对象操作Redis

4.3:5种类型操作方式

4.3.1:字符串指令在Java中的使用

在测试类中使用:

java 复制代码
   @Test
    public void testString(){
        //set get setex setnx
        ValueOperations valueOperations = redisTemplate.opsForValue();
        valueOperations.set("city","北京");
        String  city =(String) valueOperations.get("city");
        System.out.println(city);
        valueOperations.set("code","1234",3, TimeUnit.MINUTES);
        //setNx
        valueOperations.setIfAbsent("lock",1);
        valueOperations.setIfAbsent("lock",1);
    }

4.3.2:哈希指令在Java中的使用

java 复制代码
 @Test
    public void testHash(){
        //hset  
        HashOperations hashOperations = redisTemplate.opsForHash();
        hashOperations.put("Person","name","张三");
        hashOperations.put("Person","age",20);
        //hget
        String  name = (String)hashOperations.get("Person", "name");
        //删除hash中对应的key
        Set person = hashOperations.keys("Person");
        System.out.println(person);
        List person1 = hashOperations.values("Person");
        System.out.println(person1);
        hashOperations.delete("Person","age");
    }

4.3.3:列表指令在Java中的使用

java 复制代码
  @Test
    public void testList(){
        ListOperations listOperations = redisTemplate.opsForList();
        //lput
        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 mylist1 = listOperations.size("mylist");
        System.out.println(mylist1);
    }

4.3.4:无序集合指令在java中的使用

java 复制代码
  @Test
    public void testSet(){
        SetOperations setOperations = redisTemplate.opsForSet();
        //sadd
        setOperations.add("set1","a","b","c","d");
        setOperations.add("set2","a","b","c","y");
        //smember 获取集合中的所有成员
        Set set1 = setOperations.members("set1");
        System.out.println(set1);
        //ssize 获取集合中成员的个数
        Long set11 = setOperations.size("set1");
        System.out.println(set11);
        //求两个集合中的交集
        Set intersect = setOperations.intersect("set1", "set2");
        System.out.println(intersect);
        //求两个集合的并集
        Set union = setOperations.union("set1", "set2");
        System.out.println(union);
        //删除集合中的元素
        setOperations.remove("set1","a");
    }

运行结果:

4.3.5:有序集合在Java中的使用

java 复制代码
 @Test
    void testZset(){
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
        //zadd
        zSetOperations.add("zset1","a",10.0);
        zSetOperations.add("zset1","b",10.1);
        zSetOperations.add("zset1","c",10.2);
        //zrange
        zSetOperations.range("zset1",0,-1);
        //zincrby
        zSetOperations.incrementScore("zset1","c",10);
        //zream
        zSetOperations.remove("zset1","a");
    }

4.3.6:通用命令

java 复制代码
 @Test
    void testCommon(){
       //判断有没有包含某个字符的key值
        Set keys = redisTemplate.keys("*");
        System.out.println(keys);
        //hasKey判断有没有key
        Boolean zset11 = redisTemplate.hasKey("zset1");
        System.out.println(zset11);
        DataType zset1 = redisTemplate.type("zset1");
        System.out.println(zset1);
        redisTemplate.delete("mylist");
    }
相关推荐
IT项目管理31 分钟前
达梦数据库DMHS介绍及安装部署
linux·数据库
你都会上树?38 分钟前
MySQL MVCC 详解
数据库·mysql
大春儿的试验田44 分钟前
高并发收藏功能设计:Redis异步同步与定时补偿机制详解
java·数据库·redis·学习·缓存
likeGhee1 小时前
python缓存装饰器实现方案
开发语言·python·缓存
hqxstudying1 小时前
Redis为什么是单线程
java·redis
C182981825751 小时前
OOM电商系统订单缓存泄漏,这是泄漏还是溢出
java·spring·缓存
Ein hübscher Kerl.1 小时前
虚拟机上安装 MariaDB 及依赖包
数据库·mariadb
醇醛酸醚酮酯2 小时前
Qt项目锻炼——TODO清单(二)
开发语言·数据库·qt
GreatSQL社区2 小时前
用systemd管理GreatSQL服务详解
数据库·mysql·greatsql
掘根2 小时前
【MySQL进阶】错误日志,二进制日志,mysql系统库
数据库·mysql