redis安装包及图形化软件:
百度链接:https://pan.baidu.com/s/1wljo7JzgrSQyqldv9d5HZA?pwd=ht1m
提取码:ht1m
目录
1.redis的下载及安装
1.1redis的启动与停止
1.2Redis服务启动与停止
2.redis数据类型及常用指令
2.1redis数据类型
2.2redis常用指令
3.redis在java中的使用
3.1使用步骤
4.通过RedisTemplate对象操作Redis
(1).String类型数据的操作
(2).hash类型数据的操作
(3).List类型数据的操作
(4).ZSet类型数据的操作
(5).Set类型数据的操作
(6).通用指令的操作
redis介绍:Redis是一个基于内存的 key-value 结构数据库。
- 基于内存存储,读写性能高
- 适合存储热点数据(热点商品、资讯、新闻)
- 企业应用广泛
官网:https://redis.io
中文网:https://www.redis.net.cn/
1.redis的下载及安装
Windows版下载地址:https://github.com/microsoftarchive/redis/releases
redis的windows版属于绿色软件,直接解压即可使用
-
1.1redis的启动与停止
服务启动命令:redis-server.exe redis.windows.conf
Redis服务默认端口号为 6379 ,通过快捷键Ctrl + C 即可停止Redis服务
-
1.2Redis服务启动与停止
客户端连接命令:redis-cli.exe
通过redis-cli.exe命令默认连接的是本地的redis服务,并且使用默认6379端口。也可以通过指定如下参数连接:
-h ip地址
-p 端口号
-a 密码(如果需要)
设置Redis服务密码,修改redis.windows.conf
Redis客户端图形工具:
连接后可以看到你redis中的数据,前提是redis服务需要一直开启
2.redis数据类型及常用指令
2.1redis数据类型
Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型:类型
类型 | 说明 |
字符串(string) | 普通字符串,Redis中最简单的数据类型 |
哈希(hash) | 也叫散列,类似于Java中的HashMap结构 |
列表(list) | 按照插入顺序排序,可以有重复元素,类似于Java中的LinkedList |
集合(set) | 无序集合,没有重复元素,类似于Java中的HashSet |
有序集合(sorted set / zset) | 集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素 |
2.2redis常用指令
- 字符串常用命令
命令 | 说明 |
SET key value | 设置指定key的值 |
GET key | 获取指定key的值 |
SETEX key seconds value | 设置指定key的值,并将 key 的过期时间设为 seconds 秒 |
SETNX key value | 只有在 key 不存在时设置 key 的值 |
- 哈希常用命令
Redis hash 是一个string类型的 field 和 value 的映射表,hash特别适合用于存储对象
命令 | 说明 |
HSET key field value | 将哈希表 key 中的字段 field 的值设为 value |
HGET key field | 获取存储在哈希表中指定字段的值 |
HDEL key field | 删除存储在哈希表中的指定字段 |
HKEYS key | 获取哈希表中所有字段 |
HVALS key | 获取哈希表中所有值 |
- 列表常用命令
Redis 列表是简单的字符串列表,按照插入顺序排序
命令 | 说明 |
LPUSH key value1 [value2] | 将一个或多个值插入到列表头部(左边) |
LRANGE key start stop | 获取列表指定范围内的元素 |
RPOP key | 移除并获取列表最后一个元素(右边) |
LLEN key | 获取列表长度 |
- 集合常用命令
Redis set 是string类型的无序集合。集合成员是唯一的,集合中不能出现重复的数据
命令 | 说明 |
SADD key member1 [member2] | 向集合添加一个或多个成员 |
SMEMBERS key | 返回集合中的所有成员 |
SCARD key | 获取集合的成员数 |
SINTER key1 [key2] | 返回给定所有集合的交集 |
SUNION key1 [key2] | 返回所有给定集合的并集 |
SREM key member1 [member2] | 删除集合中一个或多个成员 |
- 有序列表命令
Redis有序集合是string类型元素的集合,且不允许有重复成员。每个元素都会关联一个double类型的分数
命令 | 说明 |
ZADD key score1 member1 [score2 member2] | 向有序集合添加一个或多个成员 |
ZRANGE key start stop [WITHSCORES] | 通过索引区间返回有序集合中指定区间内的成员 |
ZINCRBY key increment member | 有序集合中对指定成员的分数加上增量 increment |
ZREM key member [member ...] | 移除有序集合中的一个或多个成员 |
- 通用指令
Redis的通用命令是不分数据类型的,都可以使用的命令
命令 | 说明 |
KEYS pattern | 查找所有符合给定模式( pattern)的 key |
EXISTS key | 检查给定 key 是否存在 |
TYPE key | 返回 key 所储存的值的类型 |
DEL key | 该命令用于在 key 存在是删除 key |
3.redis在java中的使用
3.1使用步骤
- 1.导入Spring Data Redis 的maven坐标
<!--SpringDataRedis起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
- 2.配置Redis数据源
在resources的application.yml配置文件里面编写redis的配置信息
- 3.编写配置类,创建RedisTemplate对象
在config文件下创建Bean对象,springboot项目启动时,会自动将RedisTemplate放入IOC容器内
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
@Slf4j
public class RedisConfiguration {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
log.info("开始创建redis模板对象...");
RedisTemplate redisTemplate = new RedisTemplate();
//设置redis的连接工厂对象
redisTemplate.setConnectionFactory(redisConnectionFactory);
//设置redis key的序列化器
redisTemplate.setKeySerializer(new StringRedisSerializer());
return redisTemplate;
}
}
-
4.通过RedisTemplate对象操作Redis
可以编写一个测试类,在测试类里面实现对各个redis数据类型的操作
需要先将RedisTemplate对象从ioc容器中拿出来使用
使用RedisTemplate创建各个数据类型对象
@Test
public void testRedisTemplate(){
//生成的对象可对字符串操作
ValueOperations valueOperations = redisTemplate.opsForValue();
//生成的对象可对哈希表操作
HashOperations hashOperations = redisTemplate.opsForHash();
//生成的对象可对列表操作
ListOperations listOperations = redisTemplate.opsForList();
//生成的对象可对集合操作
SetOperations setOperations = redisTemplate.opsForSet();
//生成的对象可对有序列表操作
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
}
(1).String类型数据的操作
//操作redis中string类型的数据
@Test
public void testString(){
//SET key value 设置指定key的值
redisTemplate.opsForValue().set("name","张三");
//GET key 获取指定key的值
String name = (String) redisTemplate.opsForValue().get("name");
System.out.println(name);
//SETEX key seconds value 设置指定key的值,并将 key 的过期时间设为 seconds 秒
redisTemplate.opsForValue().set("code","1234",3, TimeUnit.MINUTES);
//SETNX key value只有在 key 不存在时设置 key 的值
redisTemplate.opsForValue().setIfAbsent("code","23455");
}
(2).hash类型数据的操作
//操作hash类型的数据
@Test
public void testHash(){
//hset hget hdel hkeys hvals
HashOperations hashOperations = redisTemplate.opsForHash();
hashOperations.put("100","name","lisi");
hashOperations.put("100","age","10");
String name = (String) hashOperations.get("100", "name");
System.out.println(name);
Set keys = hashOperations.keys("100");
System.out.println(keys);
List values = hashOperations.values("100");
System.out.println(values);
hashOperations.delete("100","name","age");
}
(3).List类型数据的操作
//操作List类型的数据
@Test
public void testList(){
//lpush lrange rpop llen
ListOperations listOperations = redisTemplate.opsForList();
listOperations.leftPushAll("001","a","b","c");
listOperations.leftPush("001","d");
List range = listOperations.range("001", 0, -1);
System.out.println(range);
listOperations.rightPop("001");
Long size = listOperations.size("001");
System.out.println(size);
}
(4).ZSet类型数据的操作
//操作ZSet类型的数据
@Test
public void testZset(){
//zadd zrange zincrby zrem
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
zSetOperations.add("zset1","a",10);
zSetOperations.add("zset1","b",10.2);
zSetOperations.add("zset1","c",10.5);
Set zset1 = zSetOperations.range("zset1", 0, -1);
System.out.println(zset1);
zSetOperations.incrementScore("zset1","c",10);
zSetOperations.remove("zset1","a","b");
}
(5).Set类型数据的操作
//操作set类型的数据
@Test
public void testSet(){
//sadd smembers scard sinter sunion srem
SetOperations setOperations = redisTemplate.opsForSet();
setOperations.add("set1","a","b","c","d");//向集合中添加元素
setOperations.add("set2","c","d","e","f");
Set set1 = setOperations.members("set1"); //返回集合中所有的成员
System.out.println(set1);
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","b");//删除集合中的某个元素
}
(6).通用指令的操作
//redis通用指令
@Test
public void testRedis(){
//keys exisit type key del
Set keys = redisTemplate.keys("*");//查询所有的key
System.out.println(keys);
Boolean name = redisTemplate.hasKey("name");//查询是否存在这个key
Boolean set1 = redisTemplate.hasKey("set1");
for(Object key : keys){
DataType type = redisTemplate.type(key);//便利keys 查看每个key的类型
System.out.println(type.name());
}
}