概念
- redis是一款高性能的NOSQL系列的非关系型数据库

下载安装
-
官网
- https://redis.io/
- https://www.redis.net.cn/
-
解压直接可以使用
-
| 文件名 | 说明 |
|---|
| redis.windows.conf | 配置文件 |
| redis-cli.exe | redis的客户端 |
| redis-server.exe | redis服务端 |
命令操作
数据结构
- redis存储的是:key,value格式的数据,其中key都是字符串,value有5种不同的数据格式
value的数据格式
-
| 格式 | 类型 |
|---|
| string | 字符串类型 |
| hash:map格式 | 哈希类型 |
| list:linkedList格式 | 列表类型 |
| set:hashSet格式 | 集合类型 |
| sortedset | 有序集合类型 |
-

字符串类型 string
| 格式 | 操作 |
|---|
| set key value | 存储 |
| get key | 获取 |
| del key | 删除 |
哈希类型 hash
| 格式 | 操作 |
|---|
| hset key field value | 存储 |
| hget key field | 获取指定field |
| hgetall key | 获取所有的field 和 value |
| hdel key field | 删除 |

列表类型 list
- 可以添加一个元素到列表的头部(左边)或者尾部(右边)
| 格式 | 操作 |
|---|
| 添加 | |
| lposh key value | 将元素加入列表左表 |
| rpush key value | 将元素加入列表右边 |
| 获取 | |
| lrange key strat end | 范围获取 |
| 删除 | |
| lpop key | 删除列表最左边的元素,并将元素返回 |
| rpop key | 删除列表最右边的元素,并将元素返回 |

集合类型 set
| 格式 | 操作 |
|---|
| sadd key value | 存储 |
| smembers key | 获取set集合中所有元素 |
| srem key value | 删除set集合中的某个元素 |

有序集合类型 sortedset
| 格式 | 操作 |
|---|
| zadd key score value | 存储 |
| zrange key start end | 获取所有value |
| zrange key start end withscores | 获取所有value和score |
| zrem key value | 删除 |

通用命令
| 命令 | 说明 |
|---|
| keys * | 查询所有的键 |
| type key | 查看该键的类型 |
| del key | 删除指定key value |

