Redis
Redis(全称:Remote Dictionary Server 远程数据服务)是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
文章目录
1.Redis简介
Redis是一个开源的(BSD许可的)内存数据结构存储,用作数据库、缓存和消息代理。它支持字符串、散列、列表、集合、带范围查询的排序集、位图、超日志、具有RADIUS查询和流的地理空间索引等数据结构。Redis内置了复制、Lua脚本、LRU驱逐、事务处理和不同级别的磁盘上持久化,并通过Redis Sentinel和Redis集群自动分区提供了高可用性。
2.应用场景
- 频繁请求的、变化率低的数据
- 缓存
- 高并发
- 任务队列
3.Redis下载
4.目录介绍
5.数据类型
(1) string字符串类型
- set key value
- get key
- del key
(2) hash哈希类型-Map
- hset mapname key value
- hget mapname key
- hdel mapname key
(3) list列表类型-LinkedList
-
lpush key value
rpush key value
-
lrange key start end
-
lpop key
rpop key
(4) set集合类型
- sadd key value
- smembers key
- srem key value
(5) sortedset有序集合类型
-
zadd key score value
-
zrange key start end
zrange key 0 -1 widthscore
-
zrem key value
6.命令
-
查询所有键:keys *
-
获取键对应的value的类型:type key
-
删除指定key及value : del key
7.Java操作Redis
首先在开发工具中导入要用到的Redis架包
Jedis架包
-
jedis-2.9.0.jar
Jedis jedis = new Jedis("localhost",6379) jedis.close() 不同数据类型的操作
-
commons-pool2-2.2.jar
JedisPoolConfig config = new JedisPoolConfig() JedisPool jedisPool = new JedisPool(config,"localhost",6379) Jedis jedis = jedisPool.getResource()
-
JedisUtil
package com.srzx.sms.utils;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class JedisUtil {
public static Jedis jedis;
public static Jedis getConnection(){
if(jedis == null){
InputStream is = JedisPool.class.getResourceAsStream("/redis.properties");
Properties prop = new Properties();
try {
prop.load(is);
} catch (IOException e) {
e.printStackTrace();
}
String host = prop.getProperty("host");
int port = new Integer(prop.getProperty("port"));
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(new Integer(prop.getProperty("maxTotal")));
config.setMaxWaitMillis(new Integer(prop.getProperty("maxWaitMillis")));
config.setMaxIdle(new Integer(prop.getProperty("maxIdle")));
JedisPool pool = new JedisPool(config,host,port);
jedis = pool.getResource();
}
return jedis;
}
}
- Redis测试类
package com.srzx.sms.test;
import com.srzx.sms.utils.JedisUtil;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.util.Set;
public class TestRedis {
@Test
public void testUtil(){
Jedis jedis1 = JedisUtil.getConnection();
Jedis jedis2 = JedisUtil.getConnection();
System.out.println("jedis1 = " + jedis1);
System.out.println("jedis2 = " + jedis2);
Set<String> set1 = jedis1.smembers("javaset");
System.out.println("set1 = " + set1);
Set<String> set2 = jedis2.smembers("javaset");
System.out.println("set2 = " + set2);
// jedis1.close();
// jedis2.close();
}
@Test
public void testPool(){
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(100);
config.setMaxWaitMillis(10000);
config.setMaxIdle(10);
JedisPool pool = new JedisPool(config,"127.0.0.1",6379);
Jedis jedis = pool.getResource();
Set<String> set = jedis.smembers("javaset");
System.out.println("set = " + set);
jedis.close();
}
@Test
public void test(){
// Jedis jedis = new Jedis();
Jedis jedis = new Jedis("127.0.0.1",6379);
// jedis.set("course","javaweb");
// jedis.sadd("javaset","javase","javaee","javame");
Set<String> set = jedis.smembers("javaset");
System.out.println("set = " + set);
jedis.close();
}
}
8.持久化
1.RDB
-
默认
-
在一段时间间隔,检测key
在这里插入代码片
的变化情况,然后持久化save 900 1 save 300 10 save 60 10000
2.AOF
-
日志记录方式
开启:appendonly yes
-
记录每一条命令的操作
-
间隔 ,然后持久化
# appendfsync always appendfsync everysec # appendfsync no