持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情
通用指令
对于各个数据类型,redis提供了各自的指令来操作,而对于所有的数据类型,它们都有着一些通用的指令用来控制,一起来看看吧。
\
首先是删除指定的key:
del key
判断指定的key是否存在:
exists key
获取key的类型:
type key
key的时效性操作在前面已经简单接触了一下,现在来仔细了解了解,首先是为key设置有效时间:
expire key seconds # 设置有效时间,单位:秒
pexpire key milliseconds # 设置有效时间,单位:毫秒
expireat key timestamp # 设置时间戳,单位:秒
pexpireat key milliseconds-timestamp # 设置时间戳,单位:毫秒
获取key的剩余有效时间:
ttl key # 返回有效时间,单位:秒
pttl key # 返回有效时间,单位:毫秒
需要注意的是,这两个指令都能够返回key的剩余有效时间,所以若是key不存在,则返回-2;若是key存在但未设置有效时间,则返回-1;否则返回key的剩余有效时间。
\
将key从时效性切换为永久性:
persist key
redis提供了一些常用的查询指令帮助我们了解key的信息,比如查询指定条件的key:
keys pattern
其中pattern是匹配模式,若是指定为 *
则查询所有key:
keys *
它提供了三种匹配模式:
- *:匹配任意数量的任意符号
- ?:匹配一个任意符号
- []:匹配一个指定符号
\
为key修改名字:
rename key newkey
renamenx key newkey
需要注意 rename
指令将当前key修改为已经存在的key时,该key的值会被覆盖,而 renamenx
会报错,所以 renamenx
能够避免覆盖的情况发生。
\
对所有key排序:
sort
随着数据量的逐渐增大,key极易出现重复、出错的情况,大量的数据混杂在一起也很难分别处理,为此,redis提供了数据库的概念。
redis为每个服务提供了16个数据库,编号为0~15,每个数据库之间的数据是相互独立的。
\
切换数据库:
select index
默认使用的是0号数据库,若是想切换至3号,则:
select 3
数据移动:
move key db
将当前数据库指定的key移动到指定的数据库,比如将 name
移动到3号数据库(移动之后,原数据库的key就不存在了):
move name 3
数据清除:
dbsize # 返回当前数据库的key数量
flushdb # 清空当前数据库的key
flushall # 清空所有数据库的key
Jedis
在项目开发中,我们需要使用Java来帮助我们操作redis,所以来了解一下Java操作redis的工具——Jedis。
\
引入依赖:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.3.0</version>
</dependency>
首先来测试一下能够连接成功:
@Test
public void testJedis(){
// 连接redis
Jedis jedis = new Jedis("127.0.0.1", 6379);
System.out.println(jedis.ping());
}
输出结果:
PONG
输出 PONG
则说明连接成功了,那么jedis该如何操作redis呢?
\
操作方法与在redis中的操作一模一样,所以我们可以直接调用同名的方法即可,比如保存一个string类型的数据:
@Test
public void testJedis(){
Jedis jedis = new Jedis("127.0.0.1", 6379);
jedis.set("name","zhangsan");
String name = jedis.get("name");
System.out.println(name);
}
若是保存list数据,则调用 lpush
或 rpush
方法:
@Test
public void testJedis(){
Jedis jedis = new Jedis("127.0.0.1", 6379);
jedis.lpush("nums","1","2","3","4","5");
// 获取所有数据
List<String> nums = jedis.lrange("nums",0,-1);
for (String num : nums) {
System.out.println(num);
}
}
若是保存hash数据,则调用 hset
方法:
@Test
public void testJedis() {
Jedis jedis = new Jedis("127.0.0.1", 6379);
jedis.hset("user", "name", "zhangsan");
jedis.hset("user", "age", "20");
String name = jedis.hget("user", "name");
String age = jedis.hget("user", "age");
System.out.println(name + ":" + age);
}
因为需要频繁操作jedis,所以我们可以为其编写一个简单的工具类:
package com.wwj.util;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.util.ResourceBundle;
public class JedisUtil {
private static JedisPool jedisPool = null;
private static final String host;
private static final Integer port;
private static final Integer maxTotal;
private static final Integer maxIdle;
/**
* 加载连接池,只执行一次
*/
static {
// 加載配置文件
ResourceBundle bundle = ResourceBundle.getBundle("redis");
host = bundle.getString("redis.host");
port = Integer.parseInt(bundle.getString("redis.port"));
maxTotal = Integer.parseInt(bundle.getString("redis.maxTotal"));
maxIdle = Integer.parseInt(bundle.getString("redis.maxIdle"));
// 配置连接池信息
JedisPoolConfig config = new JedisPoolConfig();
// 设置最大连接数
config.setMaxTotal(maxTotal);
// 设置活动连接数
config.setMaxIdle(maxIdle);
jedisPool = new JedisPool(config, host, port);
}
/**
* 获取Jedis连接
*
* @return
*/
public static Jedis getJedis() {
return jedisPool.getResource();
}
}
配置文件:
redis.host=127.0.0.1
redis.port=6379
redis.maxTotal=30
redis.maxIdle=10
Linux下的Redis
现在我们已经对redis有了一个大致的认识,下面我们就在linux环境下来看看redis的一些更加高级的操作,首先下载redis的压缩包:
wget http://download.redis.io/releases/redis-4.0.0.tar.gz
解压一下:
tar -zxvf redis-4.0.0.tar.gz
进入解压后的目录,然后进行编译安装:
cd redis-4.0.0
make install
首先将redis中的配置文件复制一份:
cp redis.conf redis-6379.conf
并修改配置文件:
daemonize yes # 以守护进程的方式启动
logfile "6379.log" # 指定日志文件名
dir /opt/redis-4.0.0/logs # 指定日志的存放位置
此时以该配置文件启动redis:
redis-server redis-6379.conf
我们可以查看日志来判断redis是否成功启动了:
cd /opt/redis-4.0.0/logs
cat 6379.log
日志内容:
8454:C 15 Mar 02:57:25.275 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
8454:C 15 Mar 02:57:25.276 # Redis version=4.0.0, bits=64, commit=00000000, modified=0, pid=8454, just started
8454:C 15 Mar 02:57:25.276 # Configuration loaded
8455:M 15 Mar 02:57:25.279 * Increased maximum number of open files to 10032 (it was originally set to 1024).
8455:M 15 Mar 02:57:25.281 # Creating Server TCP listening socket 127.0.0.1:6379: bind: Address already in use
通过日志我们发现,6379端口好像被占用了,我们只需查看哪个应用占用了6379端口,并将其kill掉然后重新启动redis即可。
\
通过配置文件启动的方式可以非常方便地实现多个redis服务的启动,现在复制一个刚才的配置文件:
cp redis-6379.conf redis-6380.conf
然后修改redis-6380.conf:
port 6380
把端口修改为6380,然后启动该redis服务:
redis-server redis-6380.conf
logfile "6380.log"
同样检查日志即可判断redis服务是否成功启动。
\
服务启动完成后,若是想连接redis进行操作,则:
redis-cli -p 6379
若是不指定端口号,则默认使用6379端口进行连接。