Redis入门

一、简介

Redis是一个基于内存的key - value结构数据库,是非线性数据库

与Mysql的区别在哪?

  • Mysql是将数据以数据文件的方式存储在磁盘上,是磁盘存储。而Redis是内存存储
  • Mysql是以二维表的方式存放数据,而Redis是以键值对的方式存放数据 

既然都是数据库,已经使用了Mysql为什么还要使用Redis

  • 基于内存存储,读写性能高
  •  适合存储热点数据(热点商品、资讯、新闻)
  • Redis不是用来取代Mysql的,而是来补充Mysql的。一般都是Mysql与Redis同时使用
  • 企业广泛应用

特点

  • 方便拓展(数据之间无关系,方便拓展)
  • 大数据高性能(Redis一秒写8w次,读11w条数据)
  • 数据类型是多样型的(无需事先设计数据库,随取随用)

如用户的个人信息,地理位置这些数据类型不需要一个固定的格式,不需要多余的操作就可以横向拓展,如Map


二、使用

Redis安装包分为Windows版和Linux版,一般都是使用Linux版本,将Redis部署在Linux版本上。

Windows版

1、Github下载地址:Releases · microsoftarchive/redis · GitHub

2、解压缩

Redis入门_第1张图片

3、运行服务 

在解压后文件夹中cmd输入

redis-server redis.windows.conf

Redis入门_第2张图片

4、连接 

双击

 Redis入门_第3张图片

它会默认连接本地的Redis,且默认端口号为6379。127.0.0.1就是localhost

如果此时想要连接远程的redis,那么就要在命令行窗口cmd中使用指令

redis-cli.exe -h [ 主机IP ] -p [端口号]

Redis入门_第4张图片

5、图形化界面连接

打开Redis Desktop Manager 

Redis入门_第5张图片

测试

Redis入门_第6张图片

连接成功 

修改配置信息

此时的redis没有设置密码,任何人都可以连接进来,这并不安全。因此我们要去配置文件redis.windows.conf文件中修改

先关闭redis服务,查找requirepass配置项,后面配置密码

也可以修改默认端口号,查找port配置项,一般都使用这个默认的端口号就行了

保存后再来启动redis服务

Redis入门_第7张图片

那么之后连接redis时就会要求输入密码。与Mysql不同的是,Redis并没有用户的概念,不像Mysql连接的时候一样要输入用户名和密码才行,redis只需要输入密码即可。

此时我们尝试直接连接redis,发现不能ping成功,报错说需要认证

Redis入门_第8张图片

因此需要在连接的时候在指令后面加上选项-a

redis-cli.exe -a [密码]

Redis入门_第9张图片

连接成功

图形化操作界面

gitee下载地址:AnotherRedisDesktopManager 发行版 - Gitee.com

这里使用的工具是AnotherRedisDesktopManager,相较于传统的RedisDesktopManager,性能更加出众,界面也更加美观

Redis入门_第10张图片

Redis入门_第11张图片


三、Redis常用数据类型

再次强调,Redis存储的是key-value结构的数据,其中key一定是字符串类型,而value有5种常用的类型

Redis入门_第12张图片

1、字符串类型

普通字符串,Redis中最简单的数据类型

2、哈希类型

散列,类似于Java中的HashMap结构,上图中可以看到它也是键值对方式

这种结构一般可以用来存储对象,如key就是对象,则value中的key1就是属性,value中的value1就是属性对应的值

3、列表类型

队列,按照插入顺序排列,可以有重复的元素,类似于java中的List。

4、集合类型

又叫无序集合,没有重复元素,类似Java中的HashSet

5、有序集合

集合中每个元素关联一个分数,根据分数升序排序,没有重复元素

这种结构适合存储排行榜一类有顺序的数据

数据操作指令

与Mysql操作数据不同,Mysql不同数据的增删改查都用一个指令,比如插入就直接insert,并不在乎插入的是什么类型。

而Redis不同的数据类型所对应的指令是不一样的。

1、字符串操作指令

指令 作用
set key value 设置指定key的值
get key 获取指定key的值
setex key seconds value 设置指定key的值,并将key的过期时间设置为seconds秒
setnx key value 只有key不存在时才设置key的值并返回1,否则返回0
del key 删掉这整个指定的字符串

Redis入门_第13张图片

2、哈希操作指令

指令 作用
hset key field value 将哈希表key中字段field的值设为value
hget key field 获取存储在哈希表中指定字段的值
hdel key field 删除存储在哈希表中的指定字段
hkeys key 获取哈希表中的所有字段
hvals key 获取哈希表中的所有值
del key 删除掉这整个哈希表

 

 

3、 列表操作指令

指令 作用
lpush key value [value2] 将一个或多个值插入到列表头部
lrange key start stop 获取列表指定范围内的元素(类似分页查询)
rpop key 移除并返回列表的最后一个元素
llen key 获取列表长度

同样创建一个列表,其中存放三个值 a b c

那么此时列表的数据长这个样子

Redis入门_第14张图片

这就是队列的插入方式,在列表头部插入,而不是像java的arrayList尾部插入,再插入几条数据就清晰了

Redis入门_第15张图片

此时最一开始先插入的a就是尾部,rpop移除的就是它了

Redis入门_第16张图片

4、集合操纵命令

指令 作用
sadd key member1 [member2] ... 向集合中添加一个或多个成员
smembers key 返回集合中的所有成员
scard key 获取集合中成员数
sinter key1 [key2] 返回给定所有集合的交集
sunion key1 [key2] 返回给定所有集合的并集
srem key member1 [member2] 删除集合中一个或多个成员

5、 有序集合操纵命令

指令 作用
zadd key score1 member1 [score2 member2] 向有序集合添加一个或多个成员
zrange key start stop [WITHSCORES] 向索引区间返回有序集合中指定区间内的成员,withscores就是将分数也带上
ZINCRBY key increment member 有序集合中对指定成员的分数加上增量increment
zrem key member [member...] 移除有序集合中的一个或多个成员

6、通用命令

  指令 作用
keys pattern 查找所有符合给定模式(pattern)的key
keys * 就是上一个指令 * 表示全部类型的key
exists key 检查给定key是否存在
type key 返回key所储存的值的类型
del key 当key存在时删除key

 


 

四、在Java中操作redis

Redis的Java客户端

  • Jedis
  • Lettuce
  • Spring Data Redis

Spring Data Redis时Spring的一部分,对Redis底层开发包进行了高度封装。

在Spring项目中,可以使用Spring Data Redis进行简化开发。

操作步骤

引入依赖

        
            org.springframework.boot
            spring-boot-starter-data-redis
        

 

配置Redis数据源 

spring:  
   redis:
    host: localhost
    port: 6379
    password: 123456
    database: 0

注意这个database属性代表的是数据库,redis中有16个数据库,每个库中的数据是完全不互通的

Redis入门_第17张图片

创建一个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;
    }
}

测试

    @Test
    public void testRedisTemplate(){
        System.out.println(redisTemplate);
    }

连接成功 

你可能感兴趣的:(redis,数据库,缓存)