Redis进阶-Redis使用建议一二事

文章目录

  • 命令使用
  • 客户端使用

在这里插入图片描述


命令使用

  • 【推荐】 O(N)命令关注N的数量

    例如hgetall、lrange、smembers、zrange、sinter等并非不能使用,但是需要明确N的值。有遍历的需求可以使用hscan、sscan、zscan代替。


  • 【推荐】 禁用命令

    禁止线上使用keys、flushall、flushdb等,通过redis的rename机制禁掉命令,或者使用scan的 方式渐进式处理。


  • 【推荐】合理使用select

    redis的多数据库较弱,使用数字进行区分,很多客户端支持较差,同时多业务用多数据库实际还是单线程处理,会有干扰。


  • 【推荐】使用批量操作提高效率

    原生命令:例如mget、mset。
    非原生命令:可以使用pipeline提高效率

    但要注意控制一次批量操作的元素个数(例如500以内,实际也和元素字节数有关)。

  • pipeline vs 原生命令

    1. 原生的命令是原子操作,pipeline是非原子操作。
    2. pipeline可以打包不同的命令,原生做不到
    3. pipeline需要客户端和服务端同时支持


  • 【建议】Redis事务功能较弱,不建议过多使用,可以用lua替代

客户端使用

  • 【推荐】 避免多个应用使用一个Redis实例

    正例:不相干的业务拆分,公共数据做服务化。


  • 【推荐】 使用带有连接池的数据库,可以有效控制连接,同时提高效率,标准使用方式:
  
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * @author 小工匠
 * @version v1.0
 * @create 2020-03-23 22:27
 * @motto show me the code ,change the word
 * @blog https://artisan.blog.csdn.net/
 * @description
 **/

public class Test {


    public static void main(String[] args) {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(20);
        jedisPoolConfig.setMaxIdle(10);
        jedisPoolConfig.setMinIdle(5);

        JedisPool jedisPool = new JedisPool(jedisPoolConfig,"192.168.18.130",6379,3000, null);
        Jedis jedis = null;

        try{
            jedis = jedisPool.getResource();
            jedis.set("artisan","biubiubiu~");
            String value = jedis.get("artisan");
            System.out.println(value);
        }catch (Exception e){
            e.printStackTrace();
        } finally {
            //注意这里不是关闭连接,在JedisPool模式下,Jedis会被归还给资源池。
            if (jedis != null)  jedis.close();
        }
    }
}

Redis进阶-Redis使用建议一二事_第1张图片


  • 【建议】高并发下建议客户端添加熔断功能(例如netflix hystrix)

  • 【建议】 设置合理的密码,如有必要可以使用SSL加密访问

你可能感兴趣的:(【Redis-进阶实战】)