redis的一些操作
redis安装
Ubuntu安装
如果有root权限,或者可以使用sudo安装,那就很简单:
更新系统
sudo apt update
apt安装
sudo apt install redis-server
安装完成后,测试Redis的版本和安装情况:
redis-cli --version
或者
wget http://download.redis.io/releases/redis-7.0.9.tar.gz
tar -zxvf redis-7.0.9.tar.gz
sudo mv ./redis-7.0.9 /usr/local/
cd /usr/local/redis-7.0.9
sudo make
sudo make test
sudo make install
#执行完成后,将redis的可执行程序安装在/usr/local/bin中
进入/usr/local/bin 查看是否安装了
cd /usr/local/bin
ls -all
redis-server #redis的服务器
redis-cli #redis命令行客户端
redis-benchmark #redis性能测试工具
redis-check-aof #AOF文件修复工具
redis-check-rdb #RDB文件检索工具
如果没有root权限,不能使用sudo安装,需要安装到本地
wget http://download.redis.io/releases/redis-7.0.9.tar.gz
tar -zxvf redis-7.0.9.tar.gz
cd redis-7.0.9
sudo make
sudo make test

新建redis文件夹,安装redis,如下:
make install PREFIX=../redis
Win11安装
清空当前缓存和所有缓存
Windows环境下使用命令行进行redis缓存清理
- redis安装目录下输入cmd
- redis-cli -p 端口号
- flushdb 清除当前数据库缓存
- flushall 清除整个redis所有缓存
在redis安装目录下,右键选择“在终端打开”,如下图:

(base) PS C:\Program Files\Redis> redis-cli -p 6379
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> flushall
OK
127.0.0.1:6379>

配置内存大小,防止内存饱满
1、通过在Redis安装目录下的redis.conf配置文件设置内存大小
maxmemory 4096mb
2、通过cmd
//设置Redis最大占用内存大小为100M
127.0.0.1:6379> config set maxmemory 4096mb
//获取设置的Redis能使用的最大内存大小
127.0.0.1:6379> config get maxmemory

