redis内存用完了怎么办?

本文转载自:https://www.cnblogs.com/johnnyblog/p/11479649.html,也可点我跳转

问题引入:redis是一个内存型数据库,当缓存满了的时候,该如何解决呢?

1、通过配置文件配置

通过在Redis安装目录下面的redis.conf配置文件中添加以下配置设置内存大小
//设置Redis最大占用内存大小为100M
maxmemory 100mb

redis的配置文件不一定使用的是安装目录下面的redis.conf文件,启动redis服务的时候是可以传一个参数指定redis的配置文件的

2、通过命令修改

Redis支持运行时通过命令动态修改内存大小

//设置Redis最大占用内存大小为100M
127.0.0.1:6379> config set maxmemory 100mb
//获取设置的Redis能使用的最大内存大小
127.0.0.1:6379> config get maxmemory
如果不设置最大内存大小或者设置最大内存大小为0,在64位操作系统下不限制内存大小,在32位操作系统下最多使用3GB内存

3、Redis的内存淘汰

问题引入:既然可以设置Redis最大占用内存大小,那么配置的内存就有用完的时候。那在内存用完的时候,还继续往Redis里面添加数据不就没内存可用了吗?

实际上Redis定义了几种策略用来处理这种情况:

1、noeviction(默认策略):对于写请求不再提供服务,直接返回错误(DEL请求和部分特殊请求除外)
2、allkeys-lru:从所有key中使用LRU算法进行淘汰
3、volatile-lru:从设置了过期时间的key中使用LRU算法进行淘汰
4、allkeys-random:从所有key中随机淘汰数据
5、volatile-random:从设置了过期时间的key中随机淘汰
6、volatile-ttl:在设置了过期时间的key中,根据key的过期时间进行淘汰,越早过期的越优先被淘汰

当使用volatile-lru、volatile-random、volatile-ttl这三种策略时,如果没有key可以被淘汰,则和noeviction一样返回错误

如何获取及设置内存淘汰策略

获取当前内存淘汰策略:
127.0.0.1:6379> config get maxmemory-policy
通过配置文件设置淘汰策略(修改redis.conf文件):
maxmemory-policy allkeys-lru
通过命令修改淘汰策略:
127.0.0.1:6379>config set maxmemory-policy allkeys-lru

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. Redis的数据结构有字符串(string)、哈希(hash)、列表(list)、集合(set)、有序集合(sorted set)等。其中,字符串是最基本的数据结构,其他数据结构都是在字符串的基础上构建的,每种数据结构都有各自的特点和应用场景。 - 字符串:Redis中的字符串是二进制安全的,可以存储任何数据,如数字、图片、序列化的对象等。常用的操作有设置值、获取值、追加值、增减值等。应用场景包括缓存、计数器、分布式锁等。 - 哈希:Redis中的哈希是一个键值对集合,其中键是字符串,值可以是字符串、数字或对象。常用的操作有设置值、获取值、删除值、查看键值对数量等。应用场景包括存储对象、缓存、计数器等。 - 列表:Redis中的列表是一个有序的字符串链表,可以在头部或尾部插入、删除元素,还可以根据下标获取元素。常用的操作有插入元素、删除元素、获取元素等。应用场景包括消息队列、任务队列、最新列表等。 - 集合:Redis中的集合是一个无序的字符串集合,其中每个元素都是唯一的。常用的操作有添加元素、删除元素、获取元素等。应用场景包括好友关系、标签系统等。 - 有序集合:Redis中的有序集合和集合类似,但是每个元素都有一个分数,可以根据分数排序。常用的操作有添加元素、删除元素、根据分数范围获取元素等。应用场景包括排行榜、计数器等。 2. Redis支持的数据类型可以进行以下操作: - 字符串:GET、SET、INCR、DECR、APPEND等。 - 哈希:HSET、HGET、HDEL、HLEN、HKEYS等。 - 列表:LPUSH、RPUSH、LPOP、RPOP、LINDEX等。 - 集合:SADD、SREM、SMEMBERS、SISMEMBER、SUNION等。 - 有序集合:ZADD、ZREM、ZSCORE、ZRANK、ZREVRANGE等。 举例说明: ``` # 字符串操作 SET key value # 设置key的值为value GET key # 获取key的值 INCR key # 将key的值加1 DECR key # 将key的值减1 # 哈希操作 HSET user id 1 # 设置user哈希中id字段的值为1 HGET user id # 获取user哈希中id字段的值 HDEL user id # 删除user哈希中id字段 # 列表操作 LPUSH list 1 # 在list列表的头部插入1 RPUSH list 2 # 在list列表的尾部插入2 LPOP list # 删除list列表的头部元素 # 集合操作 SADD set 1 # 向set集合中添加1 SREM set 1 # 从set集合中删除1 SMEMBERS set # 获取set集合中的所有元素 # 有序集合操作 ZADD zset 1 one # 向zset有序集合中添加元素one,分数为1 ZREM zset one # 从zset有序集合中删除元素one ZRANGE zset 0 1 # 获取zset有序集合中分数前两个的元素 ``` 3. Redis实现持久化有两种方式:RDB(Redis DataBase)和AOF(Append Only File)。 - RDB:在指定时间间隔内将内存中的数据集快照写入磁盘,生成RDB文件。RDB文件可以看作是Redis的备份文件,可以在Redis重启时使用它来恢复数据。优点是对磁盘的使用效率高,缺点是可能会丢失最后一次快照后的数据。 - AOF:将每个写操作都记录到日志文件中,当Redis重启时,根据日志文件中的操作重放一遍,从而恢复数据。AOF文件可以看作是Redis的操作日志文件。优点是数据更加安全,缺点是对磁盘的使用效率低。 4. Redis实现分布式锁的过程如下: - 客户端尝试向Redis中写入一个特定的key,如果成功,则获得了锁。 - 如果写入失败,说明别的客户端已经获得了锁,此时客户端可以等待一段时间后重试,也可以直接放弃。 - 如果客户端获得了锁,在执行相关操作后,需要释放锁,即删除该key。 需要注意的是,分布式锁的实现需要考虑到锁的可重入性、死锁、误删等问题。 5. Redis支持过期时间的数据结构有: - 字符串:可以为字符串设置过期时间,过期后该key会被自动删除。 - 哈希:可以为哈希中的某个字段设置过期时间。 - 集合:可以为集合中的某个元素设置过期时间。 - 有序集合:可以为有序集合中的某个元素设置过期时间。 举例说明: ``` # 为字符串设置过期时间为10秒 SET key value EX 10 # 为哈希中的某个字段设置过期时间为10秒 HSET user id 1 EX 10 # 为集合中的某个元素设置过期时间为10秒 SADD set 1 EXPIRE set 10 # 为有序集合中的某个元素设置过期时间为10秒 ZADD zset 1 one EXPIRE zset 10 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值