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");
    }
相关推荐
云和数据.ChenGuang4 小时前
Django 应用安装脚本 – 如何将应用添加到 INSTALLED_APPS 设置中 原创
数据库·django·sqlite
woshilys4 小时前
sql server 查询对象的修改时间
运维·数据库·sqlserver
Hacker_LaoYi4 小时前
SQL注入的那些面试题总结
数据库·sql
建投数据5 小时前
建投数据与腾讯云数据库TDSQL完成产品兼容性互认证
数据库·腾讯云
Hacker_LaoYi6 小时前
【渗透技术总结】SQL手工注入总结
数据库·sql
岁月变迁呀6 小时前
Redis梳理
数据库·redis·缓存
独行soc6 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
你的微笑,乱了夏天7 小时前
linux centos 7 安装 mongodb7
数据库·mongodb
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭7 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
工业甲酰苯胺7 小时前
分布式系统架构:服务容错
数据库·架构