Redis API使用指南

# Redis API使用指南

Redis提供了丰富的API接口,本文将详细介绍Redis的常用API使用方法,帮助您快速上手Redis编程。

## 1. 连接Redis

### 1.1 使用redis-cli

“`bash
# 连接本地Redis
redis-cli

# 连接远程Redis
redis-cli -h host -p port -a password

# 执行单个命令
redis-cli ping
redis-cli get key
“`

### 1.2 使用Python客户端

**安装redis-py**

“`bash
pip install redis
“`

**基本使用**

“`python
import redis

# 连接Redis
r = redis.Redis(host=’localhost’, port=6379, db=0, password=’your_password’)

# 测试连接
print(r.ping())

# 执行命令
r.set(‘key’, ‘value’)
print(r.get(‘key’))
“`

### 1.3 使用Java客户端

**添加依赖**

“`xml

redis.clients
jedis
4.4.3

“`

**基本使用**

“`java
import redis.clients.jedis.Jedis;

// 连接Redis
Jedis jedis = new Jedis(“localhost”, 6379);
jedis.auth(“your_password”);

// 测试连接
System.out.println(jedis.ping());

// 执行命令
jedis.set(“key”, “value”);
System.out.println(jedis.get(“key”));

// 关闭连接
jedis.close();
“`

### 1.4 使用Node.js客户端

**安装ioredis**

“`bash
npm install ioredis
“`

**基本使用**

“`javascript
const Redis = require(‘ioredis’);

// 连接Redis
const redis = new Redis({
host: ‘localhost’,
port: 6379,
password: ‘your_password’
});

// 测试连接
redis.ping().then(console.log);

// 执行命令
redis.set(‘key’, ‘value’).then(() => {
return redis.get(‘key’);
}).then(console.log);

// 关闭连接
redis.quit();
“`

## 2. 字符串操作

### 2.1 基本操作

“`bash
# 设置键值对
SET key value

# 获取值
GET key

# 追加内容
APPEND key value

# 自增
INCR key

# 自减
DECR key

# 自增指定值
INCRBY key increment

# 自减指定值
DECRBY key decrement

# 设置过期时间
SETEX key seconds value

# 获取字符串长度
STRLEN key
“`

### 2.2 Python示例

“`python
# 设置键值对
r.set(‘name’, ‘Redis’)

# 获取值
print(r.get(‘name’)) # b’Redis’

# 追加内容
r.append(‘name’, ‘ is awesome’)
print(r.get(‘name’)) # b’Redis is awesome’

# 自增
r.set(‘count’, 1)
r.incr(‘count’)
print(r.get(‘count’)) # b’2′

# 自减
r.decr(‘count’)
print(r.get(‘count’)) # b’1′

# 设置过期时间
r.setex(‘temp’, 60, ‘value’)

# 获取字符串长度
print(r.strlen(‘name’)) # 15
“`

## 3. 哈希操作

### 3.1 基本操作

“`bash
# 设置哈希字段
HSET key field value

# 获取哈希字段
HGET key field

# 获取所有字段和值
HGETALL key

# 获取所有字段
HKEYS key

# 获取所有值
HVALS key

# 删除字段
HDEL key field

# 检查字段是否存在
HEXISTS key field

# 获取字段数量
HLEN key

# 自增字段值
HINCRBY key field increment
“`

### 3.2 Python示例

“`python
# 设置哈希字段
r.hset(‘user:1’, ‘name’, ‘John’)
r.hset(‘user:1’, ‘age’, 30)
r.hset(‘user:1′, ’email’, ‘john@example.com’)

# 获取哈希字段
print(r.hget(‘user:1’, ‘name’)) # b’John’

# 获取所有字段和值
print(r.hgetall(‘user:1′)) # {b’name’: b’John’, b’age’: b’30’, b’email’: b’john@example.com’}

# 获取所有字段
print(r.hkeys(‘user:1′)) # [b’name’, b’age’, b’email’]

# 获取所有值
print(r.hvals(‘user:1′)) # [b’John’, b’30’, b’john@example.com’]

# 删除字段
r.hdel(‘user:1′, ’email’)
print(r.hgetall(‘user:1′)) # {b’name’: b’John’, b’age’: b’30’}

# 检查字段是否存在
print(r.hexists(‘user:1’, ‘name’)) # True

# 获取字段数量
print(r.hlen(‘user:1’)) # 2

# 自增字段值
r.hincrby(‘user:1’, ‘age’, 1)
print(r.hget(‘user:1’, ‘age’)) # b’31’
“`

