redis小结

一、数据结构

        1. int:incr/decr,可用于计数缓存

                (1) set/get/del

                (2) incr/decr

                (3) mset/mget

        2. string:

                (1) set/get/del

                (2) mset/mget

                (3) append

        3. list:内部使用双向链表实现。微博消息列表、点赞列表、朋友圈等。

                (1) lpush/lpop

                (2) rpush/rpop

                (3) lrange

                (4) ltrim

                (5) brpop

        4. set:无序集合,元素不重复

                (1) sadd/srem

                (2) sismember

                (3) 统计元素个数:scard

                (4) sdiff key1 key2

                (5) sdiffstore destkey key1 key2

                (6) 计算交集:sinter key1 key2

                (7) sinterstore destkey key1 key2

                (8) smove sourcekey destkey member

                (9) spop key

                (10) srandmember key [ count ]

                (11) srem key member1 [member2]

                (12) 计算并集:sunion key1 key2

                (13) sunionstore destkey key1 key2

                (14) sscan key cursor [ match pattern] [count count]

        5. zset/sorted set

                (1) 添加元素:zadd key score member [[score member] [score member] ......]

                (2) 获取成员的分值:zscore key member

                (3) 查看成员当前的排名:zrank/zrevrank

                        zrevrank key member

                (4) 按名次查看排行榜:zrange/zrevrange

                        zrevrange key 0 -1 withscores

                (5) 增加成员分数:zincrby key store member

                (6) 移除成员:zrem key member

                (7) 删除排行榜:zdel key

        6. map/hash

                (1) hset/hget/hsetnx

                (2) hmset/hmget

                (3) hgetall

                (4) hexists

                (5) hincrby/hincrbyfloat

                (6) hlen

                (7) hdel

                (8) hkeys/hvals

        7. redis stream

                (1) xadd

                (2) xrange/xrevrange

                (3) xtrim

                (4) xdel

                (5) xread

                (6) xlen

                (7) xgroupadd

                (8) xreadgroup group

                (9) 确认消费:xack

                (10) xgroup setid

                (11) xgroup delconsumer

                (12) xgroup destroy

                (13) xpending

                (14) xclaim

                (15) xinfo

                (16) xinfo groups

                (17) xinfo stream

        8. hyperloglog

        9. bitmap

        10. redis-search

二、业务场景

        1. 计数统计

        2. 缓存

        3. topN-排行榜:zset自动根据score进行排序

        4. 标签系统/社交关系:set交集

        5. 布隆过滤器

        6. 分布式锁:setnx

        7. geo位置:位置匹配,距离计算

        8. 电商/购物车

        9. 分布式ID

        10. 分布式会话

        11. 任务队列/消息队列

        12. 限流

三、核心原理

        1. 基于内存存储

        2. 单线程,避免线程切换开销

        3. IO多路复用

四、客户端类库

        1. spring-data-redis:jedis/lettuce

        2. redisson

特性JedisLettuceRedisson
线程安全×
支持集群
支持哨兵
支持发布/订阅
支持管道
支持异步操作×
支持响应式编程×
API直观性××
社区支持
性能性能较低(同步阻塞)高性能(异步非阻塞)高性能(异步非阻塞)
资源消耗较高(频繁创建连接)较低(连接复用)较低(连接复用)
高级功能支持××√(如分布式锁、布隆过滤器等)
易用性高(简单易用)中等(需要更多配置)高(封装良好,功能丰富)
学习曲线中等陡峭(功能丰富,学习成本高)
文档完善度
客户端实例创建简单复杂(需要配置)复杂(需要配置)
连接池支持需要外部支持(如Apache Commons Pool)内置连接池内置连接池
跨语言支持×××
商业支持××√(提供专业版)

五、最佳实践

        1. key最佳实践:

                (1) key的格式建议 “业务名称:数据名称:id”,如:xx:xxx:xxxx;

                (2) key的长度不超过44字节,这样可以采用embstr存储,节省内存占用;

                (3) key中不包含特殊字符;

        2. value最佳实践:拒绝big key

                (1) string类型:value值建议不超过10k;

                (2) list/set/hash/zset类型:元素数量控制在1万以下;

        3. 选择合适的数据类型

                

                (1) string/set:尽可能存储int类型;

                (2) list/hash/zset:尽可能控制元素数量在阈值范围内,使用ziplist存储,节约内存;

        4. 把redis当缓存使用,而不是数据库

                (1) 数据存储在内存中,是redis快的主要原因,但内存资源是有限且昂贵的。所以缓存中的元素要设置合理的过期时间,让缓存中保留"热数据",淘汰掉"冷数据"。

                (2) redis实例设置maxmemory + 淘汰策略;

        4. 批处理优化:

                (1) mget/mset/hmset/hmget

                (2) pipeline

        5. 开启lazy-free

        6. 避免集中过期KEY

        7. 使用长连接,合理配置连接池

        8. 使用物理机部署redis,而不是虚拟机。

                redis在做数据持久化时,采用创建子进程的方式,而创建子进程会调用操作系统的fork系统调用,虚拟机中fork调用会比物理机慢很多。

        9. 尽量不开启数据持久化,如果需要开启需要谨慎合理配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值