Redis数据库

非关系型数据库Redis


Redis简介

Redis官网
Redis教程
Redis是一种基于C语言编写的开源的内存存储数据结构,可用做数据库、缓存和消息队列,Redis使用键值对(key-value)的形式存储数据,由于其将数据存储在内存上而非磁盘上,因此具有较高的性能。


Redis支持的数据类型

Redis支持五种数据类型:
1、字符串(Strings)
2、集合(Sets)
3、列表(Lists)
4、有序集合(Sorted Sets)
5、散列(Hashs)


Redis常用命令

存储String类型数据

命令 描述
set key value 设置指定的key值
get key 获取指定的key值
getset key value 获取旧的value值,再将key的值设置为value
incr key 将key中存储的数字增1
decr 将key中存储的数字减1
incrby key increment 将key所储存的值加上给定的增量值(increment)
decrby key decrement 将key所储存的值减去给定的减量值(decrement)
append key value 如果key已经存在并且是一个字符串,则将指定的value追加原来值的value的末尾,如果key不存在,则重新创建一个key/value
strlen key 返回key所储存的字符串值的长度

存储List类型数据

List类型的数据与普通的链表一样,按照插入顺序进行排序,并且可以在list的头部或者尾部添加数据,一个List最多可以包含232 - 1个元素。关于存储list类型的数据的常用命令如下:

命令 描述
lpush key value1 value2… 将一个或多个值插入到列表头部
rpush key value1 value2… 在列表尾部中添加一个或多个值
lindex key index 通过索引获取列表中的元素
lrange key start end 获取列表指定范围内的元素,start、end可为负数,若为-1则表示链表尾部的元素
lpushx key value 将一个值插入到已存在的列表头部
rpushx key value 将一个值插入到已存在的列表尾部
lpop key 移出并获取列表的第一个元素
rpop key 移除并获取列表最后一个元素
rpoplpush source destination 移除列表的最后一个元素,并将该元素添加到另一个列表并返回
llen key 返回指定的key关联的链表中的元素的数量
lrem key count value 移除count个值为value的元素
linsert key before/after pivot value 在列表的pivot元素前或者后插入元素

存储Set类型数据

Set类型的数据可以理解为无序的、不重复的String类型的集合,其常用的命令如下:

命令 描述
sadd key value1 value2… 向set集合添加一个或多个数据
scard key 获取集合的成员的数量
smembers key 获取set集合中所有的成员
sismember key member 判断参数中指定的成员是否在该set中
srem key member1 member2… 移除set集合中一个或多个成员
srandmember key 随机返回set中的一个成员
sdiff key1 key2 返回key1与key2集合的差集
sdiffstore destination key1 key2 将key1与key2的差集存储在destination上
sinter key[key1,key2…] 返回指定集合的交集
sinterstore destination key1 key2 将key1与key2的交集存储在destination上
sunion key1 key2… 返回指定集合的并集
sunionstore destination key1 key2 将key1与key2的并集存储在destination上

存储Hash类型数据

Redis中Hash类型的数据其value值类似一个Map集合,因此比较适合存储对象。一个Hash最多可以包含232 - 1个键值对

命令 描述
hset key field value 将哈希表key中的字段field的值设为value
hgetall key 获取key中的所有filed-vaule
hget key field 获取指定的key的filed的值
hmset key fields 判断参数中指定的成员是否在该set中
hmset key field1 value1 [field2 value2 ] 同时将多个field-value(域-值)对设置到哈希表 key 中
hexists key field 判断哈希表指定的key中指定的字段是否存在
hlen key 获取key所包含的field的数量
hincrby key field increment 为哈希表key中的指定字段的整数值加上增量increment

存储Sorted Set类型数据

Sorted Set类型的数据是有序的,但是不允许重复,并且Sorted Set中的每一个元素都会有一个double类型的分数与之关联,Sorted Set类型的数据能够做到有序,也正是因为这个分数的存在,但是值得注意的是,分数是允许重复的,集合中的元素不能重复。由于这一特点,Redis可以用于游戏排名、微博热点话题等使用场景。其常用的命令如下:

命令 描述
zadd key score member score2 member2 向有序集合添加一个或多个成员,或者更新已存在成员的分数
zcard key 获取集合中的成员数量
zcount key min max 获取分数在[min,max]之间的成员
zcount key member 获取有序集中,成员的分数值
zrem key member [member …] 移除有序集合中的一个或多个成员

Java连接Redis

在使用Java连接Redis之前,需要先进行安装,通常情况下,Redis安装在Linux系统中,操作之前先安装好并启动Redis。除此之外还需要用到两个Jar包:jedis-2.9.0.jar以及commons-pool2-2.6.0.jar

配置资源文件:

jedis.properties
1
2
3
4
5
redis.maxIdle=50
redis.minIdle=10
redis.maxTotal=50
redis.url=localhost
redis.port=6379

编写工具类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package com.my.utils;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

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

/**
* Redis连接池工具类
*
* @author Mackvord
* @date 2018年7月20日
* @version 1.0
*/
public class JedisUtils {

/**
* 定义连接池对象
*/
private static JedisPool pool = null;

static {
//加载配置文件
InputStream in = JedisUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
Properties pro = new Properties();
try {
pro.load(in);
} catch (IOException e) {
e.printStackTrace();
}

// 创建池子的配置对象
JedisPoolConfig poolConfig = new JedisPoolConfig();
// 最大闲置数
poolConfig.setMaxIdle(Integer.parseInt(pro.get("redis.maxIdle").toString()));
// 最小闲置数
poolConfig.setMinIdle(Integer.parseInt(pro.get("redis.minIdle").toString()));
// 最大连接数
poolConfig.setMaxTotal(Integer.parseInt(pro.get("redis.maxTotal").toString()));
// 创建连接池对象
pool = new JedisPool(poolConfig, pro.get("redis.url").toString(), Integer.parseInt(pro.get("redis.port").toString()));
}

/**
* 获取Redis连接对象的方法
* @return
*/
public static Jedis getJedis() {
return pool.getResource();
}
}

编写测试类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package com.my.jedis;

import org.junit.Test;

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

/**
* 测试连接Redis数据库
*
* @author Mackvord
* @date 2018年7月20日
* @version 1.0
*/
public class JedisTest {

@Test
public void test() {
// 1.获取连接对象
Jedis jedis = new Jedis("localhost",6379);
// 2.获取数据
String username = jedis.get("username");
System.out.println(username);
// 3.存储数据
jedis.set("addr", "广州");
System.out.println(jedis.get("addr"));
jedis.close();
}

/**
* 通过Jedis的pool获取jedis连接
*/
@Test
public void test2() {
// 0.创建池的配置对象
JedisPoolConfig jpc = new JedisPoolConfig();
// 最大闲置数
jpc.setMaxIdle(30);
// 最小闲置数
jpc.setMinIdle(10);
// 最大连接数
jpc.setMaxTotal(50);
// 1.创建jedis连接池对象
JedisPool jp = new JedisPool(jpc, "localhost", 6379);
// 2.获取连接对象
Jedis jedis1 = jp.getResource();
// 3.操作数据库
jedis1.set("name", "Google");
System.out.println(jedis1.get("name"));
// 4.关闭资源
jedis1.close();
jp.close();
}
}

如果您觉得我的文章对您有帮助,请随意赞赏,您的支持将鼓励我继续创作!
0%