Redis笔记八之内存设置及优化

理论上讲redis可以存储2的32次方个key,每个实例至少存2亿5千万个key,但因为Redis是基于内存的数据库所以也就意味着它不可能存储特别多的数据,应该说redis的存储极限是系统的可用内存。

我在本机上通过jedis生成100万个key实际占用内存108M

# Memory

used_memory:104730792

used_memory_human:99.88M

used_memory_rss:123080704

used_memory_peak:113668232

used_memory_peak_human:108.40M

used_memory_lua:35840

mem_fragmentation_ratio:1.18

mem_allocator:jemalloc-3.6.0

# Keyspace

db0:keys=1000000,expires=0,avg_ttl=0

内存设置

maxmemory和maxmemory_policy参数

在redis.conf中通过这两个参数配置redis的内存使用情况。Redis的可用内存与系统的内存有关,一般我们需要设置它的最大可用内存,除非你确定你的业务中redis的内存不会很大且有足够的系统内存。

maxmemory参数

不设置

1:不设置或为0,64位系统不限制使用,32位最多使用3G

2:如果不设置最大内存系统有多少内存redis就会用多少一旦开始写入swap虚拟内存则后期查询速度反而会慢。

设置

如果开启了RDB持久化方式,因为子进程在复制所有数据时内存使用量会增加一倍,所以最大设置为系统内存的45%。如果没有开启最大设置为系统内存的95%。

maxmemory_policy参数

1:设置最大内存后需要设置删除策略否则当内存不足时再添加数据就会报错。

2:有六种删除策略。

volatile-lru:使用LRU算法从已设置过期时间的数据集合中淘汰数据。

volatile-ttl:从已设置过期时间的数据集合中挑选即将过期的数据淘汰。

volatile-random:从已设置过期时间的数据集合中随机挑选数据淘汰。

allkeys-lru:使用LRU算法从所有数据集合中淘汰数据,淘汰使用频率最少的key。

allkeys-random:从数据集合中任意选择数据淘汰

no-enviction:禁止淘汰数据。

优化原则:

1:key的名称尽量使用简单明了的关键字,比如stu代表学生不要太长。

2:如果只是使用redis充当缓存就请关闭持久化功能。

3:redis为每种数据类型都提供了两种内部编码方式,生成时redis自己会自动根据数据类型调整使用那种编码方式。

4:slowlog慢日志查询

当我们发现redis命令执行慢时可以通过slowlog来找出这些命令。在redis.conf中有两个参数slowlog-log-slower-than10000和slowlog-max-len 128。

slowlog-log-slower-than10000表示当命令执行时间大于10000时此命令会被保存

slowlog-max-len128表示redis会保存最多128条命令。

slowlog get可以查看当前所有执行慢的命令

slowlog len可以查看目前一共记录了多少条命令

slowlog reset可以执行重置

我们可以根据项目的实际情况修改redis.conf中的这两个参数

原文地址:https://www.cnblogs.com/Simeonwu/p/8684316.html

时间: 2024-11-02 18:27:40

Redis笔记八之内存设置及优化的相关文章

老男孩培训视频听课笔记八(在51cto上听的)--5.8 64bit 基础优化

windows user: administrator guest port 3389 Linux user:root 普通用户很多 Port :22 更改ssh登录配置: 位置: /etc/ssh/ssh_config-client 配置 /etc/ssh/sshd_config --服务器端的配置 修改:第一步,备份服务器端的配置   第二步,编辑--说明 #--注释说明 图:   /etc/init.d – yum /rpm 安装的软件全部在这有启动命令 修改后不能登录,用图标来解释如何判

08.Redis内存分配与优化

Redis中的数据都是存放到内存中的,这个跟redis的持久化无关哈(持久化只是相当于做备份).然而每台服务器的内存都是有限的,那么如何分配内存给Redis使用呢? A:首先要知道,redis默认是没有对可以使用多少内存做限制的,这样如果数据量大了的时候就会耗掉你 服务器所有的内存.导致你都无法进行维护. B:设置Redis可以使用的最大内存是通过maxmemory参数来设置,例如:maxmemory 10GB C:生产中给redis分配最大内存的参照如下所示: ## 对数据持久化的需求(不管你

