redis安装

linux安装 官网 安装
访问虚拟机6379设置
  • 关闭防火墙
1
service iptables stop
  • 修改配置文件 redis.conf

    • bind 127.0.0.1 注释掉
    • protected-mode no 关闭保护模式
  • 重新启动

    src中输入

1
./redis-server ../redis.conf
常用命令行
进入数据操作
1
2
#src下
./redis-cli
清除redis
1
FLUSHDB
String
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#存入
SET key value
#set str 1

#获取
GET key
#例 get str

#截取字符串获取
GETRANGE key start end
#例 GETRANGE str 0 -1
#例 GETRANGE str 0 1

#字符串替换
SETRANGE key offset value
#例 SETRANGE str 1 aa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#增加1
INCR key
#例 INCR str

#减少1
DECR key
#例 DECR str

#自定义增长
INCRBY key increment
#例 INCRBY str 2

#自定义减少
DECRBY key increment
#例 DECRBY str 2
list
1
2
3
4
5
#存入
LPUSH key value
#例 LPUSH list str1
#例 LPUSH list str2
#例 LPUSH list str3
1
2
3
4
5
6
7
8
9
10
11
12
#查看listchangdu
LLEN key
#例 LLEN list

#查看
LRANGE key sart stop
#例查所有 LRANGE list 0 -1
#例查一部分 LRANGE list 0 1

#根据下标查看
LINDEX key index
#例 LINDEX list 0
1
2
3
4
5
6
7
8
9
10
11
12
#移除最左边
LPOP key
#例 LPOP list

#移除最右边
RPOP key
#例 RPOP list

#移除指定值
#value值可重复,count是移除几个
LREM key count value
#例 LREM list 1 str1
1
2
3
#截取list
LTRIM key start stop
#例 LTRIM list 1 2
1
2
3
#替换
LSET key index value
#例 LSET list 0 str1
1
2
3
4
5
#插入
LINSERT key BEFORE|AFTER pivot value
#
# LINSERT list BEFORE str1 str0.1
# LINSERT list AFTER str2 str2.1
Hash

与字符串相似,只不过value是键值对

1
2
3
4
5
6
7
8
9
#存入
HSET key field value
#例 HSET hash key value
HMSET key field value
#例 HSET hash key1 value key2 value

#获取
HGET key field
#例 HGET hash key
set
Zset

springboot整合redis

依赖
1
2
3
4
5
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.1.5.RELEASE</version>
</dependency>
config 序列化

RedisTemplate默认的所有序列化规则都是JDKSerializer,而StringRedisTemplate默认的序列化规则是StringRedisSerializer

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
@Configuration
public class RedisConfig {

@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<Object, Object>();
redisTemplate.setConnectionFactory(connectionFactory);

// 使用Jackson2JsonRedisSerialize替换默认序列化
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

jackson2JsonRedisSerializer.setObjectMapper(objectMapper);

// 设置key和value的序列化规则
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.afterPropertiesSet();

return redisTemplate;
}
}
yaml配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
spring:
redis:
# redis数据库索引(默认为0),我们使用索引为3的数据库,避免和其他数据库冲突
database: 0
# redis服务器地址(默认为loaclhost)
host: 192.168.255.129
# redis端口(默认为6379)
post: 6379
# redis访问密码(默认为空)
password:
# redis连接超时时间(单位毫秒)
timeout: 5000
# redis连接池配置
jedis:
pool:
# 最大空闲连接数(默认为8,负数表示无限)
max-idle: 8
# 最小空闲连接数(默认为0,负数表示无限)
min-idle: 0
# 最大可用连接数(默认为8,负数表示无限)
max-active: 8
存取数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Autowired
private RedisTemplate redisTemplate;

//存String
redisTemplate.opsForValue().set("str","这是存字符串");
//取String
redisTemplate.opsForValue().get("str").toString();
//存Hash
redisTemplate.opsForHash().put("hash","key","这是hash中map的value值");
//取Hash
redisTemplate.opsForHash().get("hash","key").toString();
//存set

//取set


注:

Redis与数据库关系

1.Redis可以做为数据库,但由于都是存在内存中,当Redis中数据越来越大,启动时都会全部放在内存中,会导致内存不够的情况,所以一般不作为数据库

2.Redis与数据库结合,做数据操作时,首先看Redis中是否存在数据,存在则对Redis中的数据进行操作,不存在则去数据库中取数据到Redis中进行数据操作,Redis会周期性的与数据库中的数据进行同步

目前有两种连接池 Jedis和Lettuce