Redis是一个基于内存的key - value结构数据库,是非线性数据库
与Mysql的区别在哪?
既然都是数据库,已经使用了Mysql为什么还要使用Redis
如用户的个人信息,地理位置这些数据类型不需要一个固定的格式,不需要多余的操作就可以横向拓展,如Map
Redis安装包分为Windows版和Linux版,一般都是使用Linux版本,将Redis部署在Linux版本上。
1、Github下载地址:Releases · microsoftarchive/redis · GitHub
2、解压缩
3、运行服务
在解压后文件夹中cmd输入
redis-server redis.windows.conf
4、连接
双击
它会默认连接本地的Redis,且默认端口号为6379。127.0.0.1就是localhost
如果此时想要连接远程的redis,那么就要在命令行窗口cmd中使用指令
redis-cli.exe -h [ 主机IP ] -p [端口号]
5、图形化界面连接
打开Redis Desktop Manager
测试
连接成功
此时的redis没有设置密码,任何人都可以连接进来,这并不安全。因此我们要去配置文件redis.windows.conf文件中修改
先关闭redis服务,查找requirepass配置项,后面配置密码
也可以修改默认端口号,查找port配置项,一般都使用这个默认的端口号就行了
保存后再来启动redis服务
那么之后连接redis时就会要求输入密码。与Mysql不同的是,Redis并没有用户的概念,不像Mysql连接的时候一样要输入用户名和密码才行,redis只需要输入密码即可。
此时我们尝试直接连接redis,发现不能ping成功,报错说需要认证
因此需要在连接的时候在指令后面加上选项-a
redis-cli.exe -a [密码]
连接成功
gitee下载地址:AnotherRedisDesktopManager 发行版 - Gitee.com
这里使用的工具是AnotherRedisDesktopManager,相较于传统的RedisDesktopManager,性能更加出众,界面也更加美观
再次强调,Redis存储的是key-value结构的数据,其中key一定是字符串类型,而value有5种常用的类型
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 | 删掉这整个指定的字符串 |
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
那么此时列表的数据长这个样子
这就是队列的插入方式,在列表头部插入,而不是像java的arrayList尾部插入,再插入几条数据就清晰了
此时最一开始先插入的a就是尾部,rpop移除的就是它了
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 |
Redis的Java客户端
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的配置类
@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);
}
连接成功