redis

一款高性能的NOSQL系列的非关系型数据库

入门

  1. 下载安装(下载完毕直接解压使用)
  2. 各文件作用
    • redis.windows.conf 配置文件
    • redis-cli.exe redis的客户端
    • redis-server.exe redis服务器端
  3. 使用
    打开服务器端,再打开客户端

    操作

    redis的数据结构

  • 字符串类型 string
  • 哈希类型 hash(map格式)
  • 列表类型 list(linkedlist格式)
  • 集合类型 set(不允许重复)
  • 有序集合类型 sortedser(不允许重复元素)

    命令操作

    字符串类型

  1. 存储:set key value
1
set username zhangsan
  1. 获取: get key
1
get username
  1. 删除: del key
1
del age

哈希类型 hash

  1. 存储: hset key field value
1
2
hset myhash username lisi
hset myhash password 123
  1. 获取:
    • hget key field: 获取指定的field对应的值
    • hgetall key:获取所有的field和value
1
2
hget myhash username
hgetall myhash
  1. 删除: hdel key field
1
hdel myhash username

列表类型 list:可以添加一个元素到列表的头部(左边)或者尾部(右边)

  1. 添加:

    1. lpush key value: 将元素加入列表左表

    2. rpush key value:将元素加入列表右边

1
2
3
4
5
6
127.0.0.1:6379> lpush myList a
(integer) 1
127.0.0.1:6379> lpush myList b
(integer) 2
127.0.0.1:6379> rpush myList c
(integer) 3
  1. 获取:
    • lrange key start end :范围获取
1
2
3
4
127.0.0.1:6379> lrange myList 0 -1
1) "b"
2) "a"
3) "c"
  1. 删除:
    • lpop key: 删除列表最左边的元素,并将元素返回
    • rpop key: 删除列表最右边的元素,并将元素返回

集合类型 set : 不允许重复元素

  1. 存储:sadd key value
1
2
3
4
127.0.0.1:6379> sadd myset a
(integer) 1
127.0.0.1:6379> sadd myset a
(integer) 0
  1. 获取:smembers key:获取set集合中所有元素
1
2
127.0.0.1:6379> smembers myset
1) "a"
  1. 删除:srem key value:删除set集合中的某个元素
1
2
127.0.0.1:6379> srem myset a
(integer) 1

有序集合类型 sortedset

不允许重复元素,且元素有顺序.每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

  1. 存储:zadd key score value
1
2
3
4
5
6
127.0.0.1:6379> zadd mysort 60 zhangsan
(integer) 1
127.0.0.1:6379> zadd mysort 50 lisi
(integer) 1
127.0.0.1:6379> zadd mysort 80 wangwu
(integer) 1
  1. 获取:zrange key start end [withscores]
1
2
3
4
5
6
7
8
9
10
11
12
127.0.0.1:6379> zrange mysort 0 -1
1) "lisi"
2) "zhangsan"
3) "wangwu"

127.0.0.1:6379> zrange mysort 0 -1 withscores
1) "zhangsan"
2) "60"
3) "wangwu"
4) "80"
5) "lisi"
6) "500"
  1. 删除:zrem key value
1
2
127.0.0.1:6379> zrem mysort lisi
(integer)

通用命令

  1. keys * : 查询所有的键
  2. type key : 获取键对应的value的类型
  3. del key:删除指定的key value

redis持久化

redis是一个内存数据库,当redis服务器重启,获取电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中。

redis持久化机制:

  1. RDB:默认方式,不需要进行配置,默认就使用这种机制
    ( 在一定的间隔时间中,检测key的变化情况,然后持久化数据)

1.编辑redis.windwos.conf文件

1
2
3
4
5
6
7

# 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

2.重新启动redis服务器,并指定配置文件名称

1
D:\JavaWeb2018\day23_redis\资料\redis\windows-64\redis-2.8.9>redis-server.exe redis.windows.conf
  1. AOF:日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据
  2. 编辑redis.windwos.conf文件
1
2
3
4
5
appendonly no(关闭aof) --> appendonly yes (开启aof)

# appendfsync always : 每一次操作都进行持久化
appendfsync everysec : 每隔一秒进行一次持久化
# appendfsync no : 不进行持久化

Java客户端–Jedis

  • 使用步骤:
    1. 下载jedis的jar包
    2. 使用
1
2
3
4
5
6
//1. 获取连接
Jedis jedis = new Jedis("localhost",6379);
//2. 操作
jedis.set("username","zhangsan");
//3. 关闭连接
jedis.close();

Jedis操作各种redis中的数据结构

  1. 字符串类型 string
1
2
3
4
5
6
7
8
9
10
11
12
//1. 获取连接
Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
//2. 操作
//存储
jedis.set("username","zhangsan");
//获取
String username = jedis.get("username");
System.out.println(username);
//可以使用setex()方法存储可以指定过期时间的 key value
jedis.setex("activecode",20,"hehe");//将activecode:hehe键值对存入redis,并且20秒后自动删除该键值对
//3. 关闭连接
jedis.close();
  1. 哈希类型 hash : map格式
    hset
    hget
    hgetAll
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//1. 获取连接
Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
//2. 操作
// 存储hash
jedis.hset("user","name","lisi");
jedis.hset("user","age","23");
jedis.hset("user","gender","female");

// 获取hash
String name = jedis.hget("user", "name");
System.out.println(name);


// 获取hash的所有map中的数据
Map<String, String> user = jedis.hgetAll("user");

// keyset
Set<String> keySet = user.keySet();
for (String key : keySet) {
//获取value
String value = user.get(key);
System.out.println(key + ":" + value);
}
//3. 关闭连接
jedis.close();
  1. 列表类型 list : linkedlist格式。支持重复元素
    lpush / rpush
    lpop / rpop
    lrange start end : 范围获取
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//1. 获取连接
Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
//2. 操作
// list 存储
jedis.lpush("mylist","a","b","c");//从左边存
jedis.rpush("mylist","a","b","c");//从右边存

// list 范围获取
List<String> mylist = jedis.lrange("mylist", 0, -1);
System.out.println(mylist);

// list 弹出
String element1 = jedis.lpop("mylist");//c
System.out.println(element1);
String element2 = jedis.rpop("mylist");//c
System.out.println(element2);

// list 范围获取
List<String> mylist2 = jedis.lrange("mylist", 0, -1);
System.out.println(mylist2);
//3. 关闭连接
jedis.close();
  1. 集合类型 set : 不允许重复元素
    sadd
    smembers:获取所有元素
1
2
3
4
5
6
7
8
9
10
11
//1. 获取连接
Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
//2. 操作
// set 存储
jedis.sadd("myset","java","php","c++");

// set 获取
Set<String> myset = jedis.smembers("myset");
System.out.println(myset);
//3. 关闭连接
jedis.close();
  1. 有序集合类型 sortedset:不允许重复元素,且元素有顺序
    zadd
    zrange
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//1. 获取连接
Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
//2. 操作
// sortedset 存储
jedis.zadd("mysortedset",3,"亚瑟");
jedis.zadd("mysortedset",30,"后裔");
jedis.zadd("mysortedset",55,"孙悟空");

// sortedset 获取
Set<String> mysortedset = jedis.zrange("mysortedset", 0, -1);

System.out.println(mysortedset);


//3. 关闭连接
jedis.close();