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

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 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();
        }
    }
}


  • 【建议】高并发下建议客户端添加熔断功能(例如netflix hystrix)
  • 【建议】 设置合理的密码,如有必要可以使用SSL加密访问


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
4月前
|
存储 缓存 Java
【Spring原理高级进阶】有Redis为啥不用?深入剖析 Spring Cache:缓存的工作原理、缓存注解的使用方法与最佳实践
【Spring原理高级进阶】有Redis为啥不用?深入剖析 Spring Cache:缓存的工作原理、缓存注解的使用方法与最佳实践
|
4月前
|
NoSQL Java Redis
Redis进阶-Jedis以及Spring Boot操作 Redis 5.x Cluster
Redis进阶-Jedis以及Spring Boot操作 Redis 5.x Cluster
97 0
|
3月前
|
NoSQL 数据可视化 Java
rodert单排学习redis进阶【白银一】
rodert单排学习redis进阶【白银一】
22 0
|
3月前
|
NoSQL Redis 数据库
rodert单排学习redis进阶【青铜】2
rodert单排学习redis进阶【青铜】
26 0
|
3月前
|
缓存 NoSQL Java
rodert单排学习redis进阶【青铜】1
rodert单排学习redis进阶【青铜】
34 0
|
3月前
|
NoSQL 关系型数据库 MySQL
Redis进阶-select 1. /xxx 切换数据库DBSIZE- 获取当前数据库中的key的个数flushdb-删除当前数据的所有keyflushall-删除所有表的所有库Re
Redis进阶-select 1. /xxx 切换数据库DBSIZE- 获取当前数据库中的key的个数flushdb-删除当前数据的所有keyflushall-删除所有表的所有库Re
|
4月前
|
消息中间件 存储 缓存
【Redis实战】有MQ为啥不用?用Redis作消息队列!?Redis作消息队列使用方法及底层原理高级进阶
【Redis实战】有MQ为啥不用?用Redis作消息队列!?Redis作消息队列使用方法及底层原理高级进阶
|
4月前
|
消息中间件 NoSQL 算法
Redis进阶-Stream多播的可持久化的消息队列
Redis进阶-Stream多播的可持久化的消息队列
196 1
|
4月前
|
存储 缓存 NoSQL
Redis进阶-Redis集群原理剖析及gossip协议初探
Redis进阶-Redis集群原理剖析及gossip协议初探
111 0
|
4月前
|
存储 缓存 算法
Redis进阶-分布式存储 Sequential partitioning & Hash partitioning
Redis进阶-分布式存储 Sequential partitioning & Hash partitioning
53 0