Redis介绍及基本操作

一、Redis简介

  • Redis是一款高性能的Nosql非关系型数据库,以key : value形式把数据缓存在内存中,同时也具有持久化的机制(持久化指的是它不仅可以把数据存在内存中,还可以把数据持久化的存在硬盘里)。

    • Nosql:Not only sql,意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库。同系列的产品还有Mongodb、CouchDB等等
  • 格式:key:value

二、Redis应用

  • 为什么使用Redis

    • 成本:nosql数据库简单易部署,基本都是开源软件,不需要像使用oracle那样花费大量成本购买使用,相比关系型数据库价格便宜。

    • 查询速度:MySQL是把数据存储在硬盘中,然而查询数据对于硬盘的读取效率不是很高,耗时。nosql数据库将数据存储于缓存之中,关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql数据库。

      在这里插入图片描述

    • 存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础类型。

    • 扩展性:关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难。

三、Redis数据结构

  • Redis是以key --> value格式,key是字符串类型,value有5种不同类型
  • value的五种类型
字符串类型 string
哈希类型 hash
列表类型 list
集合类型 set
有序集合类型 sortedset

四、Redis持久化机制

当我们的服务器关机,或者是Redis服务关闭,内存中的数据可能会丢失,这时就需要一个持久化的机制,来永久的储存我们的数据。

Redis持久化机制有两种方式:

  • RDB(默认):以在一段时间内,key发生变更的次数,集中的去处理一下

    • 配置redis.conf文件:save 秒数 key变动次数(例: save 500 1 就是指在500秒内我们的key有一个发生变化,就会帮我们进行一下存储)

在这里插入图片描述

  • AOFredis.conf文件 appendonly (no/yes)(默认为no)

    • 在这里插入图片描述

    • appendfsync always 每一次都操作都持久化

    • appendfsync everysec 每秒持久化一次

    • appendfsync no 不持久化

在这里插入图片描述

五、Jedis入门

1.入门操作

  • Jedis:java操作redis的工具。

  • 使用方式:Redis的端口号默认为6379

//连接redis
Jedis jedis = new Jedis("127.0.0.1",6379);
//操作redis
jedis.set("username","zhangsan");
//关闭连接
jedis.close();
  • 需要Maven坐标

    <dependency>
    	<groupId>redis.clients</groupId>
    	<artifactId>jedis</artifactId>
      	<version>3.3.0</version>
    </dependency>
    <dependency>
    	<groupId>junit</groupId>
    	<artifactId>junit</artifactId>
    	<version>4.12</version>
    	<scope>compile</scope>
    </dependency>
    
    @Test
    public void test1(){
    
    
        Jedis jedis = new Jedis("127.0.0.1",6379);
        jedis.set("name","zhansgan");
        jedis.close();
    }
    @Test
    public void test2(){
    
    
        Jedis jedis = new Jedis("127.0.0.1",6379);
        String name = jedis.get("name");
        System.out.println(name);
        jedis.close();
    }

这样zhangsan就被取了出来。

2.Jedis操作各种redis中的数据结构

(1) 字符串类型 string
set  get
		
//1. 获取连接
Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
//2. 操作
jedis.set("username","zhangsan");
//获取
String username = jedis.get("username");
System.out.println(username);

//可以使用setex()方法存储可以指定过期时间的 key value
jedis.setex("activecode",20,"hehe");//将activecode:hehe键值对存入redis,并且20秒后自动删除该键值对,适合于类似手机验证码场景下的操作

//3. 关闭连接
jedis.close();
(2) 哈希类型 hash : map格式  
hset   hget  hgetAll

Jedis jedis = new Jedis();
// 存储hash
jedis.hset("user","name","lisi"); //("key","field","value")
jedis.hset("user","age","23");
jedis.hset("user","gender","female");

// 获取hash
String name = jedis.hget("user", "name");
System.out.println(name);

// 获取hash的所有map中的数据
Map<String, String> user = jedis.hgetAll("user");
	
// keyset
Set<String> keySet = user.keySet();
for (String key : keySet) {
    
    
	//获取value
	String value = user.get(key);
	System.out.println(key + ":" + value);
}
jedis.close();
(3) 列表类型 list:linkedlist格式,支持重复元素
lpush | rpush
lpop  | rpop
lrange start end : 范围获取
			
Jedis jedis = new Jedis();
// list 存储
jedis.lpush("mylist","a","b","c");//从左边存,cba
jedis.rpush("mylist","a","b","c");//从右边存,abc
	
// list 范围获取
List<String> mylist = jedis.lrange("mylist", 0, -1); //-1表示最后一个,也就是取出所有数据
System.out.println(mylist);
	        
// list 弹出
String element1 = jedis.lpop("mylist");
System.out.println(element1);//弹出c 
	
String element2 = jedis.rpop("mylist");
System.out.println(element2);//弹出c 

// list 范围获取
List<String> mylist2 = jedis.lrange("mylist", 0, -1);
System.out.println(mylist2);
	
jedis.close();
(4) 集合类型 set:不允许重复元素
sadd
smembers:获取所有元素

Jedis jedis = new Jedis();
// set 存储
jedis.sadd("myset","java","php","c++");
// set 获取
Set<String> myset = jedis.smembers("myset");
System.out.println(myset);
	
jedis.close();
(5) 有序集合类型 sortedset:不允许重复元素,且元素有顺序
zadd
zrange

Jedis jedis = new Jedis();
// sortedset 存储
jedis.zadd("mysortedset",3,"亚瑟");
jedis.zadd("mysortedset",30,"后裔");
jedis.zadd("mysortedset",55,"孙悟空");
	
// sortedset 获取
Set<String> mysortedset = jedis.zrange("mysortedset", 0, -1);
System.out.println(mysortedset);

jedis.close();

猜你喜欢

转载自blog.csdn.net/weixin_44129618/article/details/109257527