redis数据库及java操作redis基础知识汇总

redis数据库

1.Redis的安装

  可以直接去中文官网中直接下载安装,进入这个网站,点击下载,下载稳定版的即可。将该tar包下载后加压到一个没有中文字符路径的空文件夹中,即可直接使用,不用进行额外的配置。本地使用方式如下:

  1. 打开redis-server.exe:这是一个redis的服务器端,相当于mysql软件
  2. 打开redis-cli.ext:这是一个redis的客户端,可以供我们在本地操作redis数据库,类似与图形化界面,当然这里是使用命令行的方式操作redis数据库的。

  例如:在redis-cli客户端中保存键为“name",值为”zhangsan"的一条数据,并获取该数据(相当于name=zhangsan)

redis本地使用示例
 

2.Redis的数据结构

  Redis底层是由C语言编写的,redis里面内置的数据结构即是用C语言的结构体实现的。redis的数据结构有以下5种。

  值得说明的是这里的数据结构指的是值的类型,redis的键都是有字符串构成的。
  

2.1数据结构分类

  1. string:字符串类型;
  2. hash:哈希类型,相当于map类型,值也是以键值对的形式存在的;
  3. list:列表类型,可以支持重复性的数据;
  4. set:集合类型,与list的区别是不支持重复性的数据;
  5. sortedset:有序集合类型,在不支持重复的同时还保证数据是有序的。
      

2.2各种数据结构常用的命令操作

string

  • 存储数据:

    set key value

  • 取出数据:

    get key

  • 删除键:

    del key

127.0.0.1:6379> set username zhangsan	// 设置username的值为zhangsan
127.0.0.1:6379> get username			//取出username对应的值
"zhangsan"
127.0.0.1:6379> del username			//username的值将会被删除

hash类型

  • 存储数据:

    hset key field value

    即创建一个类型为hash,其键为key,里面有个字段为field,值为value,相当于{“key”: {“filed”:value}}

  • 取出数据:

    hget key field

    获取字段field中的值

  • 取出hash中键值key的所有的字段数据:

    hgetall key

    将会获取键值对,field=value

  • 删除字段:

    hdel key field

    删除键key的字段field

127.0.0.1:6379> hset person name zhangsan
127.0.0.1:6379> hset person age 21
// 即相当于创建了:person = {"name":"张三", "age":21}
127.0.0.1:6379> hget person name
"zhangsan"
127.0.0.1:6379> hgetall person
"name"
"zhangsan"
"age"
21
127.0.0.1:6379> hdel person name 	// 删除字段name

list类型

可以选择将一个元素添加到头部还是到尾部,很像一个双端队列结构

  • 存储数据:

    lpush key value //将数据从左边添加到列表中

    rpush key value //将数据从右边添加到列表中

  • 取出数据:

    lrange key start end

    将start到end范围的索引的数据取出,从0开始,-1表示后一个元素

  • 删除数据:

    lpop key //删除列表中最左边的元素,并将元素返回

    rpop key //删除列表中最右边的元素,并将元素返回

127.0.0.1:6379>lpush userlist zhangsan
127.0.0.1:6379>rpush userlist lisi
127.0.0.1:6379>lrange userlist 0 -1		//取出列表中所有的元素
"zhangsan"
"lisi"
127.0.0.1:6379>lpop userlist
"zhangsan"
127.0.0.1:6379>rpop userlist
"lisi"

set类型

与list类型类似,但是不会添加重复数据

  • 存储数据:

    sadd key value

  • 获取数据:

    smembers key

    取出所有的值

  • 删除数据:

    srem key value

127.0.0.1:6379>sadd myset a	//给myset中添加"a"
127.0.0.1:6379>sadd myset b
127.0.0.1:6379>smembers myset
"a"
"b"
127.0.0.1:6379>srem myset a	//删除a的值

sortedset类型

