Redis概念
redis是一款高性能的NOSQL(not only sql)系列的非关系型数据库 数据存储在内存中 读写速度很快
关系型和非关系型数据库比较
下载安装
官网:https://redis.io 中文网:http://www.redis.net.cn 解压直接使用
redis.windows.conf:配置文件 redis-cli.exe:redis的客户端 redis-server.exe:redis服务器端
命令操作
redis数据结构
redis存储的是:key,value格式的数据,其中key都是字符串,value有五种不同的数据结构 五种数据结构
字符串类型 string 哈希类型 hash :map格式 列表类型 list(允许重复) :linkedlist格式 集合类型 set 有序集合类型 sortedset 字符串类似 string
存储:set key value
获取:get key
删除:del key
哈希类型 hash :map格式
存储:hset key field value
例:hset myhash username zhangsan
获取指定field下value:hget key field
获取指定key下所有field和value:hgetall key
删除:hdel key field
列表类型 list(允许重复) :linkedlist格式
可以添加一个元素到列表的头部或者尾部 从左边添加元素:lpush key value
从右边添加元素:rpush key value
范围获取:lrange key start end
(全部范围:0 -1) 删除列表最左边的元素并返回:lpop key
删除列表最右边的元素并返回:rpop key
集合类型 set 不允许重复
存储:sadd key value
获取所有元素:smembers key
删除:srem key value
有序集合类型 sortedset 不允许重复切有序
存储:zadd key score value
获取(带上分数):zrange key start end (withscores)
删除:zren key value
通用命令
查询所有键:keys *
查询键对应的value的类型:type key
删除指定的key value:del key
持久化操作
redis是一个内存数据库,当redis服务器重启,或者电脑重启,数据会丢失。我们可以将redis内存中的数据持久化保存到文件中 redis持久化机制:
RDB:默认方式(不需要进行配置,默认使用这种机制)
在一定的时间间隔中,检测key的变化情况,然后持久化数据 AOF:日志记录的方式
可以记录每一条命令的操作。可以每一次命令操作后持久化数据 ROB使用步骤
编辑redis.windows.conf文件
save 900 1 表示 after 900 sec (15 min) if at least 1 key changed
save 300 10 表示 after 300 sec (5 min) if at least 10 keys changed
save 60 10000 表示 after 60 sec if at least 10000 keys changed
重新启动redis服务器并制定配置文件名称
redis-server.exe redis.windows.conf
AOF使用步骤
编辑redis.windows.conf文件 找到appendonly no
改成appendonly yes
找到appendfsync everysec
可以进行设置
appendfsync always
:每一次操作都进行持久化appendfsync everysec
:每秒持久化一次(默认)appendsfsync no
:不持久化
Jedis
Jedis:一款java操作redis数据库的工具 下载jar包可以使用
实例代码
public class JedisTest {
@Test
public void test2 ( ) {
Jedis jedis = new Jedis ( ) ;
jedis. set ( "username" , "zhangsan" ) ;
String username = jedis. get ( "username" ) ;
jedis. setex ( "activecode" , 20 , "hehe" ) ;
jedis. hset ( "user" , "name" , "lisi" ) ;
jedis. hset ( "user" , "age" , "23" ) ;
jedis. hset ( "user" , "gender" , "female" ) ;
String name = jedis. hget ( "user" , "name" ) ;
Map< String, String> user = jedis. hgetAll ( "user" ) ;
jedis. lpush ( "mylist" , "a" , "b" , "c" ) ;
jedis. rpush ( "mylist" , "a" , "b" , "c" ) ;
List< String> mylist = jedis. lrange ( "mylist" , 0 , - 1 ) ;
String element1 = jedis. lpop ( "mylist" ) ;
String element2 = jedis. rpop ( "mylist" ) ;
jedis. sadd ( "myset" , "java" , "php" , "c++" ) ;
Set< String> myset = jedis. smembers ( "myset" ) ;
jedis. zadd ( "mysortedset" , 3 , "亚瑟" ) ;
jedis. zadd ( "mysortedset" , 30 , "后裔" ) ;
jedis. zadd ( "mysortedset" , 55 , "孙悟空" ) ;
Set< String> mysortedset = jedis. zrange ( "mysortedset" , 0 , - 1 ) ;
jedis. close ( ) ;
}
}
Jedis连接池:JedisPool
创建一个配置对象 创建JedisPool连接池对象 获取连接 使用 关闭
JedisPoolConfig config = new JedisPoolConfig ( ) ;
config. setMaxTotal ( 50 ) ;
config. setMaxIdle ( 10 ) ;
JedisPool jedisPool = new JedisPool ( config, "localhost" , 6379 ) ;
Jedis jedis = jedisPool. getResource ( ) ;
jedis. set ( "hehe" , "heihei" ) ;
jedis. close ( ) ; ;