持久化操作
- redis是一个内存数据库,当redis服务器重启,获取电脑重启,数据会丢失
- 我们可以将redis内存中的数据持久化保存到硬盘的文件中
redis持久化机制
RDB
- 默认方式,不需要进行配置,默认就使用这种机制
- 在一定的间隔时间中,检测Key的变化情况,然后持久化数据
- 编辑redis.windows.conf文件
- after 900 sec (15 min) if at least 1 key changed
- save 900 1
- after 300 sec (5 min) if at least 10 keys changed
- save 300 10
- after 60 sec if at least 10000 keys changed
- save 60 10000
- 重新启动redis服务器,并制定配置文件名称
- F:\Redis>redis-server.exe redis.windows.conf
AOF
- 日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据
- 编辑redis.windows.conf文件
- appendonly no(关闭aof) --> appendonly yes(开启aof)
- appendfsync always : 每一次操作都进行持久化
- appendfsync everysec :每隔一秒进行一次持久化
- appendfsync no :不进行持久化
Java客户端Jedis
使用步骤
-
下载jedis的jar包或导入依赖
-
使用
-
测试是否连接
-
package com.ytzkl.jedis.test;
import org.junit.Test;
import redis.clients.jedis.Jedis;
public class JedisTest1 {
@Test
public void test1(){
Jedis jedis = new Jedis("localhost",6379);
jedis.set("username","zhangsan");
jedis.close();
}
}
Jedis操作各种redis中的数据结构
字符串类型 string
| 方法 | 说明 |
|---|
| set(key,value) | 存储 |
| get(key) | 获取 |
| setex(key,seconds,value) | 将key:value键值对存入redis,seconds秒后自动删除 |
| del(key) | 删除 |
@Test
public void string(){
Jedis jedis = new Jedis();
jedis.set("username","zhangsan");
String username = jedis.get("username");
System.out.println(username);
jedis.setex("activecode",20,"hehe");
jedis.del("username");
String username1 = jedis.get("username");
System.out.println(username1);
jedis.close();
}
哈希类型 hash : map格式
| 方法 | 说明 |
|---|
| hset(key,field,value) | 存储 |
| hget(key,field) | 获取单个指定值 |
| hgetAll(key) | 获取该键对应的所有值 |
| jedis.hdel(key,field) | 删除指定field |
@Test
public void hash(){
Jedis jedis = new Jedis();
jedis.hset("user","name","yi");
jedis.hset("user","age","18");
jedis.hset("user","sex","girl");
String name = jedis.hget("user", "name");
System.out.println(name);
Map<String, String> map = jedis.hgetAll("user");
Set<String> keySet = map.keySet();
for (String key:keySet){
String value = map.get(key);
System.out.println(key+":"+value);
}
jedis.hdel("user","name");
jedis.close();
}
列表类型 list :linkedList格式。支持重复元素
| 方法 | 说明 |
|---|
| lpush(key,strings) | 从左边存 |
| rpush(key,strings) | 从右边存 |
| lrange(key,start,end) | 范围获取 |
| lpop(key) | 从左边删 |
| rpop(key) | 从右边删 |
@Test
public void list(){
Jedis jedis = new Jedis();
jedis.lpush("list1","a","b","c");
jedis.rpush("list1","a","b","c");
jedis.lpop("list1");
jedis.rpop("list1");
List<String> list1 = jedis.lrange("list1", 0, -1);
System.out.println(list1);
jedis.close();
}
集合类型 set :不允许重复元素
| 方法 | 说明 |
|---|
| sadd(key value) | 存储 |
| smembers(key) | 获取set集合中所有元素 |
| srem(key value) | 删除set集合中的某个元素 |
@Test
public void set(){
Jedis jedis = new Jedis();
jedis.sadd("mySet","java","oop","ssm");
jedis.srem("mySet","java");
Set<String> mySet = jedis.smembers("mySet");
for (String key:mySet){
System.out.println(key);
}
jedis.close();
}
有序集合类型 sortedset :不允许重复元素,切元素有顺序
| 方法 | 说明该 |
|---|
| zadd (key score value) | 存储 |
| zrange (key start end) | 获取所有value |
| zrem (key value) | 删除 |
@Test
public void sortedset (){
Jedis jedis = new Jedis();
jedis.zadd("mySortedset",18,"yiyi");
jedis.zadd("mySortedset",19,"gexiao");
jedis.zadd("mySortedset",10,"chaochao");
jedis.zrem("mySortedset","chaochao");
Set<String> mySortedset = jedis.zrange("mySortedset", 0, -1);
for (String key:mySortedset){
System.out.println(key);
}
jedis.close();
}
jedis连接池:JedisPool
使用
- 创建JedisPool连接池对象
- 调用方法getResource()方法获取Jedis链接
@Test
public void 连接池(){
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(50);
config.setMaxIdle(10);
JedisPool jedisPool = new JedisPool(config,"localhost",6379);
Jedis jedis = jedisPool.getResource();
jedis.set("username","yiya");
jedis.close();
}
Jedis工具类
JedisUtils
package com.ytzkl.jedis.test;
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 JedisPoolUtils {
private static JedisPool jedisPool;
static {
InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
Properties pro = new Properties();
try {
pro.load(is);
} catch (IOException e) {
e.printStackTrace();
}
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));
config.setMaxIdle(Integer.parseInt(pro.getProperty("maxIdle")));
jedisPool = new JedisPool(config,pro.getProperty("host"), Integer.parseInt(pro.getProperty("port")));
}
public static Jedis getJedis(){
return jedisPool.getResource();
}
}
@Test
public void 使用连接池工具类(){
Jedis jedis = JedisPoolUtils.getJedis();
jedis.set("love","花花");
jedis.set("live","yang");
jedis.close();
}