Redis入门
什么是redis
redis是基于内存的数据结构存储系统,是一种非关系型、高性能键值对数据库。
redis的应用场景
缓存、任务队列、消息队列、分布式锁…
redis的数据结构
redis一共有五种数据结构
①String
SET key value:设置key和value
GET key value:获取key和value
SETNX key seconds value:设置key的过期时间
SETNX key value:value的值为第一次设置key的value值
②Hash
HSET key filed value:在key中的filed字段设置value
HGET key filed:获取key中filed字段的value值
HDEL key filed:删除key中filed字段的value值
HKEYS key:获取hash表中的所有字段
HVALS key:获取hash表中的所有值
HGETALL key:获取hash表中所有指定key的字段和值
③List
LPUSH key value1:将一个或多个值插入列表的头部
LRANGE key start stop:获取列表指定范围内的元素
RPOP key:移除列表最后一个元素并返回
LLEN key:获取列表长度
BRPOP key timeout:移除最后一个元素并返回,如果列表没有元素则会堵塞列表一直等待或者是弹出元素
④Set
无序、唯一
SADD key num1 :向集合中添加元素
SMEMBERS:返回集合中的所有元素
SCARD key:获取集合中的元素
SINTER key1 key2:返回集合的交集
SUNION key1 key2:返回集合中的并集
SDIFF key1 key2:返回集合中的差集
SREM key num1 num2:移除集合中的元素
⑤sorted set
有序,根据double打分来排序
ZADD key score1 num1 :向集合中添加元素
ZRANGE key start stop:返回区间内的元素
ZINCRBY key increment num:在指定元素上加分
ZREM:删除一个或多个元素
通用命令
KEYS pattern:查找索引符合给定pattern 的key
EXISTS key:检查给定key是否存在
TYPE key:返回key 的类型
TTL key:返回剩下存活时间
DEL key:删除key
Spring Data Redis
①导入依赖
②配置yml
③注入序列化器
代码中存入的key与redis中的key不一致,需要配置RedisConfig将存入的key与redis中的key保持一致
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
//默认的Key序列化器为:JdkSerializationRedisSerializer
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(connectionFactory);
return redisTemplate;
}
操作String类型数据
//String类型
@Test
public void testString(){
//存值
redisTemplate.opsForValue().set("city","beijing");
//取值
String city = (String) redisTemplate.opsForValue().get("city");
System.out.println(city);
//设置时间
redisTemplate.opsForValue().set("key1","value1",101, TimeUnit.SECONDS);
//存值,如果值存在则不进行任何操作 setex
Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("city", "beijing");
System.out.println(aBoolean);
}
操作hash类型数据
//操作hash类型
@Test
public void testHash(){
//存值
HashOperations hashOperations = redisTemplate.opsForHash();
hashOperations.put("001","name","xiaoming");
hashOperations.put("001","age","15");
hashOperations.put("001","address","beijing");
//取值(获取hash结构中的所有字段)
Set keys = hashOperations.keys("001");
for (Object key : keys) {
System.out.println(key);
}
//取值(获取hash结构中所有值)
List values = hashOperations.values("001");
k
for (Object value : values) {
System.out.println(value);
}
}
操作List类型数据
//操作List类型
@Test
public void testList() {
ListOperations listOperations = redisTemplate.opsForList();
//存值(根据插入顺序进行排序)
listOperations.leftPush("myList","a");
listOperations.leftPushAll("myList","b","c");
List<String> mylist = listOperations.range("myList", 0, -1);
for (String value : mylist) {
System.out.println(value);
}
//获取长度
Long size = listOperations.size("myList");
int listSize = size.intValue();
//出队列
for (int i = 0; i < listSize; i++) {
String element = (String) listOperations.rightPop("myList");
System.out.println(element);
}
}
操作set类型数据
//操作set类型的数据
@Test
public void testSet(){
SetOperations setOperations = redisTemplate.opsForSet();
//存值
setOperations.add("mySet","a","b","c");
//取值
Set mySet = setOperations.members("mySet");
for (Object o : mySet) {
System.out.println(o);
}
//删除
setOperations.remove("mySet","a","b");
}
操作ZSet类型数据
//有序集合类型数据
public void ZSet(){
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
//存值
zSetOperations.add("myZSet","a",10.0);
zSetOperations.add("myZSet","b",11.0);
zSetOperations.add("myZSet","c",12.0);
//取值
Set<String> myZSet = zSetOperations.range("myZSet", 0, -1);
for (String s : myZSet) {
System.out.println(s);
}
//修改分数
zSetOperations.incrementScore("mySet","b",13.0);
//取值
myZSet = zSetOperations.range("myZSet",0,-1);
for (String s : myZSet) {
System.out.println(s);
}
//删除
zSetOperations.remove("myZSet","a","b");
//取值
myZSet = zSetOperations.range("myZSet",0,-1);
for (String s : myZSet) {
System.out.println(s);
}
}
通用操作不用数据类型
//操作不同的数据类型
@Test
public void testCommon(){
Set<String> keys = redisTemplate.keys("*");
for (String key : keys) {
System.out.println(key);
}
//判断某个key是否存在
Boolean key1 = redisTemplate.hasKey("key1");
System.out.println(key1);
//删除指定的key
redisTemplate.delete("myZSet");
//获取指定key对应的value数据类型
DataType dataType = redisTemplate.type("mySet");
System.out.println(dataType.name());
}