redis

"redis"

Posted by zwt on November 30, 2020

安装

链接:https://pan.baidu.com/s/1mJJxjbQl16P2dP97bFUVqw 提取码:fl3z

下载之后解压

启动redis

1
Redis-x64-3.0.504> .\redis-server.exe .\redis.windows.conf

默认没有密码

基础

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)

redis最大链接数默认最大10000

使用

python

redis批量的插入数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
    def batch_add(self, batch_size, data):
        try:
            count = 0
            pipeline_redis = self.connect.client().pipeline()
            for line in data:
                key, value = self.label+str(line[0]), line[1]
                pipeline_redis.rpush(key, value.strip())
                if not count % batch_size:
                    pipeline_redis.execute()
                    count = 0
            pipeline_redis.execute()
        except Exception:
            logger.error('入库redis失败')

获取所有的key:

1
conn.keys()

删除:

1
2
for elem in redis_conn.keys():
    redis_conn.delete(elem)

scan:

1
2
1.connection.scan_iter()
2.connection.scan_iter("*")

过期时间

1
r.expire(_key, 2) # 这个键在2秒后就无效了

Java

Redistemplate模板配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Configuration
public class RedisConfig {
    @Bean
    @SuppressWarnings("SpringJavaAutowiringInspection")
    public RedisTemplate<String, Serializable> redisTemplate(LettuceConnectionFactory connectionFactory) {
        RedisTemplate<String, Serializable> redisTemplate = new RedisTemplate<>();
        RedisSerializer keySerializer = new StringRedisSerializer();
        RedisSerializer valueSerializer = new GenericJackson2JsonRedisSerializer();
        redisTemplate.setKeySerializer(keySerializer);
        redisTemplate.setValueSerializer(valueSerializer);
        redisTemplate.setHashKeySerializer(keySerializer);
        redisTemplate.setHashValueSerializer(valueSerializer);
        redisTemplate.setConnectionFactory(connectionFactory);
        return redisTemplate;}}

设置缓存时间

1
2
3
@Autowired
private RedisTemplate<String, String> redisTemplate;
redisTemplate.opsForValue().set(key, value, 60, TimeUnit.SECONDS);

存在问题

spring-boot自带的redis集成了jedis,会存在连接超时的问题

1
2
1、Lettuce 自适应拓扑刷新(Adaptive updates)与定时拓扑刷新(Periodic updates) 是默认关闭的。
2、项目用了k8s做docker容器化部署,但是k8s有设置空闲连接超时就断开,所以当你从连接池拿到被断开的连接时就会报错。

解决:

1
2
3
4
5
6
# 解决redis 240秒超时问题
    lettuce:
      cluster:
        refresh:
          adaptive: true
          period: 20

参考

  1. python操作redis方法总结
  2. redis参考