安装
centos7下安装
- 官网找到最新稳定版,复制下载地址

- 下载
wget http://download.redis.io/releases/redis-6.0.5.tar.gz - 解压,编译
tar -zxvf redis-6.0.5.tar.gzcd redis-6.0.5/make
如果安装失败,出现很多gcc模块找不到,此时需要升级gcc后再安装
yum install centos-release-scl scl-utils-build# 升级到gcc8yum 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@Logpublic class JedisTest {@Testpublic 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排序// 哈希表hsetlog.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);});// 删除keyjedis.del("s.t1");jedis.del("l.t1");jedis.del("set.t1");jedis.del("zset.t1");jedis.del("hset.t1");}}}