## 4. 列表操作

### 4.1 基本操作

“`bash
# 左侧添加元素
LPUSH key value

# 右侧添加元素
RPUSH key value

# 左侧移除元素
LPOP key

# 右侧移除元素
RPOP key

# 获取列表长度
LLEN key

# 获取指定范围的元素
LRANGE key start stop

# 插入元素
LINSERT key BEFORE|AFTER pivot value

# 设置指定索引的元素
LSET key index value

# 删除指定值的元素
LREM key count value
“`

### 4.2 Python示例

“`python
# 左侧添加元素
r.lpush(‘fruits’, ‘apple’)
r.lpush(‘fruits’, ‘banana’)
r.lpush(‘fruits’, ‘cherry’)

# 右侧添加元素
r.rpush(‘fruits’, ‘date’)

# 左侧移除元素
print(r.lpop(‘fruits’)) # b’cherry’

# 右侧移除元素
print(r.rpop(‘fruits’)) # b’date’

# 获取列表长度
print(r.llen(‘fruits’)) # 2

# 获取指定范围的元素
print(r.lrange(‘fruits’, 0, -1)) # [b’banana’, b’apple’]

# 插入元素
r.linsert(‘fruits’, ‘AFTER’, ‘banana’, ‘orange’)
print(r.lrange(‘fruits’, 0, -1)) # [b’banana’, b’orange’, b’apple’]

# 设置指定索引的元素
r.lset(‘fruits’, 1, ‘grape’)
print(r.lrange(‘fruits’, 0, -1)) # [b’banana’, b’grape’, b’apple’]

# 删除指定值的元素
r.lrem(‘fruits’, 1, ‘grape’)
print(r.lrange(‘fruits’, 0, -1)) # [b’banana’, b’apple’]
“`

## 5. 集合操作

### 5.1 基本操作

“`bash
# 添加元素
SADD key member

# 移除元素
SREM key member

# 获取所有元素
SMEMBERS key

# 检查元素是否存在
SISMEMBER key member

# 获取集合大小
SCARD key

# 交集
SINTER key1 key2

# 并集
SUNION key1 key2

# 差集
SDIFF key1 key2
“`

### 5.2 Python示例

“`python
# 添加元素
r.sadd(‘tags’, ‘python’)
r.sadd(‘tags’, ‘redis’)
r.sadd(‘tags’, ‘database’)

# 移除元素
r.srem(‘tags’, ‘database’)

# 获取所有元素
print(r.smembers(‘tags’)) # {b’python’, b’redis’}

# 检查元素是否存在
print(r.sismember(‘tags’, ‘python’)) # True
print(r.sismember(‘tags’, ‘database’)) # False

# 获取集合大小
print(r.scard(‘tags’)) # 2

# 交集
r.sadd(‘tags1’, ‘python’, ‘redis’, ‘java’)
r.sadd(‘tags2’, ‘python’, ‘javascript’, ‘redis’)
print(r.sinter(‘tags1’, ‘tags2′)) # {b’python’, b’redis’}

# 并集
print(r.sunion(‘tags1’, ‘tags2′)) # {b’python’, b’redis’, b’java’, b’javascript’}

# 差集
print(r.sdiff(‘tags1’, ‘tags2′)) # {b’java’}
“`

## 6. 有序集合操作

### 6.1 基本操作

“`bash
# 添加元素
ZADD key score member

# 移除元素
ZREM key member

# 获取指定范围的元素
ZRANGE key start stop

# 获取倒序指定范围的元素
ZREVRANGE key start stop

# 获取元素的分数
ZSCORE key member

# 增加元素的分数
ZINCRBY key increment member

# 获取元素的排名
ZRANK key member

# 获取元素的倒序排名
ZREVRANK key member

# 获取分数范围内的元素
ZRANGEBYSCORE key min max
“`

### 6.2 Python示例

