2024-09-03

Redis 的 List 数据结构是一个字符串链表,你可以在这个链表的头部(左边)或者尾部(右边)添加或者移除元素。这使得 List 既可以作为栈,也可以作为队列使用。

以下是一些基本的操作:

  1. LPUSH key value[ value ...]:在指定的 key 对应的 list 的头部添加元素。
  2. RPUSH key value[ value ...]:在指定的 key 对应的 list 的尾部添加元素。
  3. LRANGE key start stop:返回指定 key 的 list 中指定区间内的元素,区间以偏移量 start 和 stop 指定。
  4. LPOP key:移除并返回 key 对应 list 的头部元素。
  5. RPOP key:移除并返回 key 对应 list 的尾部元素。

以下是使用这些命令的示例代码:




import redis
 
# 连接到 Redis
r = redis.Redis(host='localhost', port=6379, db=0)
 
# 在 list 头部添加元素
r.lpush('mylist', 'element1')
 
# 在 list 尾部添加元素
r.rpush('mylist', 'element2')
 
# 获取 list 中的所有元素
print(r.lrange('mylist', 0, -1))  # 打印: [b'element2', b'element1']
 
# 移除并返回 list 的头部元素
print(r.lpop('mylist'))  # 打印: b'element2'
 
# 移除并返回 list 的尾部元素
print(r.rpop('mylist'))  # 打印: b'element1'

请注意,在上述代码中,返回的值是字节字符串(byte strings)。如果你的 Redis 里存储的是字符串而不是二进制数据,你可能需要对这些值进行解码,例如使用 value.decode('utf-8')

2024-09-03

在Java中,使用Redis的哈希操作multiGet()来批量获取多个键对应的值,可以使用Jedis库。以下是一个简单的例子:




import redis.clients.jedis.Jedis;
 
public class RedisMultiGetExample {
    public static void main(String[] args) {
        // 连接到Redis服务器
        Jedis jedis = new Jedis("localhost", 6379);
 
        // 准备要批量获取的键
        String[] keys = {"key1", "key2", "key3"};
 
        // 使用multiGet()来批量获取键的值
        List<String> values = jedis.hmget(keys);
 
        // 输出获取到的值
        for (String value : values) {
            System.out.println(value);
        }
 
        // 关闭连接
        jedis.close();
    }
}

注意:multiGet()方法是用于获取多个键对应的值,但是在Redis中哈希操作并没有直接对应的multiGet()方法。因此,如果您要获取的键是哈希类型的,应该使用hmget(String hashKey, String... keys)方法,该方法可以获取一个哈希中多个指定字段的值。上述代码中,hmget实际上是对应于hmget方法。

2024-09-03



from django_redis import get_redis_connection
 
# 获取Redis连接
redis_conn = get_redis_connection()
 
# 设置键值对
redis_conn.set('my_key', 'my_value')
 
# 获取键对应的值
value = redis_conn.get('my_key')
print(value)  # 输出 b'my_value',注意Redis返回的是字节字符串
 
# 在Django中使用Redis做缓存
def view_func(request):
    # 获取视图函数的缓存键
    cache_key = 'view_cache_key'
    
    # 尝试从缓存中获取内容
    cached_value = redis_conn.get(cache_key)
    if cached_value is not None:
        # 如果缓存存在,直接返回缓存的内容
        return cached_value
    else:
        # 如果缓存不存在,执行函数逻辑并缓存结果
        result = "函数执行结果"
        redis_conn.set(cache_key, result, ex=60*15)  # 设置缓存有效期为15分钟
        return result

这个代码实例展示了如何在Django项目中使用django_redis库来获取Redis连接,并实现基本的键值对操作。同时,演示了如何在视图函数中使用Redis作为缓存来提高性能。

2024-09-03

Redis是一个开源的使用C语言编写的、支持网络交互的、可基于内存也可持久化的日志型、Key-Value数据库,并提供多种语言的API。

以下是一些基本的Redis命令和操作:

  1. 连接Redis服务器



import redis
r = redis.Redis(host='localhost', port=6379, db=0)
  1. 设置键值对



