文章
Redis基础入门
一:redis安装配置
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
简单介绍一下redis:redis是一种键值类型的数据库,我们之前学过mysql,mysql也是数据库,他们之间的区别是,redis把数据存储在磁盘中,redis把数据存储在内存中,mysql是二维表类型的数据库;
那么redis有什么特点呢:1:存储在内存里读写速度快;2:一般存储一些热点数据;
然后就来安装redis:【Redis】Redis 数据库 安装、配置、访问 ( Redis 简介 | 下载 Redis 安装包 | 安装 Redis 数据库 | 命令行访问 Redis | 使用可视化工具访问 Redis )_redis访问-CSDN博客
详细安装教程在上面,有需要的可以参考;
然后就是连接,配置测试了,这里使用的是一个图形化界面工具:Another Redis Desktop Manager
二:redis常用数据类型
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
string:最简单的数据类型就是一个字符串;
哈希:存放的键值对,适合存储java的对象,key为属性名,value为属性值
列表:存储有顺序的数据,可以从前插入,也可以从后插入,可以有重复元素
集合:存放无需数据,没有重复元素,可以进行一些计算,比如交集,并集
有序集合:存储有顺序的数据,没有重复元素;
三:常用命令
1:字符串
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
1:set key value :
直接设置键值对;
2:get key
获取key的值
3:setex key seconds value
设置一个值,在指定时间(秒)后过期;
4:setnx key value
设置值,如果存在返回0不能设置,不存在返回1,设置成功
2:哈希
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
1:hset key f v:
为指定key的f字段设置v值;
2:hget key f;
获取指定key的f对应的值
3:hdel key f
删除指定key的f对应的这条数据
4:hkeys key
获取key中的所有字段名
5:hvals key
获取key中所有的属性值
3:列表
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
1:lpush key v1 …
从头部插入一个或多个元素(后来居上)
2:lrange key start stop
查询指定范围的元素,我们指定start为0,stop为-1就是查询全部元素
3:rpop key
删除key列表的最后一个元素
4:llen key
返回key列表的长度
4:无序集合
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
1:sadd key v1 …
向key集合中插入一个或者多个元素
2:scard key
返回key集合的元素个数
3:smembers key
返回集合的全部元素
4:sinter key1 key2
返回key1 和 key2 集合的交集
5:sunion key1 key2
返回key1 和key2的并集
6:srem key v,,,
删除key集合中的一个或者多个元素
5:有序集合
1:zadd key s1 v1 s2 v2 .。。
在key中插入v1v2元素,并且带有分数s1,s2 ,会根据分数排序
2:zrange key s1 s2 【withscores】
查询key集合中索引s1到s2的数据,如果需要可以使用withscores,返回的时候带有分数
3:zinscrby key v1 member
给key集合中的member的分数加上v1
4:zrem key m1 m2.。。
删除集合中一个或者多个元素
6:通用命令
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
1:keys pattern
查找所有指定格式的key,比如说使用*通配符来模糊匹配
2:exists key
返回指定key是否存在,存在1,不存在0
3:type key
返回指定key存储的类型
4:del key
删除key
四:在java中操作redis
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
1:导入依赖坐标:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2:配置数据源
redis:
host: ${sky.redis.host}
port: ${sky.redis.port}
3:编写配置类
@Configuration
@Slf4j
public class RedisConfiguration {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
RedisTemplate redisTemplate = new RedisTemplate();
//设置redis的连接工厂对象
redisTemplate.setConnectionFactory(redisConnectionFactory);
//设置rediskey的序列化器
redisTemplate.setKeySerializer(new StringRedisSerializer());
return redisTemplate;
}
}
4:通过redistemplate来操作redis:
@SpringBootTest
public class RedisTest {
@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();//有序集合
1:操作string类型的数据
@Test
public void testString(){
ValueOperations valueOperations = redisTemplate.opsForValue();
valueOperations.set("姓名","小名");
String o = (String) valueOperations.get("姓名");
System.out.println(o);
valueOperations.set("code","1234",40, TimeUnit.SECONDS);
valueOperations.setIfAbsent("code","12");
}
2: 操作哈希类型的数据
@Test
public void testHash(){
HashOperations hashOperations = redisTemplate.opsForHash();
hashOperations.put("小明","name","xiaoming");
hashOperations.put("小明","age","18");
hashOperations.put("小明","sex","男");
System.out.println(hashOperations.get("小明", "name"));
hashOperations.delete("小明","name");
System.out.println(hashOperations.keys("小明"));
System.out.println(hashOperations.values("小明"));
}
3:操作其他数据类型
@Test
public void testList(){
ListOperations listOperations = redisTemplate.opsForList();
listOperations.leftPush("l1","1");
listOperations.leftPushAll("l1","2","3");
System.out.println(listOperations.range("l1", 0, 2));
listOperations.rightPop("l1");
System.out.println(listOperations.size("l1"));
}
@Test
public void testSet(){
SetOperations setOperations = redisTemplate.opsForSet();
setOperations.add("set1","1" ,"2","3");
setOperations.add("set2","3","4","5");
System.out.println(setOperations.size("set1"));
System.out.println(setOperations.members("set1"));
System.out.println(setOperations.intersect("set1", "set2"));
System.out.println(setOperations.union("set1", "set2"));
}
public void testZset(){
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
zSetOperations.add("zset1","1",0.2);
zSetOperations.add("zset1","2",0.3);
zSetOperations.add("zset1","3",0.4);
System.out.println(zSetOperations.range("zset1", 0, 2));
zSetOperations.remove("zest","1");
zSetOperations.incrementScore("zset","1",1);
System.out.println(zSetOperations.range("zset1", 0, -1));
}
@Test
public void testCommon(){
System.out.println(redisTemplate.type("set1"));
System.out.println(redisTemplate.keys("*"));
redisTemplate.delete("set1");
System.out.println(redisTemplate.hasKey("set1"));
}
ations.range(“zset1”, 0, -1));
}
> add,remove,range,incremnetscore
```java
@Test
public void testCommon(){
System.out.println(redisTemplate.type("set1"));
System.out.println(redisTemplate.keys("*"));
redisTemplate.delete("set1");
System.out.println(redisTemplate.hasKey("set1"));
}