概念
- 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();
}