一.Redis概述
1.概述:Redis是一个基于内存的key-vaule结构数据库
2.特点:
a.基于内存存储,读写性能高
b.适合存储热点数据(热点新闻,咨询)
c.企业应用广泛
3.安装:window,linux两个版本,傻瓜式安装
4.启动
服务端:redis-server.exe redis.windows.conf
客户端:redis-cli.exe
redis-cli.exe -h localhost -p 6379
二.Redis数据类型
5种常用的数据类型
- 字符串 string
- 哈希 hash
- 列表 list
- 集合 set
- 有序集合 sorted set

三.Redis常用命令
-
字符串操作命令
SET key value 设置指定key的值
GET key 获取指定key的值
SETEX key seconds value 设置指定key的值,并将key的过期时间设置为seconds秒
SETNX key value 只有key不存在时设置key的值 -
哈希操作命令
HSET key field value 将哈希表key的字段filed的值设置为value
HGET key field 获取哈希表中指定的字段
HDEL key field 删除哈希表中指定的字段
HKEYS key 获取哈希表中所有的字段
HVALS key 获取哈希表的所有的值 -
列表操作命令
LPUSH key value1[value2] 将一个或者多个值插入列表的头部
LRANGE key start stop 获取列表指定范围内的元素
RPOP key 移除并获取列表最后一个元素
LLEM key 获取列表长度 -
集合操作命令
SADD key member1[member2] 向集合添加一个或多个成员
SMEMBERS key 返回集合中的所有成员
SCARD key 获取集合的成员数
SINTER key1 [key2] 返回给定所有集合的交集
SUNION key1 [key2] 返回所有给定集合的并集
SREM key member1 [member2] 删除集合中一个或多个成员 -
有序集合操作命令
ZADD key score1 member1[score2 member2] 向有序集合添加一个或多个成员
ZRANGE key start stop[WITHSCORES] 通过索引区间返回有序集合中指定区间的成员
ZINGCRBY key increment member 有序集合中对指定成员的分数上加入增量increment
ZREM key memberp[member...] 移除有序集合中的一个或者多个成员 -
通用命令
KEYS pattern 查找所有符合给定模式的key
EXISTS key 检查给定的key是否存在
TYPE key 返回key所存储的值的类型
DEL key key存在时删除key
四.在java中操作Redis
Redis的java客户端
Jedis
Lettuce
Spring Data Redis是Spring的一部分,对redis进行高度封装
Spring Data Redis的使用方式:
1.导入Spring Data Redis的maven坐标
2.配置Redis数据源
3.编写配置类,创建RedisTemplate对象
4.通过RedisTemplate对象操作Redis
spring:
redis:
host: ${sky.redis.host}
port: ${sky.redis.port}
database: ${sky.redis.database}
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;
}
}
package com.sky.test;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.connection.DataType;
import org.springframework.data.redis.core.*;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@SpringBootTest
public class springboottest {
@Autowired
private RedisTemplate redisTemplate;
@Test
public void test() {
System.out.println(redisTemplate);
ValueOperations ValueOperations = redisTemplate.opsForValue();
HashOperations HashOperations = redisTemplate.opsForHash();
ListOperations ListOperations = redisTemplate.opsForList();
SetOperations SetOperations = redisTemplate.opsForSet();
ZSetOperations ZSetOperations = redisTemplate.opsForZSet();
}
/**
* 操作字符串的数据
*/
@Test
public void testString(){
//set get setex setnx
redisTemplate.opsForValue().set("city","北京");
System.out.println(redisTemplate.opsForValue().get("city"));
redisTemplate.opsForValue().set("code","1234",3, TimeUnit.MINUTES);
redisTemplate.opsForValue().setIfAbsent("lock","1");
}
/**
* 操作哈希类型的数据
*/
@Test
public void testHash(){
//hset hget hkeys hvals
HashOperations HashOperations = redisTemplate.opsForHash();
HashOperations.put("100","name","TOM");
HashOperations.put("100","age","20");
String name = (String) HashOperations.get("100","name");
System.out.println(name);
Set keys =HashOperations.keys("100");
System.out.println(keys);
List value = HashOperations.values("100");
System.out.println(value);
HashOperations.delete("100","name");
}
/**
* 操作列表类型的数据
*/
@Test
public void testList(){
ListOperations listOperations = redisTemplate.opsForList();
listOperations.leftPushAll("mylist","a","b","c");
listOperations.leftPush("mylist","d");
List mlist = listOperations.range("mylist", 0, -1);
System.out.println(mlist);
listOperations.rightPop("mylist");
Long size = listOperations.size("mylist");
System.out.println(size);
}
/**
* 操作集合类型的数据
*/
@Test
public void testSet(){
SetOperations setOperations = redisTemplate.opsForSet();
setOperations.add("myset","a","b","c");
setOperations.add("myset2","a","d");
Set mset = setOperations.members("myset");
System.out.println(mset);
Long size = setOperations.size("myset");
System.out.println(size);
Set intersect = setOperations.intersect("myset","myset2");
System.out.println(intersect);
Set union = setOperations.union("myset","myset2");
System.out.println(union);
}
/**
* 操作有序集合类型的数据
*/
@Test
public void testZset(){
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
zSetOperations.add("zset1","a",10);
zSetOperations.add("zset1","b",20);
zSetOperations.add("zset1","c",30);
Set zset = zSetOperations.range("zset1", 0, -1);
System.out.println(zset);
zSetOperations.incrementScore("zset1","b",30);
zSetOperations.remove("zset1","a");
Set zset2 = zSetOperations.range("zset1", 0, -1);
System.out.println(zset2);
}
/**
* 操作通用命令
*/
@Test
public void testcommon(){
Set keys = redisTemplate.keys("*");
System.out.println(keys);
Boolean name = redisTemplate.hasKey("name");
Boolean age = redisTemplate.hasKey("set1");
for (Object key : keys) {
DataType type = redisTemplate.type(key);
System.out.println(type.name());
}
redisTemplate.delete("mylist");
}
}