Redis基础入门

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis基础入门

一: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坐标

<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个库)

spring:
  redis:
    host: localhost
    port: 6379

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

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

生成测试类:

@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中的使用

在测试类中使用:

@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中的使用

@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中的使用

@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中的使用

@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中的使用

@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:通用命令

@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");
    }

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2月前
|
SQL 存储 NoSQL
Redis6入门到实战------ 一、NoSQL数据库简介
这篇文章是关于NoSQL数据库的简介,讨论了技术发展、NoSQL数据库的概念、适用场景、不适用场景,以及常见的非关系型数据库。文章还提到了Web1.0到Web2.0时代的技术演进,以及解决CPU、内存和IO压力的方法,并对比了行式存储和列式存储数据库的特点。
Redis6入门到实战------ 一、NoSQL数据库简介
|
2月前
|
NoSQL 算法 安全
Redis6入门到实战------ 四、Redis配置文件介绍
这篇文章详细介绍了Redis配置文件中的各种设置,包括单位定义、包含配置、网络配置、守护进程设置、日志记录、密码安全、客户端连接限制以及内存使用策略等。
Redis6入门到实战------ 四、Redis配置文件介绍
|
2月前
|
NoSQL Redis 数据安全/隐私保护
Redis6入门到实战------ 二、Redis安装
这篇文章详细介绍了Redis 6的安装过程,包括下载、解压、编译、安装、配置以及启动Redis服务器的步骤。还涵盖了如何设置Redis以在后台运行,如何为Redis设置密码保护,以及如何配置Redis服务以实现开机自启动。
Redis6入门到实战------ 二、Redis安装
|
2月前
|
NoSQL Java Redis
Redis6入门到实战------思维导图+章节目录
这篇文章提供了Redis 6从入门到实战的全面学习资料,包括思维导图和各章节目录,涵盖了NoSQL数据库、Redis安装配置、数据类型、事务、持久化、主从复制、集群等核心知识点。
Redis6入门到实战------思维导图+章节目录
|
2月前
|
NoSQL 安全 Java
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)
这篇文章深入探讨了Redis中的String数据类型,包括键操作的命令、String类型的命令使用,以及String在Redis中的内部数据结构实现。
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)
|
2月前
|
NoSQL 关系型数据库 Redis
Redis6入门到实战------ 九、10. Redis_事务_锁机制_秒杀
这篇文章深入探讨了Redis事务的概念、命令使用、错误处理机制以及乐观锁和悲观锁的应用,并通过WATCH/UNWATCH命令展示了事务中的锁机制。
Redis6入门到实战------ 九、10. Redis_事务_锁机制_秒杀
|
2月前
|
NoSQL Java Redis
Redis6入门到实战------ 八、Redis与Spring Boot整合
这篇文章详细介绍了如何在Spring Boot项目中整合Redis,包括在`pom.xml`中添加依赖、配置`application.properties`文件、创建配置类以及编写测试类来验证Redis的连接和基本操作。
Redis6入门到实战------ 八、Redis与Spring Boot整合
|
2月前
|
存储 NoSQL 算法
Redis6入门到实战------ 三、常用五大数据类型(列表(List)、集合(Set)、哈希(Hash)、Zset(sorted set))
这是关于Redis 6入门到实战的文章,具体内容涉及Redis的五大数据类型:列表(List)、集合(Set)、哈希(Hash)、有序集合(Zset(sorted set))。文章详细介绍了这些数据类型的特点、常用命令以及它们背后的数据结构。如果您有任何关于Redis的具体问题或需要进一步的帮助,请随时告诉我。
|
2月前
|
NoSQL Java Linux
Redis6入门到实战------ 六、Redis_Jedis_测试
这篇文章介绍了如何使用Jedis客户端连接Redis,并进行基本的数据类型操作测试,包括字符串、列表、集合、哈希和有序集合的相关API使用示例。
Redis6入门到实战------ 六、Redis_Jedis_测试
|
2月前
|
NoSQL Redis
Redis6入门到实战------ 五、Redis的发布和订阅
这篇文章介绍了Redis的发布和订阅机制,包括其基本概念、客户端如何订阅频道以及如何发布消息给订阅者。