1. 数据结构
5 种数据结构:
- 字符串 string
- 列表 list
- 哈希 hash
- 集合 set
- 有序集合 zset
2. 常用命令
2.1 启动、关闭
./redis-server redis.conf &
./redis-cli -p 6880
./redis-cli -p 6880 shutdown
2.2 全局命令
key */*ool # 查看所有键
dbsize # 查看指定数据库中键总数,如果存在大量键,线上禁止使用此命令
exists key # 检查键是否存在
del key # 删除 key
expire key seconds # 设置过期时间
ttl key # 查看键剩余的过期时间
type key # 查看键的数据结构类型
select 1 # 切换库
flushdb 2 # 清空数据库 2
flushall # 清空所有数据库
2.3 字符串命令
set key value # 设置键、值
get key # 获取值
set key value ex 10 # 设置 10s 后过期
set key value px 1000 # 设置 1000ms 后过期
setnx key value # 不存在 key 返回 1,设置成功;存在 key 返回 0,设置失败
mset key1 vlaue1 key2 value2 # 批量设置键、值
mget key1 key2 # 批量获取值
incr key # 加 1
decr key # 减 1
incrby key 2 # 加 2
decrby key 2 # 减 2
incrbyfloat key 1.1 # 加 1.1
append key value2 # 在原 value 上追加 value2
strlen key # 字符串长度
getrange key 2 4 # 返回 value 中 2-4 位
2.4 列表命令
lpush key value1 value2 # 左侧添加 value1 value2
rpush key value1 value2 # 右侧添加 value1 value2
lpop key # 删除左侧第一个元素
rpop key # 删除右侧第一个元素
lrange key 0 -1 # 从左到右获取所有元素
linsert key after value1 value2 # 在 value1 之前插入 value2
lindex key index # 返回 index 处的元素
llen key # 返回列表长度
2.5 哈希命令
hset key field value # 设置值
hget key field # 获取值
hdel key filed # 删除值
hmset key field1 value1 field2 value2 # 批量设置值
hmget key filed1 filed2 # 批量获取值
hexist key filed1 # 判断 field 是否存在
2.6 集合命令
sadd key value1 value2 value3 # 添加值
smembers key # 获取所有元素
scard key # 计算元素个数
srem key value1 # 删除 value1
sinter key1 key2 # 交集
sunion key1 key2 # 并集
sdiff key1 key2 # 叉集
2.7 有序集合命令
zadd key socre1 member1 # 添加
zrank key member1 # 排名
zscore key member1 # 分数
zcard key # 返回总数
zrange key 0 3 # 按范围返回成员
3. Java 客户端
- Maven
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.6.3</version>
</dependency>
- 配置
# Redis服务器地址
redis.host=127.0.0.1
# Redis服务器连接端口
redis.port=6880
# Redis服务器连接密码(默认为空)
redis.password=null
redis.timeout=30000
# 连接池最大连接数(使用负值表示没有限制)
redis.maxTotal=30
# 连接池中的最大空闲连接
redis.maxIdle=10
redis.numTestsPerEvictionRun=1024
redis.timeBetweenEvictionRunsMillis=30000
redis.minEvictableIdleTimeMillis=1800000
redis.softMinEvictableIdleTimeMillis=10000
# 连接池最大阻塞等待时间(使用负值表示没有限制)
redis.maxWaitMillis=1500
redis.testOnBorrow=true
redis.testWhileIdle=true
redis.blockWhenExhausted=false
redis.JmxEnabled=true
- 使用
@Configuration
@PropertySource("classpath:application.properties")
public class RedisConfig {
@Value("${redis.host}")
private String host;
@Value("${redis.port}")
private int port;
@Value("${redis.timeout}")
private int timeout;
@Value("${redis.maxIdle}")
private int maxIdle;
@Value("${redis.maxWaitMillis}")
private int maxWaitMillis;
@Value("${redis.blockWhenExhausted}")
private Boolean blockWhenExhausted;
@Value("${redis.JmxEnabled}")
private Boolean JmxEnabled;
@Bean
public JedisPool jedisPoolFactory() {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(maxIdle);
jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
// 连接耗尽时是否阻塞, false报异常, true阻塞直到超时, 默认true
jedisPoolConfig.setBlockWhenExhausted(blockWhenExhausted);
// 是否启用pool的jmx管理功能, 默认true
jedisPoolConfig.setJmxEnabled(JmxEnabled);
JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout);
return jedisPool;
}
}
@Component
public class RedisString {
public final static String RS_STR_NS = "redis:";
@Autowired
private JedisPool jedisPool;
public String set(String key, String value) {
try (Jedis jedis = jedisPool.getResource()) {
return jedis.set(RS_STR_NS + key, value);
} catch (Exception e) {
throw new RuntimeException("向Redis中存值失败!");
}
}
}
@SpringBootTest
public class TestRedisString {
@Autowired
private RedisString redisString;
@Test
void testSet() {
System.out.println(redisString.set("test", "Hello Java"));
}
}