有序集合类型,不允许重复数据,存储数据时要为每个值设置一个double类型的score(分数)用来排序

  • 存储数据:

    zadd key score value

  • 取出数据:

    zrange key start end [withscores]

    可选的withscores表示是否要将分数一起展示出来,起始索引下标为0,-1表示最后一个元素

  • 删除数据:

    zrem key value

127.0.0.1:6379> zadd mysort 60 zhangsan	//值zhangsan的score为60
(integer) 1
127.0.0.1:6379> zadd mysort 50 lisi //值lisi的score为50
(integer)1
127.0.0.1:6379> zadd mysort 80 wangwu  //值wangwu的score为80
(integer) 1
127.0.0.1:6379> zrange mysort 0 -1
1) "lisi"
2) "zhangsan"
3) "wangwu"
127.0.0.1:6379> zrange mysort 0 -1 withscores
1) "zhangsan"
2) "60"
3) "wangwu"
4) "80"
5) "lisi"
6) "500"
127.0.0.1:6379> zrem mysort lisi	//删除lisi的值
(integer) 1

2.3其他通用命令操作

  • keys * :查询所有键,可以使用正则表达式的方式
  • type key:查询该键的类型
  • del key:删除指定的键

3.Redis的持久化操作

   reids常用于缓存操作,其数据是保留在内存当中,因此随着程序的关闭的,其数据就会丢失。但是我们可以使用持久化的技术将redis内存中的数据持久化到我们本地的硬盘文件中。

   redis有RDB和AOF这两种持久化机制,默认使用的是RDB这种持久化机制。

3.1RDB

   这是redis默认的持久化机制,一种快照存储的方式,具体会在某个时刻监测key的变化,如果有变化的话就会写入到本地文件中,默认保留的本地文件问dump.rdb,在你redis解压目录即可查看。当redis服务器重新启动时,就会加载dump.rdb文件中的数据进内存中。

配置监测key变化的时间间隔

  redis的配置文件都在redis.windows.conf文件中,关于保存数据的时间间隔的配置在如下位置:

RDB配置

save 900 1 如果900秒(15分钟)后有一个键的值发生变化,则持久化一次

save 300 10 如果300秒(5分钟)后有10个键的值发生变化,则持久化一次

save 60 10000 如果60秒后有10000个键的值发生变化,则持久化一次

这是官方默认的配置,可以根据需要配置。在配置之后重新启动redis服务端。

3.2AOF

  这是一种日志记录的方式,可以用于记录每一条数据的变化,在每一个键发生变化的时候持久化一次内存中的数据。redis.windows.conf文件与AOF相关的配置在:
AOF配置

这里默认是关闭AOF这种持久化机制:appendonly no;如果要开启的话只需将no改成yes即可。之后再配置:
AOF配置持久化频率

这里是用来配置AOF持久化的频率

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

appendfsync everysec 每一秒持久化一次

appendfsync 不进行持久化

4.java操作Redis

java使用Jedis工具来操作redis数据库。如果还没有下载Jedis相关的jar的话,可以到这里下载。或者如果是使用maven的话,可以在pom.xml配置如下引入相关依赖

<dependency>
	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
	<version>2.8.1</version>	
</dependency>

(版本号可以选择自己想要)

4.1使用方式

Jedis的使用非常简便,只要创建对应的Jedis对象即可。

Jedis jedis = new Jedis("localhost", 6379);		//连接本地的Jedis数据库,无参构造的话默认就是这两个值  注意要将本地的redis服务端打开
jedis.set("name", "zhangsan");	//设置一个字符串类型的数据 name=zhangsan
jedis.get("name");	// zhangsan

jedis中对数据操作的那些方法的方法名是和上面将的redis中的命令是一致的,只是Jedis中命名是驼峰命名,有一些名称可能要区分一下大小写。例如

jedis.hset("user", "name", "zhangsan");		//设置一个map数据
jedis.hset("user", "age", "22");
jedis.hget("user", "name");
jedis.hgetAll("user");