设置内存淘汰策略
- noeviction策略:内存空间达到maxmemory时,不会淘汰数据,有新写入时会返回错误。
- volatile-ttl策略:针对设置了过期时间的键值对,根据过期时间的先后进行修改,越早过期的越先被删除。
- volatile-random策略:在设置了过期时间的键值对中,进行随机删除。
- volatile-lru策略:使用LRU算法筛选设置了过期时间的键值对,进行删除。
- volatile-lfu策略:使用LFU算法筛选设置了过期时间的键值对,进行删除。
- allkeys-random策略:在所有键值对中随机选择并删除数据。
- allkeys-lru策略:使用LRU算法在所有数据中进行筛选并删除数据。
- allkeys-lfu策略:使用LFU算法在所有数据中进行筛选并删除数据。
当使用volatile-lru、volatile-random、volatile-ttl这三种策略时,如果没有key可以被淘汰,则和noeviction一样返回错误
设置方法
127.0.0.1:6379> config set maxmemory-policy allkeys-lru
查看策略
127.0.0.1:6379> config get maxmemory-policy
键过期机制
一个键过期机制——给key设置一个过期时间,一旦超过过期时间,这个key就会被被删除,内存将被回收。
设置键值时,EXPIRE单位是秒,PEXPIRE单位是毫秒
在Redis中,可以使用以下命令来设置键的过期时间:
- EXPIRE key ttl:设置键在ttl秒后过期。
例如,要设置一个名为“username”的键在60秒后过期,可以执行以下命令:
EXPIRE username 60
如果设置成功,将返回1;如果键不存在或者设置失败,将返回0。
- PEXPIRE key milliseconds:设置键在毫秒后过期。
例如,要设置一个名为“email”的键在1000毫秒后过期,可以执行以下命令:
PEXPIRE email 1000
如果设置成功,将返回1;如果键不存在或者设置失败,将返回0。
- EXPIREAT key timestamp:设置键在某个时间戳(精确到秒)之后过期。
例如,要设置一个名为“password”的键在2023年1月1日0点1分过期,可以执行以下命令:
EXPIREAT password 1672752660
如果设置成功,将返回1;如果键不存在或者设置失败,将返回0。
- PEXPIREAT key millisecondsTimestamp:设置键在某个时间戳(精确到毫秒)之后过期。
例如,要设置一个名为“access_token”的键在2023年1月1日0点1分10秒后过期,可以执行以下命令:
PEXPIREAT access_token 1672752670000
如果设置成功,将返回1;如果键不存在或者设置失败,将返回0。
需要注意的是,当键已经存在时,才允许设置过期时间。如果键不存在,使用上述命令将返回0。此外,当键过期后,可以使用TTL和PTTL命令来查看该键的剩余存活时间。如果键不存在或者未设置过期时间,将返回-1或-2。
TTL单位是秒,PTTL单位是毫秒
127.0.0.1:6379> TTL KEY
127.0.0.1:6379> PTTL KEY
发布与订阅
当你使用Redis的发布/订阅功能时,你可以订阅一个或多个频道以接收消息,也可以向一个频道发布消息。以下是你给出的命令的详细解释:
-
订阅频道 -
subscribe chat1- 使用
subscribe命令订阅一个频道chat1。一旦订阅,当有消息发布到chat1时,该命令会接收这些消息。
- 使用
-
发布消息 -
publish chat1 “hell0 ni hao”- 使用
publish命令向频道chat1发布消息“hell0 ni hao”。所有订阅了chat1频道的客户端都会收到这条消息。
- 使用
-
查看频道 -
pubsub channels- 使用
pubsub命令并传递channels选项来列出所有可用的频道。
- 使用
-
查看某个频道的订阅者数量 -
pubsub numsub chat1- 使用
pubsub命令并传递numsub选项后跟频道名称(例如chat1)来查看特定频道的订阅者数量。
- 使用
-
退订指定频道 -
unsubscribe chat1,punsubscribe java.*- 使用
unsubscribe命令退订一个频道,例如chat1。 - 使用
punsubscribe命令退订所有匹配给定模式的频道,例如所有以“java.”开头的频道。
- 使用
-
订阅一组频道 -
psubscribe java.*- 使用
psubscribe命令订阅一个模式匹配的所有频道。例如,通过订阅所有以“java.”开头的频道,你可以接收所有这些频道的消息。
- 使用
代码实现:
当然,你可以使用`redis-py`库在Python中实现Redis的发布/订阅功能。首先,你需要安装这个库(如果还没有的话):
```bash
pip install redis
以下是如何使用Python和redis-py来实现你给出的命令:
import redis
# 连接到Redis服务器
r = redis.StrictRedis(host='localhost', port=6379, db=0)
# 订阅频道
def subscribe_channel(channel):
pubsub = r.pubsub()
pubsub.subscribe(channel)
return pubsub
# 发布消息
def publish_message(channel, message):
r.publish(channel, message)
# 查看频道
def list_channels():
return r.pubsub_channels()
# 查看某个频道的订阅者数量
def num_subscribers(channel):
return r.pubsub_numsub(channel)
# 退订指定频道
def unsubscribe_channel(channel):
pubsub = r.pubsub()
pubsub.unsubscribe(channel)
return pubsub
# 订阅一组频道
def psubscribe_channels(pattern):
pubsub = r.pubsub()
pubsub.psubscribe(pattern)
return pubsub
使用方法:
- 订阅频道:
subscribe_channel('chat1')。这将返回一个redis.PubSub对象,你可以从该对象接收消息。 - 发布消息:
publish_message('chat1', 'hell0 ni hao')。这将向’chat1’频道发布消息。 - 查看频道:
list_channels()。这将返回一个列表,其中包含所有可用的频道名称。 - 查看某个频道的订阅者数量:
num_subscribers('chat1')。这将返回一个列表,其中包含频道的订阅者数量。 - 退订指定频道:
unsubscribe_channel('chat1')。这将返回一个redis.PubSub对象,表示已经退订了该频道。 - 订阅一组频道:
psubscribe_channels('java.*')。这将返回一个redis.PubSub对象,表示已经订阅了匹配给定模式的所有频道。
list 相关操作
-
lpush mylist a b c
- 将元素a、b、c插入到键为
mylist的列表的左侧。执行此命令后,列表的内容将是a, b, c。
- 将元素a、b、c插入到键为
-
rpush mylist x y z
- 将元素x、y、z插入到键为
mylist的列表的右侧。执行此命令后,列表的内容将是a, b, c, x, y, z。
- 将元素x、y、z插入到键为
-
lrange mylist 0 -1
- 获取键为
mylist的列表中的所有元素。执行此命令后,将返回一个列表,内容为a, b, c, x, y, z。
- 获取键为
-
lpop mylist
- 从键为
mylist的列表的左侧弹出一个元素。执行此命令后,列表的内容将是b, c, x, y, z,并且弹出的元素a被返回。
- 从键为
-
rpop mylist
- 从键为
mylist的列表的右侧弹出一个元素。执行此命令后,列表的内容将是a, b, c, x, y,并且弹出的元素z被返回。
- 从键为
-
llen mylist
- 获取键为
mylist的列表的长度。执行此命令后,将返回列表的长度,即6。
- 获取键为
-
lrem mylist count value
- 从键为
mylist的列表中删除指定数量的与给定值相等的元素。例如,lrem mylist 3 a将删除3个a元素。如果列表中有3个a元素,执行此命令后,列表的内容将是b, c, x, y, z。
- 从键为
-
lindex mylist 2
- 获取键为
mylist的列表中指定索引处的元素。在Redis中,索引是从0开始的。因此,索引2指的是第三个元素,即c。执行此命令后,将返回c。
- 获取键为
-
lset mylist 2 n
- 将键为
mylist的列表中指定索引处的元素的值设置为n。执行此命令后,列表的内容将是a, b, n, x, y, z。注意:如果索引超出了列表的范围,这个命令不会有任何效果。
- 将键为
-
ltrim mylist 0 4
- 删除键为
mylist的列表中所有不在指定范围内的元素。执行此命令后,列表的内容将是a, b, c, x, y。所有不在这个范围内的元素都被删除了。
- 删除键为
-
linsert mylist before a
- 在键为
mylist的列表中指定元素a的前面插入一个新元素。例如,如果列表的内容是a, b, c,执行此命令后,内容将是x, a, b, c。注意:如果元素a不存在于列表中,这个命令不会有任何效果。
- 在键为
-
linsert mylist after a
- 在键为
mylist的列表中指定元素a的后面插入一个新元素。例如,如果列表的内容是a, b, c,执行此命令后,内容将是a, x, b, c。注意:如果元素a不存在于列表中,这个命令不会有任何效果。
- 在键为
-
rpoplpush list list2
- 从键为
list的列表中弹出一个元素,并将其推入键为list2的另一个已存在的列表的右侧。同时将该元素的成功转移也作为结果返回给客户端。如果list2不存在,Redis将创建一个空列表来执行这个操作。执行此命令后,列表list2的内容将是弹出的元素,而列表list的内容不会改变。
- 从键为
代码如下:
import redis
# 连接到Redis服务器
r = redis.Redis(host='localhost', port=6379, db=0)
# 执行Redis命令的示例
# 1. lpush mylist a b c
r.lpush('mylist', 'a', 'b', 'c')
# 2. rpush mylist x y z
r.rpush('mylist', 'x', 'y', 'z')
# 3. lrange mylist 0 -1
result = r.lrange('mylist', 0, -1)
print(result) # 输出: ['a', 'b', 'c', 'x', 'y', 'z']
# 4. lpop mylist
result = r.lpop('mylist')
print(result) # 输出: 'a'
# 5. rpop mylist
result = r.rpop('mylist')
print(result) # 输出: 'z'
# 6. llen mylist
result = r.llen('mylist')
print(result) # 输出: 5
# 7. lrem mylist count value
result = r.lrem('mylist', 3, 'a')
print(result) # 输出: 3,表示删除了3个a元素
# 8. lindex mylist 2
result = r.lindex('mylist', 2)
print(result) # 输出: 'c'
# 9. lset mylist 2 n
r.lset('mylist', 2, 'n')
# 10. ltrim mylist 0 4
r.ltrim('mylist', 0, 4)
result = r.lrange('mylist', 0, -1) # 重置列表以进行下一步操作
print(result) # 输出: ['a', 'b', 'n', 'x', 'y']
# 11. linsert mylist before a x
r.linsert('mylist', 'before', 'a', 'x')
result = r.lrange('mylist', 0, -1) # 重置列表以进行下一步操作
print(result) # 输出: ['x', 'a', 'b', 'n', 'x', 'y']
# 12. linsert mylist after a x
r.linsert('mylist', 'after', 'a', 'x')
result = r.lrange('mylist', 0, -1) # 重置列表以进行下一步操作
print(result) # 输出: ['x', 'a', 'x', 'b', 'n', 'x', 'y']
import redis
# 连接到Redis服务器
r = redis.Redis(host='localhost', port=6379, db=0)
# 创建并填充键为'list'和'list2'的列表
r.lpush('list', 'a', 'b', 'c')
r.lpush('list2', 'x', 'y', 'z')
# 使用rpoplpush命令将元素从'list'转移到'list2'
result = r.rpoplpush('list', 'list2')
print(result) # 输出: 'c',因为'c'是从'list'中弹出的元素
# 获取并打印'list'和'list2'的内容以验证结果
list_content = r.lrange('list', 0, -1) # ['b', 'a']
list2_content = r.lrange('list2', 0, -1) # ['c', 'x', 'y', 'z']
print("List content:", list_content)
print("List2 content:", list2_content)
更多推荐



所有评论(0)