安装
centos7下安装
- 官网找到最新稳定版,复制下载地址
- 下载
wget http://download.redis.io/releases/redis-6.0.5.tar.gz
- 解压,编译
tar -zxvf redis-6.0.5.tar.gz
cd redis-6.0.5/
make
如果安装失败,出现很多gcc模块找不到,此时需要升级gcc后再安装
yum install centos-release-scl scl-utils-build
# 升级到gcc8
yum install -y devtoolset-8-toolchain
# 查看是否安装成功
gcc -v
# 再次执行make编译
make
- 启动
src/redis-server
- 连接,新打开一个连接窗口,切换到redis目录
cd env/redis-6.0.5/
,执行src/redis-cli
连接完成后即可开始执行相关redis
命令了
配置
远程连接
默认redis只监听本地ip的客户端连接请求,有时候我们需要远程连接redis,此时我们需要修改配置文件 vi redis.conf
- 注释掉
bind ...
- 修改
protected-mode no
指定配置文件重启redis
, src/redis-server ./redis.conf
,现在就可以开始远程连接redis了
后台启动
默认src/redis-server ./redis.conf
命令启动redis会在当前终端运行,关闭终端则进程就结束了
修改 daemonize yes
,重启redis,此时redis则会运行在后台(以linux守护进程的方式运行)
配置文件说明
配置属性 | 配置示例 | 说明 |
---|---|---|
port |
port 6379 | 启动监听端口 |
daemonize |
daemonize no | 是否以守护进程启动,daemonize yes表示是 |
save |
save 900 1 | 控制什么时候将内存数据同步到磁盘rdb文件;例如”save 900 1 “表示900秒内至少一个key发生变化(新增,修改,删除)则同步,save可配置多行记录,只要一个规则满足条件则同步 |
dbfilename |
dbfilename dump.rdb | 持久化rbd文件的名称 |
dir |
dir ./ | 数据库文件存放目录 |
requirepass |
requirepass 123456 | 指定redis连接的验证密码,redis6以后提供了ACL 权限验证 |
….. 更多配置请查看配置文件
客户端连接
使用 Redis Desktop Manager
客户端连接 redis
数据库说明
db0 - db15
代表redis的数据库,与mysql的数据库概念类似- 默认有16个数据库,可在配置文件中指定
databases 16
- 每个数据库有独立的空间,不同数据库相同
key
并不会冲突 - 可通过
select
命令手动指定数据库,例如select 1
则切换到数据库db1
新建key
选择指定的数据库,点击新建按钮
控制台
打开控制台,执行redis命令
服务器命令
info
显示redis服务器的统计信息select 数据库名称
选择数据库,默认选择数据库0save
保存数据到磁盘flushdb
删除当前数据库的所有key,请勿随意操作dbsize
返回当前数据库的key数量config get 配置属性名
获取配置属性的值
config set 配置属性名 配置属性值
临时修改配置参数,无需重启,重启后修改失效
数据类型
参考文档:https://www.redis.net.cn/order/
String 字符串
- 设置:
set key value
- 设置多个key-value:
set key1 value1 key2 value2 ...
- 设置值及过期时间:
setex key seconds value
,以秒为单位设置过期时间; psetex 以毫秒为单位 - 获取:
get key
- 获取多个key:
mget key1 key2 key3 ...
- 返回key的旧值,并设置新值:
getset key newValue
- 获取字符串长度:
strlen key
- 字符串追加:
append key
,如果key存在,则追加,不存在则与 set 命令功能一样 - 将存储的数字+1:
incr key
,如果不是数字则会报错,如果不存在则默认为0,然后+1- 将存储的数字+num:
incrby key num
- 将存储的数字-1:
decr key
- 将存储的数字减去指定数字num:
decrby key num
- 将存储的数字+num:
- 获取key中字符串的子串:
getrange key start end
List 列表
- 在列表头部插入元素:
lpush key value1 value2 ...
- 在列表尾部插入元素:
rpush key value1 value2 ...
- 获取列表指定范围内的元素:
lrange key start end
- 获取列表长度:
llen key
- 通过索引获取列表元素:
lindex key index
,index=0获取第一个元素,index=-1获取最后一个元素 - 通过索引设置元素的值:
lset key index value
- 移除列表最后一个元素:
rpop key
- 移除列表第一个元素:
lpop key
- 移除列表元素:
lrem key count value
,根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素- count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。
- count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。
- count = 0 : 移除表中所有与 value 相等的值
Hash 哈希表
- 设置单个field-value对到哈希表中
hset key field value
- 同时将多个 field-value (字段-值)对设置到哈希表中:
hmset key field1 value1 field2 value2 ...
- 获取哈希表中指定field的值:
hget key field
- 获取哈希表中所有field的value集合:
hmget key field1 field2 ...
- 获取哈希表中所有field,
hkeys key
- 获取哈希表中所有value,
hvals key
- 获取表中的所有field-value:
hgetall key
- 判断哈希表中field是否存在:
hexists key field
- 删除哈希表中的字段:
hdel key field1 field2 ...
- 获取哈希表中字段数量:
hlen key
Set 集合
- 向集合中添加元素,
sadd key value1 value2 ...
,value重复则会被忽略 - 获取集合所有元素,
smembers key
- 移除集合元素,
srem key value1 value2 ...
- 将集合a的元素移动到集合b中,
smove set1 set2 set1_value
,将set1中的set1_value移动到set2中
Zset 有序集合
与 Set 类似,不重复的集合,但是保值有序,加入元素时会设置score值,越小排序越靠前
- 添加元素,
zadd key score value
- 获取指定区间的元素(从小到大排序),
zrange key start end
- 获取指定区间的元素(从大到小排序),
zrevrange key start end
- 获取在指定score区间内的成员数量,
zcount key min_score max_score
- 移除元素,
zrem key value
Java使用Redis
Jedis
依赖引入
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.3.0</version>
</dependency>
连接测试
package redis;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.java.Log;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import java.util.List;
import java.util.Set;
/**
* @author yanhui@git.com.cn
* @since 2020-06-18 15:27
*/
@Getter
@Setter
@Log
public class JedisTest {
@Test
public void startJedis() {
try (Jedis jedis = new Jedis("ip***", 6379);) {
// 密码认证
jedis.auth("***");
// 添加字符串
jedis.set("s.t1", "yanhui");
// 获取字符串
String t1Value = jedis.get("s.t1");
log.info(t1Value);
// 列表list操作
log.info("list操作");
String listKey = "l.t1";
jedis.lpush(listKey, "1", "2", "3", "4");
List<String> lValue = jedis.lrange(listKey, 0, 3);
lValue.forEach(System.out::println);
log.info(jedis.llen(listKey).toString());
// 集合set操作
log.info("set操作");
String setKey = "set.t1";
jedis.sadd(setKey, "a", "b", "c");
Set<String> setValue = jedis.smembers(setKey);
setValue.forEach(System.out::println);
// 有序集合zset操作
log.info("zset操作");
String zSetKey = "zset.t1";
jedis.zadd(zSetKey, 100, "a");
jedis.zadd(zSetKey, 200, "b");
jedis.zadd(zSetKey, 300, "c");
Set<String> zSetValue = jedis.zrange(zSetKey, 0, 3);
zSetValue.forEach(System.out::println);// 结果根据权重大小score排序
// 哈希表hset
log.info("hset操作");
String hSetKey = "hset.t1";
jedis.hset(hSetKey, "k1", "v1");
jedis.hset(hSetKey, "k2", "v2");
jedis.hset(hSetKey, "k3", "v3");
Map<String, String> hsetValue = jedis.hgetAll(hSetKey);
hsetValue.forEach((k, v) -> {
log.info(k);
log.info(v);
});
// 删除key
jedis.del("s.t1");
jedis.del("l.t1");
jedis.del("set.t1");
jedis.del("zset.t1");
jedis.del("hset.t1");
}
}
}