Redis笔记整理(三):进阶操作与高级部分

[TOC] Redis笔记整理(三):进阶操作与高级部分 Redis发布订阅 Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息. Redis客户端可以订阅任意数量的频道. 下图展示了频道channel1,以及订阅这个频道的三个客户端--client1,client2,client5之间的关系. 当有新消息通过PUBLISH命令发送给频道channel1时,这个消息就会被发送给订阅它的三个客户端: 相关操作命令如下: 命令 描述 PSUBS

redis笔记

redis笔记 下载完redis,执行make命令. 然后启动redis就进src文件夹,执行./redis-server就可以了. 再在文件夹下执行 ./redis-cli 就可以执行redis的命令了. pipelining  一次请求发送多个命令,以提高性能.我们在使用redis时都是向它发送命令,每次都是需要和redis建立tcp连接,然后发送命令信息,redis执行命令后,客户端等待着redis的响应.这个我们当然知道,就像访问db,IO开销都是消耗资源的大头,所以redis提供了pi

Redis(八) LRU Cache

Redis(八)-- LRU Cache 在计算机中缓存可谓无所不在,无论还是应用还是操作系统中,为了性能都需要做缓存.然缓存必然与缓存算法息息相关,LRU就是其中之一.笔者在最先接触LRU是大学学习操作系统时的了解到的,至今已经非常模糊.在学习Redis时,又再次与其相遇,这里将这块内容好好梳理总结. LRU(Least Recently Used)是缓存算法家族的一员--最近最少使用算法,类似的算法还有FIFO(先进先出).LIFO(后进先出)等.因为缓存的选择一般都是用内存(RAM)或者计

Java虚拟机(JVM)中的内存设置详解

在一些规模稍大的应用中,Java虚拟机(JVM)的内存设置尤为重要,想在项目中取得好的效率,GC(垃圾回收)的设置是第一步. PermGen space:全称是Permanent Generation space.就是说是永久保存的区域,用于存放Class和Meta信息,Class在被Load的时候被放入该区域Heap space:存放Instance. GC(Garbage Collection)应该不会对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很

全面认识Eclipse中JVM内存设置(转)

这里向大家描述一下Eclipse中如何进行JVM内存设置,JVM主要管理两种类型的内存:堆和非堆.简单来说堆就是Java代码可及的内存,是留给开发人员使用的:非堆就是JVM留给自己用的,所以方法区.JVM内部处理或优化所需的内存(如JIT编译后的代码缓存).每个类结构(如运行时常数池.字段和方法数据)以及方法和构造方法的代码都在非堆内存中. Eclipse中JVM内存设置 eclipse.ini内存设置 -vmargs-Xms128M-Xmx512M-XX:PermSize=64M-XX:Max

点滴记录——学习Redis笔记

转载请说明出处:http://blog.csdn.net/cywosp/article/details/39701409 Redis 默认端口6379 Redis适用场景 1. 取最新N个数据的操作 2. 排行榜应用,取TOP N操作 3. 需要精确设定过期时间的应用 4. 计数器应用 5. Uniq操作,获取某段时间所有数据排重值 6. 实时系统,反垃圾系统 7. Pub/Sub构建实时消息系统--消息的发布与订阅 8. 构建队列系统 9. 缓存 Redis数据类型 Strings类型及操作

jQuery整理笔记八----jQuery的Ajax

Ajax,我一直读的是"阿贾克斯",据当时大学老师讲该读音出处是根据当年风靡欧洲的荷兰足球俱乐部阿贾克斯的名字来的,我觉得说法挺靠谱的. jQuery封装了Ajax的交互过程,用户不需要考虑XMLHttpRequest对象的兼容性问题以及使用XMLHttpRequest建立连接.发送请求.发送方式.接收方式等细节,利用jQuery定义 的几个简单方法,即可轻松实现客户端与服务端异步通信的问题,从而帮助开发人员从繁琐的技术细节中解脱出来,专心于业务层开发工作. 最初始的JavaScrip