r.set('foo', 'bar')
  1. 获取键值



r.get('foo')
  1. 删除键值对



r.delete('foo')
  1. 检查键是否存在



r.exists('foo')
  1. 设置键的过期时间



r.expire('foo', 5)  # 键'foo'将在5秒后过期
  1. 获取键的剩余生存时间



r.ttl('foo')
  1. 将值追加到已存在的列表尾部



r.rpush('mylist', 'value1')
r.rpush('mylist', 'value2')
  1. 从列表头部移除并返回元素



r.lpop('mylist')
  1. 获取列表中的所有元素



r.lrange('mylist', 0, -1)
  1. 在集合中添加一个成员



r.sadd('myset', 'value1')
  1. 获取集合中的所有成员



r.smembers('myset')
  1. 在有序集合中添加一个成员



r.zadd('myzset', {'value1': 1})
  1. 获取有序集合中的成员数量



r.zcard('myzset')
  1. 执行事务



pipe = r.pipeline()
pipe.set('foo', 'bar')
pipe.set('bar', 'foo')
pipe.execute()

这些命令是Redis基础,能够让你开始使用Redis进行简单的数据存储和操作。更复杂的操作需要更多的Redis特性和命令,需要你去学习和掌握。

2024-09-03

Redis 支持五种数据类型:字符串(String)、列表(List)、集合(Set)、有序集合(Sorted Set)和哈希(Hash)。以下是每种数据类型的简单应用场景:

  1. 字符串(String):

    存储单个或少量数据,如会话信息、用户配置文件等。




SET user:1000 "John Doe"
GET user:1000
  1. 列表(List):

    实现队列系统,可以使用 LPUSH/RPUSH 插入数据,使用 LPOP/RPOP 移除数据。




LPUSH recent.articles "Article-100"
LRANGE recent.articles 0 4
  1. 集合(Set):

    实现共同好友、标签系统,可以使用 SADD 添加元素,SMEMBERS 获取所有元素。




SADD user:1000:follows 1001
SMEMBERS user:1000:follows
  1. 有序集合(Sorted Set):

    实现排行榜系统,可以使用 ZADD 添加元素,ZRANGE 获取所有元素。




ZADD scoreboard 100 user:1000
ZRANGE scoreboard 0 -1 WITHSCORES
  1. 哈希(Hash):

    存储结构化数据,如用户的个人资料。




HSET user:1000 name "John Doe"
HGETALL user:1000

以上每种数据类型都有自己的特点和适用场景,开发者可以根据实际需求选择合适的数据类型来应用。

2024-09-03



# 第8天: Redis Exporter安装与部署
 
# 1. 下载并解压redis_exporter
wget https://github.com/oliver006/redis_exporter/releases/download/v0.27.0/redis_exporter_v0.27.0_linux_amd64.tar.gz
tar xvzf redis_exporter_v0.27.0_linux_amd64.tar.gz
 
# 2. 创建一个服务用户
useradd -r -s /bin/false -M redis_exporter
 
# 3. 移动二进制文件到合适的目录
mv redis_exporter /usr/local/bin/
chown redis_exporter:redis_exporter /usr/local/bin/redis_exporter
 
# 4. 创建systemd服务文件
cat << EOF > /etc/systemd/system/redis_exporter.service
[Unit]
Description=Redis Exporter
After=network.target
 
[Service]
User=redis_exporter
Group=redis_exporter
Type=simple
ExecStart=/usr/local/bin/redis_exporter \\
  -redis.addr redis://user:password@localhost:6379/0
 
[Install]
WantedBy=multi-user.target
EOF
 
# 5. 重载systemd以读取新服务文件并启动服务
systemctl daemon-reload
systemctl start redis_exporter.service
systemctl enable redis_exporter.service
 
# 6. 配置Prometheus
# 编辑Prometheus配置文件prometheus.yml,添加redis_exporter作为一个target
# 通常在这个文件中的scrape_configs部分

注意:在实际部署时,需要替换上述代码中的user, password, 和localhost:6379为你的Redis实例的实际访问凭据。同时,确保你的Redis实例配置了适当的访问权限,并且Prometheus服务器能够访问Redis Exporter的端口(默认为9121)。