“`python
# 添加元素
r.zadd(‘scores’, {‘Alice’: 90, ‘Bob’: 85, ‘Charlie’: 95, ‘David’: 80})

# 移除元素
r.zrem(‘scores’, ‘David’)

# 获取指定范围的元素
print(r.zrange(‘scores’, 0, -1)) # [b’Alice’, b’Bob’, b’Charlie’]

# 获取倒序指定范围的元素
print(r.zrevrange(‘scores’, 0, -1)) # [b’Charlie’, b’Alice’, b’Bob’]

# 获取元素的分数
print(r.zscore(‘scores’, ‘Alice’)) # 90.0

# 增加元素的分数
r.zincrby(‘scores’, 5, ‘Alice’)
print(r.zscore(‘scores’, ‘Alice’)) # 95.0

# 获取元素的排名
print(r.zrank(‘scores’, ‘Alice’)) # 2

# 获取元素的倒序排名
print(r.zrevrank(‘scores’, ‘Alice’)) # 0

# 获取分数范围内的元素
print(r.zrangebyscore(‘scores’, 80, 90)) # [b’Bob’]
“`

## 7. 发布订阅

### 7.1 基本操作

**发布消息**

“`bash
PUBLISH channel message
“`

**订阅频道**

“`bash
SUBSCRIBE channel
“`

**模式订阅**

“`bash
PSUBSCRIBE pattern
“`

### 7.2 Python示例

**发布消息**

“`python
import redis

# 连接Redis
r = redis.Redis(host=’localhost’, port=6379, db=0)

# 发布消息
r.publish(‘channel1’, ‘Hello from Redis!’)
r.publish(‘channel2’, ‘Another message’)
“`

**订阅消息**

“`python
import redis

# 连接Redis
r = redis.Redis(host=’localhost’, port=6379, db=0)

# 创建订阅对象
pubsub = r.pubsub()

# 订阅频道
pubsub.subscribe(‘channel1’, ‘channel2’)

# 接收消息
for message in pubsub.listen():
print(message)
“`

## 8. 事务

### 8.1 基本操作

“`bash
# 开始事务
MULTI

# 执行命令
SET key1 value1
SET key2 value2

# 提交事务
EXEC

# 取消事务
DISCARD
“`

### 8.2 Python示例

“`python
# 开始事务
pipe = r.pipeline()

# 执行命令
pipe.set(‘key1’, ‘value1’)
pipe.set(‘key2’, ‘value2’)
pipe.get(‘key1′)

# 执行事务
result = pipe.execute()
print(result) # [True, True, b’value1’]
“`

## 9. Lua脚本

### 9.1 基本操作

“`bash
# 执行Lua脚本
EVAL “return redis.call(‘set’, KEYS[1], ARGV[1])” 1 key value
“`

### 9.2 Python示例

“`python
# 执行Lua脚本
script = “””
local key = KEYS[1]
local value = ARGV[1]
redis.call(‘set’, key, value)
return redis.call(‘get’, key)
“””

result = r.eval(script, 1, ‘lua_key’, ‘lua_value’)
print(result) # b’lua_value’

# 缓存脚本
script_sha = r.script_load(script)
result = r.evalsha(script_sha, 1, ‘lua_key2’, ‘lua_value2′)
print(result) # b’lua_value2′
“`

## 10. 连接池

### 10.1 Python示例

“`python
import redis

# 创建连接池
pool = redis.ConnectionPool(host=’localhost’, port=6379, db=0, max_connections=50)

# 使用连接池
r = redis.Redis(connection_pool=pool)

# 执行命令
r.set(‘key’, ‘value’)
print(r.get(‘key’))
“`

### 10.2 Java示例

“`java
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

// 配置连接池
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(50);
poolConfig.setMaxIdle(10);

// 创建连接池
JedisPool jedisPool = new JedisPool(poolConfig, “localhost”, 6379);

// 使用连接池
try (Jedis jedis = jedisPool.getResource()) {
jedis.auth(“your_password”);
jedis.set(“key”, “value”);
System.out.println(jedis.get(“key”));
}

// 关闭连接池
jedisPool.close();
“`

## 11. 总结

Redis提供了丰富的API接口,通过本文的指南,您可以快速上手Redis编程。在实际应用中,应该根据业务需求选择合适的API,并注意以下几点:

– **连接管理**:使用连接池管理Redis连接,避免频繁创建和关闭连接
– **命令执行**:使用批量命令和管道,减少网络往返时间
– **错误处理**:捕获和处理Redis命令执行过程中的错误
– **性能优化**:根据业务需求选择合适的数据类型和命令
– **安全使用**:避免在代码中硬编码Redis密码,使用环境变量或配置文件存储

通过合理使用Redis API,可以充分发挥Redis的高性能特性,为应用提供快速、可靠的数据存储和缓存服务。