@(数据库)
Redis
C语言开发的非关系型键值对数据库
1 基本介绍
- redis 的数据结构
- redis存储的实:key-value格式的数据,其中key都是字符串,value鼬5种不同的数据结构
-
value的数据结构
1. 字符串类型 String
2. 哈希类型 hash:map格式
3. 列表类型 list: Linkedlist格式
4. 集合类型 set
5. 有序集合类型 sortedset
-
- redis存储的实:key-value格式的数据,其中key都是字符串,value鼬5种不同的数据结构
2 具体使用
2.1.1 字符串类型 String
- 存储 set key value
- 获取 get key
- 删除 del key
2.1.2 哈希类型 hash
- 存储 hset key field value(相当于map中键值)
- 获取 hget key field
- hget key field: 获取指定的field对应的值
- hgetall key :获取所有的field 和value
- 删除 hdel key field
2.1.3 列表类型 list
添加一个元素到列表的头部(左边)或者尾部(右边),允许重复
- 添加
- lpush key value: 将元素加入到列表的左边
- rpush key value: 将元素添加到列表的右边
- 获取
- lrange key start end :范围获取
- 删除
- lpop key: 删除最左边的元素并将元素返回
- rpop key: 删除最右边的元素,并将元素返回
2.1.4 集合类型 set 不允许重复(无序)
- 存储 :sadd key value
- 获取:smembers key :获取set集合中的所有元素
- 删除:srem key value :删除set集合中的某个元素
2.1.5 有序集合类型 sortedset 不允许重复,且元素有序
- 存储:zadd key score value
- 获取 :zrange key start end
- zrange key start end withscores 连带分数一块取出来
- 删除:zrem key value
2.1.6 通用命令
-
keys *
:查询所有的键 -
type key
:获取键对应的value的类型 -
del key
:删除指定的key value
3 Redis 持久化
redis是一个内存数据库,当Redis服务器重启后,数据会丢失,我们可以将Reids内存中的数据持久化保存到硬盘的文件
- redis持久化机制:
- RDB:默认方式,再一定时间间隔内,检测key的变化情况,然后持久化数据(保存在目录下以
.rdb
后缀)- 编辑
redis.windows.config
文件 - 重新启动redis服务器,并指定配置文件名称(
redis -server.exe redis.windows.config
)
- 编辑
- AOF:日志记录的方式,可以记录每一条命令的操作,可以每一次命令操作之后,持久化数据(保存在
.aof
文件中)- 编辑redis.windows.conf 文件
- appendonly no(默认)改为appendonly yes(开启aof)
-
# appendfsync always
每一次操作都进行持久化 -
appendfsync everysec
每隔一秒进行一次持久化 -
# appendfsync no
不进行持久化
-
- RDB:默认方式,再一定时间间隔内,检测key的变化情况,然后持久化数据(保存在目录下以
4 Jedis
Java 用来操作Redis数据库的
4.1.1 快速入门
- 导入jar包
- 代码是吸纳
//获取连接
Jedis jedis = new Jedis("localhost",6379);
//操作
jedis.set("username","zhangsna");
//关闭连接
jedis.close();
4.1.2 操作五种数据结构
操作的命令喝命令行操作基本一致
4.1.3 jedis连接池:JedisPool
- 使用
- 创建JedisPoolConfig 配置对象(可以根据电脑配置一些信息,将对象给JedisPool连接池对象)
- 创建JedisPool连接池对象
- 使用getResouce获取连接
- 使用
- 关闭(其实是归还到连接池)
public class JedisPoolUtil {
private static JedisPool jedisPool ;
//初始化这个类就加载这个代码块
static {
//读取配置文件(在配置文件中配置相关项,修改更方便)
InputStream inputStream = JedisPoolUtil.class.getClassLoader().getResourceAsStream("jedis.properties");
//创建Properties 对象
Properties properties = new Properties();
//关联文件
try {
properties.load(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
//获取数据,设置到JedisPoolConfig中
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(Integer.parseInt(properties.getProperty("maxTotal")));
//初始化JedisPool
jedisPool = new JedisPool(config,properties.getProperty("host"), Integer.parseInt(properties.getProperty("port"))) ;
}
//获取连接的方法
public static Jedis getJedisPool(){
return jedisPool.getResource();
}
}