可见其使用方式和命名行的使用方式是类似的,只不过把数据当成参数进行传递,就不在这里过多赘述了。

其他方法:

jedis.close();		//关闭连接
jedis.setex(String key, int seconds, String value);		//设置seconds秒数之后自动删除该键值对

4.2连接池

与mysql类似的,redis也有一个数据连接池对象为JedisPool,下面创建一个redis数据库连接的工具类,用于获取JedisPool连接池和获取Jedis连接对象。

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public final class JedisUtil {
    
    
    
    /**
     * JedisPool连接池对象
     */
    private static JedisPool jedisPool;
    
    static {
    
    
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(50);		//最大连接数,设置为0表示没有限制
        config.setMaxIdle(10);		//最大等待的连接数,设置为0表示没有限制
        jedisPool = new JedisPool(config, "localhost", 6379);
    }
    
    /**
     * 	获取Jedis连接对象
     */
    public static Jedis getJedis() {
    
    
        return jedisPool.getResource();
    }
    
    /**
     * 	关闭jedis连接
     */
    public static void close(Jedis jedis) {
    
    
        if (jedis != null) {
    
    
            jedis.close();
        }
    }
}

5.概念补充

   Redis(Remote Dictionary Server),即远程字典服务,是一款有C语言开发的,高性能的NOSQL系列的存储键值对类型的数据库。

   NoSQL:not only sql,不仅仅是sql,指的是一种非关系型数据库,区别于mysql这种关系型数据库,能够处理大规模的数据和高并发的场景。

  注意redis并不是用来替代关系型数据库,是用来在某些特定的场合下能和关系型数据库相互补充。例如,在一些需要频繁从数据库获取相同的数据的场合中,在第一次读取数据时,可以先将数据从mysql读取,同时保存在redis数据库中,之后再读取时直接从redis数据库中读取。

5.1常用的NoSQL系列的数据库

键值对系列

  • 相关产品:Redis, Voldemort, Berkeley DB等
  • 使用场景:内容缓存,主要用于处理大量数据的高访问负载为题。
  • 数据存储类型:键值对,key-value,value是非结构化的。

列存储数据库

  • 相关产品:HBase,Riak,Cassandra
  • 使用场景:分布式的文件系统
  • 数据存储类型:以列簇式存储,将一列数据放在一起

文档型数据库

  • 相关产品:MongoDB, CouchDB
  • 使用场景:web应用
  • 数据存储类型:一系列键值对,与key-value类似,但是value是结构化的。

图形数据库

  • 相关产品:Noe4J, InfoGrid, Infinite Graph
  • 使用场景:社交网络
  • 数据存储类型:图结构

5.2 Redis的使用场景

  1. 缓存:数据查询,新闻内容,短连接,商品内容, 可以让数据只从关系型数据库中获取一次,之后从缓存中获取将会大大加快速度
  2. 聊天室在线好友列表
  3. 任务队列,例如秒杀操作,抢购(12306)
  4. 排行榜
  5. 网站访问统计
  6. 数据过期处理,可以精确到毫秒值
  7. 分布式集群架构中的session分离

放在一起

文档型数据库

  • 相关产品:MongoDB, CouchDB
  • 使用场景:web应用
  • 数据存储类型:一系列键值对,与key-value类似,但是value是结构化的。

图形数据库

  • 相关产品:Noe4J, InfoGrid, Infinite Graph
  • 使用场景:社交网络
  • 数据存储类型:图结构

5.2 Redis的使用场景

  1. 缓存:数据查询,新闻内容,短连接,商品内容, 可以让数据只从关系型数据库中获取一次,之后从缓存中获取将会大大加快速度
  2. 聊天室在线好友列表
  3. 任务队列,例如秒杀操作,抢购(12306)
  4. 排行榜
  5. 网站访问统计
  6. 数据过期处理,可以精确到毫秒值
  7. 分布式集群架构中的session分离

猜你喜欢

转载自blog.csdn.net/weixin_44184990/article/details/108553901