文章目录
- 1.Redis简介
- 2.Redis的常用数据类型
- 3.Redis的常用命令
- 1.字符串操作命令
- 2.哈希操作命令
- 3.列表操作命令
- 4.集合操作命令
- 5.有序集合操作命令
- 6.通用操作命令
- 4.Springboot配置Redis
- 1.导入SpringDataRedis的Maven坐标
- 2.配置Redis的数据源
- 3.编写配置类,创还能RedisTemplate对象
- 4.使用RedisTemplate操作Redis对象
- 5.总结
1.Redis简介
Redis是一款基于内存的key-value结构数据库,它的主要优点有以下几点:
- 基于内存存储,读写性能高
- 适合存储热点数据
- 企业应用广泛
其结构为:
key | value |
---|---|
id | 101 |
这种为Redis的存储结构。
2.Redis的常用数据类型
Redis存储的是key-value结构的数据,其中key为字符串类型,value有常用的五种数据类型,所有Redis的数据类型更多是相对于value所说。
value的这五种常用类型如下:
- 字符串类型 String
- 哈希 hash
- 列表 List
- 集合 Set
- 有序集合 ZSet
这五种类型大概如下图格式:
其中哈希类似Java中的hashMap集合,列表类似Java中的LinkedList,集合类似Java中的HashSet集合,且无序,有序集合类似Java中的TreeSet。
3.Redis的常用命令
以下命令均可在Redis客户端执行
1.字符串操作命令
set key value //设置key值和value值
get key //根据指定key值获取value值
setex key seconds value //设置key值的value秒后过期
setnx key value //只有在key值不存在的时候才能设置,存在则无效。
2.哈希操作命令
hset key field value //添加或设置对应的哈希键值对
hget key field //根据key和哈希的键获取值
hdel key field //删除对应的哈希键值对
hkeys key //获取哈希表中的所有键
hvals key //获取哈希表中的所有值
3.列表操作命令
lpush key value1 [value2] //将一个或多个值插入列表
lrange key start stop //获取指定范围内的元素
rpop key //移除并获取列表最后一个元素
len key //获取列表长度
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]//通过索引区间返回有序集合中指定区间内的成员
ZINCRBY key increment member//有序集合中对指定成员的分数加上增量 increment
ZREM key member [member ..]//移除有序集合中的一个或多个成员
6.通用操作命令
KEYS pattern //查找所有符合给定惯式(patern)的key
EXISTS key //检查给定 key 是否存在
TYPE key //返回 key 所储存的值的类型
DEL key //该命令用于在key存在且删除这个key
4.Springboot配置Redis
redis的Java客户端包括Jedis,Lettuce,Spring Data Redis,我们在Springboot项目中使用易于集成的Spring Data Redis。
以下就是在Springboot项目中如何使用Redis
1.导入SpringDataRedis的Maven坐标
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.配置Redis的数据源
spring:redis:host: localhostport: 6379database: 0
3.编写配置类,创还能RedisTemplate对象
@Configuration
@Slf4j
public class RedisConfiguration {@Beanpublic RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){log.info("创建RedisTemplate");RedisTemplate redisTemplate = new RedisTemplate();//设置Redis连接工厂对象redisTemplate.setConnectionFactory(redisConnectionFactory);//设置RedisTemplate序列化redisTemplate.setKeySerializer(new StringRedisSerializer());return redisTemplate;}
}
4.使用RedisTemplate操作Redis对象
public class SpringDataRedisTest {@Autowiredprivate RedisTemplate redisTemplate;@Testpublic void testSpringDataRedis(){System.out.println(redisTemplate);//字符串类型Redis的操作对象ValueOperations ops = redisTemplate.opsForValue();//List类型的操作对象ListOperations listOperations = redisTemplate.opsForList();//Hash类型的操作对象HashOperations ops1 = redisTemplate.opsForHash();//set类型的操作对象SetOperations setOperations = redisTemplate.opsForSet();//ZSET类型的操作对象ZSetOperations zSetOperations = redisTemplate.opsForZSet();}*/
/*** 操作字符串类型的数据*//*@Testpublic void testString(){//set get setex setnxredisTemplate.opsForValue().set("city","北京");String city = (String) redisTemplate.opsForValue().get("city");System.out.println(city);redisTemplate.opsForValue().set("code","1234",3, TimeUnit.MINUTES);redisTemplate.opsForValue().setIfAbsent("lock","1");redisTemplate.opsForValue().setIfAbsent("lock","2");}*/
/*** 操作哈希类型的数据*//*@Testpublic void testHash(){//hset, hget,hdel,hkeys,hvalsHashOperations ops = redisTemplate.opsForHash();ops.put("100","name","xiaoming");ops.put("100","age","22");String name = (String) ops.get("100", "name");System.out.println(name);Set keys = ops.keys("100");System.out.println(keys);List values = ops.values("100");System.out.println(values);ops.delete("100","age");}*/
/*** 操作列表类型的数据*//*@Testpublic void testList(){//lpush,lrange,rpop,llenListOperations ops = redisTemplate.opsForList();ops.leftPushAll("mylist","a","b","c");ops.leftPush("mylist","d");List mylist = ops.range("mylist", 0, -1);System.out.println(mylist);ops.rightPop("mylist");Long size = ops.size("mylist");System.out.println(size);}*/
/*** 操作集合类型的数据*//*@Testpublic void testSet(){//sadd, smembers,scard,sinter,sunion,sremSetOperations setOperations = redisTemplate.opsForSet();setOperations.add("set1","a","b",'c','d');setOperations.add("set2","a","b",'x','y');Set set1 = setOperations.members("set1");System.out.println(set1);Long size = setOperations.size("set1");System.out.println(size);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");}*/
/*** 操作有序集合类型的数据*//*@Testpublic void testZset(){//zadd,zrange,zincrby,zremZSetOperations zSetOperations = redisTemplate.opsForZSet();zSetOperations.add("zset1","a",10);zSetOperations.add("zset1","b",12);zSetOperations.add("zset1","c",9);Set zset1 = zSetOperations.range("zset1", 0, -1);System.out.println(zset1);zSetOperations.incrementScore("zset1","c",10);zSetOperations.remove("zset1","a","b");}*/
/*** 通用命令操作*//*@Testpublic void testCommon(){//keys,exists,type,delSet keys = redisTemplate.keys("*");System.out.println(keys);System.out.println("=======================");Boolean name = redisTemplate.hasKey("name");Boolean set1 = redisTemplate.hasKey("set1");System.out.println(name);System.out.println(set1);System.out.println("======================");for (Object key : keys) {DataType type = redisTemplate.type(key);System.out.println(type);}redisTemplate.delete("mylist");}
}
5.总结
Redis的五种类型主要是对Redis值的操作,对Redis键的操作主要集中在通用命令上,其中最重要的是如何在Springboot项目中使用并且操作Redis,应从使用Java分装的Redis操作类,到连接到Redis服务器,再讲该类配置到该项目中使用,最后使用该类进行具体的操作。