为什么使用Redis缓存数据库
我们日常的开发,无非是对数据的处理。程序的定义也可以这样狭义的解释:算法+数据。可见数据库是多么重要的工具。但是关系型数据库的读写能力在200-1000次/秒不等,服务器好点可能更多,这导致在高并发的情况下,我们需要访问的数据可能会被锁住,使得响应速度变得异常的慢,体验很差。同时,如果数据很多,我们在做一些比较重的筛选查询时,可能会非常的慢。
什么是Redis
上述的问题,无非是因为磁盘的读写过低,那么有没有办法将将数据库放进内存呐。所以就有了Redis,Redis是一款nosql的数据库,也是一种键值对数据库。相比传统的关系型数据库,跑在内存里的Redis,无疑是非常快速的,读写数据也达到了30万次/秒,这无非是巨大的提升。同时Redis提供了持久化的支持,数据会同时写进磁盘,使得Redis可以完全代替关系型数据库。
官方定义:redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
如何持久化
https://blog.csdn.net/qq_39569480/article/details/125603603
内存管理
redis是个基于内存的缓存数据库,既然是基于内存的,那肯定就会有存满的时候,虽然可以限制redis使用内存的大小,但如果真的存满了,再有新的数据过来肯定就存不进去了,此时redis会执行既定的一些淘汰策略,下面一块看一下设置redis占用内存大小和redis几种种淘汰策略。
1.首先来看一下设置Redis最大占用内存
这里我使用的是win版redis找到安装目录下的redis.windows.conf文件(保存文件退出,重启redis服务),设置maxmemory参数,maxmemory是bytes字节类型,注意转换。修改如下所示
默认是没有限制内存大小的也就是无限制。
获取当前设置内存占用大小
config get maxmemory
设置最大内存限制
config set maxmemory 2GB
设置maxmemory参数,maxmemory是bytes字节类型,注意转换。
这里我设置了2G=214789585byte
设置好以上参数后,那么当redis占用内存达到2G时 就无法继续写入新的数据了,这时需要淘汰掉一些内存数据。那么接下来继续往下看。
redis内存淘汰机制
当Redis的内存使用达到设置的maxmemory上限时,Redis会根据所配置的eviction policy(淘汰策略)来决定如何处理新的写入操作。以下是几种常见的淘汰策略:
1.noeviction(默认):当内存使用达到上限时,新的写入操作会被禁止,客户端会收到错误信息。
2.allkeys-lru:当内存使用达到上限时,Redis会尝试淘汰最近最少使用的键(Key),以便为新的写入操作腾出空间。
3.allkeys-random:当内存使用达到上限时,Redis会随机选择一些键进行淘汰,以便为新的写入操作腾出空间。
4.volatile-lru:当内存使用达到上限时,Redis会尝试淘汰设置了过期时间的键中,最近最少使用的键(Key),以便为新的写入操作腾出空间。
5.volatile-random:当内存使用达到上限时,Redis会随机选择一些设置了过期时间的键进行淘汰,以便为新的写入操作腾出空间。
获取当前内存淘汰策略
config get maxmemory-policy
命令方式修改
config set maxmemory-policy allkeys-lru //通过命令修改淘汰策略
配置文件直接添加(保存文件退出,重启redis服务)
查看当前内存占用情况
当我们想查看当前内存占用了多少时,可使用redis.cli客户端查看
首先通过auth pwd通过验证
然后使用info memory查看内存占用的详细信息
used_memory和used_memory_human代表当前内存占用大小
used_memory_peak和used_memory_peak_human表示使用内存最大时的占用量
当然也可以直接使用 info 查看更详细的信息