2024-09-03

Redis的INCRDECR命令用于将存储在key中的数字值增加或减少1。如果key不存在,那么在执行INCR命令前,会先将其值设为0。

这里是INCRDECR命令的基本使用方法:

  • INCR key:将存储在key的数值增加1。如果key不存在,那么在执行操作前,这个key的值会被设置为0。然后执行增加操作。返回值会是新的数值。
  • DECR key:将存储在key的数值减去1。如果key不存在,那么在执行操作前,这个key的值会被设置为0。然后执行减少操作。返回值会是新的数值。

示例代码(使用redis-cli):




# 设置key的初始值
SET mycounter "10"

# 使用INCR命令增加
INCR mycounter
# 此时mycounter的值会变为11

# 使用DECR命令减少
DECR mycounter
# 此时mycounter的值会变为10

在实际应用中,你可以使用这些命令来实现计数器功能,例如记录网页点击次数、实现限流控制等。

2024-09-03

报错解释:

WRONGPASS invalid username-password pair 错误表明你在使用Spring Data Redis时提供了不正确的用户名和密码组合。这通常发生在连接到Redis服务器时,如果服务器配置了访问认证(如使用requirepass指令),而你在客户端配置中提供的凭证不匹配,就会发生此错误。

解决方法:

  1. 检查你的Redis服务器配置文件(通常是redis.conf),查看是否有设置requirepass指令,并确认你使用的密码是否正确。
  2. 检查Spring Data Redis的配置,确保你在配置文件中正确设置了spring.redis.password属性,与你的Redis服务器设置的密码一致。
  3. 如果你使用的是连接池,比如lettuce或jedis,确保连接池配置中的密码也是正确的。
  4. 确认没有任何拼写错误或者不必要的空格在密码中。
  5. 如果你的应用部署在多个环境(开发、测试、生产等),请确保在每个环境中使用正确的Redis凭证。

如果以上步骤都确认无误,但问题依旧,请检查Redis服务器的日志文件,以确定是否有更详细的错误信息可以帮助你解决问题。

2024-09-03

在Redis中,如果你想禁用手动触发的SAVE命令,可以通过配置文件或者运行时命令来实现。

  1. 通过配置文件:

    在Redis配置文件redis.conf中,找到以下行:

    
    
    
    save <seconds> <changes>

    将其注释掉即可禁用基于时间的自动保存。例如:

    
    
    
    # save 300 10
  2. 通过运行时命令:

    你可以通过Redis客户端连接到服务器,然后执行以下命令来禁用手动保存:

    
    
    
    config set save ""

    这将清空所有的自动保存规则。

如果你想关闭Redis的持久化功能,可以通过以下方式:

  1. 通过配置文件:

    在配置文件中,可以将持久化相关的所有配置项都注释掉或删除。

  2. 通过运行时命令:

    连接到Redis服务器后,可以执行如下命令:

    
    
    
    config set appendonly no
    config set save ""

    这将关闭AOF持久化和所有的自动保存规则。

请注意,关闭Redis的手动保存和持久化功能可能会导致数据在服务器重启后不会自动恢复。这种做法在生产环境中需要谨慎考虑。

2024-09-03

由于Redis 7.2是最新版本,安装指南可能会随着版本更新而变化。以下是一个基于官方文档的Redis 7.2在Linux上的安装指南:

  1. 下载Redis 7.2:



wget http://download.redis.io/releases/redis-7.2.0.tar.gz
  1. 解压缩:



tar xzf redis-7.2.0.tar.gz
  1. 进入目录:



cd redis-7.2.0
  1. 编译Redis:



make
  1. 运行测试:



make test
  1. 安装Redis:



sudo make install
  1. (可选)安装Redis的可视化工具:



sudo apt-get install redis-tools
  1. 启动Redis服务器:



redis-server
  1. (可选)使用Redis客户端连接服务器:



redis-cli

请注意,这是一个基础安装指南,具体细节可能会根据你的操作系统和环境配置有所不同。如果你遇到任何问题,请参考官方文档或者社区支持。