Redis 使用及优化入门

 

MySQL读写数据慢,Redis内存数据库,读写速度快...





Redis的优势

  • MySQL读写数据慢,Redis内存数据库,读写速度快
  • 少量数据要经常被读写,尤其是读操作,读写速度要求高
  • 丰富的数据结构,Redis支持五种数据结构,MySQL字段变化,需要手动维护,比较繁琐
  • 数据持久化 数据全部放内存,放心吗??? 不放心!!!
  • Redis操作是原子性,支持对几个操作合并后的原子操作,还支持事务内存寻址 100ns内存中读取1MB数据 250000ns磁盘寻址 10000000ns磁盘中读取1MB数据 20000000ns

Redis数据结构

1. string

Key =>Value(string)

Redis是二进制安全,可以接受任何二进制数据,例如JPEG图片或者JSON字符串,数据长度是512MB

Key Value
 Tom 98

Red 94

Jack 80

应用场景(电商)

问题:电商网站商品分类细节:访问频率高,数据不经常变动,放在RedisKey Value
    "category"  {"常用分类":A,"潮流女装":B,.....}
具体的流程
  1. 网络是否可用,可用到2,不可用到3
  2. 通过API获取服务器中的Redis缓存
  3. 本地是否有缓存数据,有的话到5,没有到6
  4. App展示返回数据,并在本地缓存
  5. 用本地缓存展示数据
  6. 显示网络不可用

hash 存储对象的数据

Key是唯一,Value是hashmap结构学号,对应一个学生的全部信息string
key:学号 value:信息的json串
弊端:改信息需求遍历json串,增加了没必要的性能开销,复杂性
key:学号+字段(姓名、年龄等等) value:字段对应的值
弊端:大量的KV,内存开销大
hash
hgetall id

list 模拟队列操作

插入元素 Key不存在,创建新的链表,如果Key存在,往里面加Value,若链表中元素都移除,Key从Redis移除。直接从头部或者从尾部插入,效率高,双向队列。从链表中遍历到指定位置,效率低。轻量级消息队列短信发送应用

set 无序不重合集合

支持集合 交集 并集 差集运算 效率很高社交应用场景共同好友
key对应一个人name value对应好友圈
集合取交集

sorted set有序不重复元素的集合

游戏应用场景

    公会排行榜

key 对应一个公会 value对应公会的实力值

进行排序
//插入数据
ZADO key score name
//添加数据
zadd groupTop 143 A
zadd groupTop 123 B
zadd groupTop 189 C
zrevrange key start stop WITHSCORES
zrevrange GroupTop 0 -1 WITHSCORES
//展现形式
1) "C"
2) "189"
3) "A"
4) "143"
5) "B"
6) "123"

内存优化

监控内存使用的状况

info
#Memory
used_memory_human: 以可读格式返回到Redis分配的内存总量
used_memory_rss:从操作系统的角度,返回Redis已分配内存的总量,和top命令输出一致
used_memoey_peak_human:以可读格式返回Redis内存的消耗峰值

优化存储结构

hash中value是以hashmap存储的,hashmap成员较少,或者长度过少,会压缩,zpilist

hash-max-ziplist-entries 512  内部成员不超过512 ziplist
hash-max-ziplist-value 64 内部成员的长度不超过64 ziplist

list和set

list-max-ziplist-entries 512  内部成员不超过512 ziplist
list-max-ziplist-value 64 内部成员的长度不超过64 ziplist
zset-max-ziplist-entries 512  内部成员不超过512 ziplist
zset-max-ziplist-value 64 内部成员的长度不超过64 ziplist
set-max-insert-entries 128
这些值不是越大越好 hash查找 操作时间复杂度 O(1) ziplist 查找和操作是O(N),时间和空间上的权衡

限制使用的最大内存

物理内存使用过多,使用swap分区,Redis崩溃,所以不能使用过多物理内存,使用物理内存过多,任何写操作都执行数据清除策略。

maxmemory-policy 指定数据清除策略
volatile-lru:对设置过期时间的数据,将过期数据移除。或者用LRU算法,如果还不行,异常 写入异常
alikeys-lru:对所有数据才用LRU算法
volatile-random:采取随机选取算法移除数据
alikeys-random:对所有数据随机选取移除数据
volatile-ttl:设置过期时间 TTL算法(最小存活时间
noeviction:不做任何处理

设置过期时间优化

EXPIRE key seconds

删除数据的两种策略

1.惰性删除
发现Key过期,则删除Key
好处是不用占据过多CPU资源。只有操作Key才检查。
坏处大量过期Key存在的话,占用大量内存空间。
冷数据没法及时清除
2.定期删除 设置时间主动检查
好处,不会有大量过期的Key
坏处,占据过多CPU

获取更多资讯,请关注公众号:


    关注 神瑞咨询


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册