redis数据库:存放的全是键值对
五种数据类型:
字符串类型 string : 字符串格式
哈希类型 hash : map格式
列表类型 list : 支持重复元素
集合类型 set : 不支持重复元素
有序集合类型 : 不允许重复元素,且有序
命令操作
字符串类型 string
存储 : set key value
获取 : get key
删除 : del key
哈希类型 hash
存储 : hset key field value // field为哈希表的键
获取 : hget key field //获取map指定键的值
hgetall key // 获取map的所有值
列表类型 list: 可以选择从左边添加元素或者右边添加(用来模拟队列,存储顺序和插入顺序一致)
添加:
lpush key value : 将元素加入到列表最左边(注意不是追加)
rpush key value : 将元素加入到列表最右边
获取
lrange key start end : 从左边获取范围类的值(0,-1)获取所有元素
删除
lpop key : 删除列表最左边的元素,并将元素返回
rpop key : 删除列表最右边的元素,并返回
集合类型 set: 存储顺序和插入顺序不一致
存储 : sadd key value(可以一次存放对个value)
获取 : smembers key : 获取set集合中所有元素
删除 : srem key value : 删除某个元素
有序集合 sorted set : 关联一个double类型的分数,根据分数排序
存储 : zadd key score value
获取 : zrange key start end
删除 : zren key value
通用命令
keys * : 查询所有键
type key : 查询键对应值的类型
del key :删除指定key-value
持久化
redis是一个内存数据库, 当redis服务器重启数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中
redis持久化机制(不保证数据绝对安全,可能存在数据丢失):
RDB : 默认方式,不需要进行配置,默认就使用这种机制 //在一定的间隔时间中,检测key的变化情况,然后持久化数据
编辑redis.Windows.conf文件
save 900 1
// 900秒之内有一个键发生改变就进行一次持久化
save 300 10
// 300秒内有10个键发生改变就进行一次持久化
//save 60 10000 修改为:
save 10 5 // 十秒之内有5个键发生变化就持久化一次
重新启动redis服务器,并指定配置文件名称(使用cmd命令启动redis) redis -server.exe redis.windows.conf
AOF : 日志记录的方式,可以记录每一条命令的操作.可以每一次命令操作后,持久化数据(性能低,不推荐使用)
编辑redis.Windows.conf文件
appendonly no(默认) ---> appendonly yes(开启)
appendfsync always : 每一次操作都进行持久化
appendfsync everysec : 每隔一秒进行持久化一次
Java客服端 Jedis
一款java操作redis数据库的工具
依赖环境:
jedis.jar
commons-pool2.jar(必须为pool2.jar否则)
操作方法:
获取连接
Jedis jedis = new Jedis(host:"localhost", port:6379);
操作
jedis.set("username", "zhangsan")
关闭连接
jedis.close();
Jedis操作各种redis中的数据结构
jedis.setex(key:name, seconds:20, value:zhangsan); //插入限时键值对,20秒后自动删除
Jedis连接池
获取配置连接池对象:
JedisPoolConfig config = new JedisPoolConfig();
配置连接池:
config.setMaxtotal(50); // 设置最大连接数为50
创建连接池:
JedisPoll jedispoll = new JedisPoll()
获取连接:
Jedis jedis = jedispoll.getResource();
使用:
jedis.set(key, value);
归还连接:
jedis.close();
连接池配置参数
最大活动对象数:
redis.pool.maxTotal=1000;
最大能保持 idel状态的对象数:
redis.pool.maxIdle=100;
当池类没有返回对象时,最大等待时间
redis.pool.maxWaitMillis=10000;