昆玉市网站建设_网站建设公司_Windows Server_seo优化
2025/12/25 6:37:20 网站建设 项目流程

一、引言

今天给大家讲讲非关系型数据库Redis.

二、非关系型数据库Redis

1. Redis 概述

1.1 什么是Redis

Redis(Remote Dictionary Server)是一个开源的、基于内存的键值对存储数据库,它可以用作数据库、缓存和消息中间件。

1.2 Redis 的特点

基于内存运行:数据主要存储在内存中,读写性能极高

支持数据持久化:可以将内存中的数据保存到磁盘,重启后可以再次加载使用

丰富的数据类型:支持字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等

支持事务:操作都是原子性,要么全部执行,要么全部不执行

丰富的特性:支持发布/订阅、键过期等特性

1.3 Redis应用场景

缓存系统:减轻数据库压力,提升系统性能

计数器:如网站访问量、点赞数等

消息队列:利用列表类型实现简单的消息队列

排行榜:利用有序集合实现各种排行榜功能

会话存储:存储用户会话信息

2. Redis软件安装

2.1 Windows 系统安装

方法一:用小皮安装(推荐)

方法二:使用官方版本

  1. 访问 Redis 官网下载 Windows 版本
  2. 解压到指定目录,如C:\redis
  3. 打开命令提示符,进入 Redis 目录
  4. 运行命令:redis-server.exe redis.windows.conf

方法三:使用 WSL(Windows Subsystem for Linux)

# 在 WSL 中安装 Redis sudo apt update sudo apt install redis-server # 启动 Redis 服务 sudo service redis-server start # 检查 Redis 状态 sudo service redis-server status

2.2 Mac系统安装

方式1: Homebrew

Homebrew是MacOS上的一个包管理器,它可以让安装和管理软件变得非常简单。首先,你需要安装Homebrew(如果你还没有安装的话)。

打开终端,然后粘贴以下命令来安装:

# 安装 Homebrew(如果尚未安装) /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" # 安装 Redis brew install redis # 启动 Redis(后台运行) brew services start redis # 或手动启动 redis-server /usr/local/etc/redis.conf # 检查是否运行 # 在另一个终端窗口中,你可以使用以下命令来检查Redis服务器是否正在运行: redis-cli ping # 应返回 PONG,表示Redis服务器正在正常运行。

方式2:源码编译安装

# 下载最新稳定版 curl -O http://download.redis.io/redis-stable.tar.gz tar xzf redis-stable.tar.gz cd redis-stable # 编译 make # 测试编译结果 make test # 安装到 /usr/local/bin sudo make install # 创建配置文件目录 sudo mkdir /etc/redis sudo cp redis.conf /etc/redis/ # 修改配置文件(可选) vim /etc/redis/redis.conf # 启动 Redis redis-server /etc/redis/redis.conf

2.3 Linux系统安装

Ubuntu/Debian 系统

# 更新软件包列表 sudo apt update # 安装 Redis sudo apt install redis-server # 启动 Redis 服务 sudo systemctl start redis-server # 设置开机自启 sudo systemctl enable redis-server # 检查 Redis 状态 sudo systemctl status redis-server

CentOS/RHEL 系统

# 安装 EPEL 仓库 sudo yum install epel-release # 安装 Redis sudo yum install redis # 启动 Redis 服务 sudo systemctl start redis # 设置开机自启 sudo systemctl enable redis

2.4 验证安装

安装完成后,可以通过以下命令测试 Redis 是否正常工作:

# 连接 Redis 客户端 redis-cli # 在 Redis 客户端中测试 127.0.0.1:6379> ping PONG 127.0.0.1:6379> set test "Hello Redis" OK 127.0.0.1:6379> get test "Hello Redis" 127.0.0.1:6379> exit

三、Python操作Redis

1. redis-py 模块安装

1.1 使用 pip 安装

# 安装 redis-py pip install redis # 或者指定版本 pip install redis==4.5.0

1.2 使用 conda 安装

conda install redis-py

1.3 验证安装

上述两者都指向同一个 Python 库:redis-py库在导入时都是import redis

安装完成后,可以在 Python 中验证是否安装成功:

import redis print(redis.__version__)

2. redis-py 模块使用

2.1 连接 Redis 数据库

基本连接

import redis # 创建 Redis 连接对象 r = redis.Redis( host='localhost', # Redis 服务器地址 port=6379, # Redis 服务器端口 db=0, # 数据库编号,默认0 password=None, # 密码,如果没有设置密码则为None decode_responses=True # 自动解码,返回字符串而不是字节 ) # 测试连接 try: response = r.ping() print("Redis 连接成功:", response) except redis.ConnectionError as e: print("Redis 连接失败:", e)

2.2 字符串(String)操作

设置和获取值

import redis r = redis.Redis(host='localhost', port=6379, db=0, decode_responses=True) # 设置单个值 r.set('name', '张三') r.set('age', '25') # 获取单个值 name = r.get('name') age = r.get('age') print(f"姓名: {name}, 年龄: {age}") # 设置多个值 r.mset({'city': '北京', 'job': '工程师'}) # 获取多个值 values = r.mget(['name', 'age', 'city', 'job']) print("多个值:", values) # 设置值并设置过期时间(单位:秒) r.setex('temp_data', 60, '临时数据') # 60秒后自动删除

数值操作

import redis r = redis.Redis(host='localhost', port=6379, db=0, decode_responses=True) # 设置初始值 r.set('counter', '0') # 自增操作 r.incr('counter') # +1 print("自增后:", r.get('counter')) r.incrby('counter', 5) # +5 print("增加5后:", r.get('counter')) # 自减操作 r.decr('counter') # -1 print("自减后:", r.get('counter')) r.decrby('counter', 3) # -3 print("减少3后:", r.get('counter'))

2.3 哈希(Hash)操作

import redis r = redis.Redis(host='localhost', port=6379, db=0, decode_responses=True) # 设置哈希字段 r.hset('user:1001', 'name', '李四') r.hset('user:1001', 'age', '30') r.hset('user:1001', 'city', '上海') # 获取单个字段 name = r.hget('user:1001', 'name') print(f"用户名: {name}") # 获取所有字段 user_info = r.hgetall('user:1001') print("用户信息:", user_info) # 设置多个字段 r.hmset('user:1002', { 'name': '王五', 'age': '28', 'city': '广州' }) # 获取多个字段 fields = r.hmget('user:1002', ['name', 'age']) print("指定字段:", fields) # 获取所有字段名 field_names = r.hkeys('user:1001') print("字段名:", field_names) # 获取所有字段值 field_values = r.hvals('user:1001') print("字段值:", field_values) # 删除字段 r.hdel('user:1001', 'city') print("删除后:", r.hgetall('user:1001'))

2.4 列表(List)操作

import redis r = redis.Redis(host='localhost', port=6379, db=0, decode_responses=True) # 从左侧添加元素 r.lpush('tasks', 'task1', 'task2', 'task3') # 从右侧添加元素 r.rpush('tasks', 'task4', 'task5') # 获取列表长度 length = r.llen('tasks') print(f"列表长度: {length}") # 获取列表元素 all_tasks = r.lrange('tasks', 0, -1) print("所有任务:", all_tasks) # 获取指定范围的元素 first_three = r.lrange('tasks', 0, 2) print("前三个任务:", first_three) # 从左侧弹出元素 left_task = r.lpop('tasks') print(f"左侧弹出: {left_task}") # 从右侧弹出元素 right_task = r.rpop('tasks') print(f"右侧弹出: {right_task}") print("剩余任务:", r.lrange('tasks', 0, -1))

2.5 集合(Set)操作

import redis r = redis.Redis(host='localhost', port=6379, db=0, decode_responses=True) # 添加元素 r.sadd('tags', 'python', 'redis', 'database', 'cache') # 获取所有元素 all_tags = r.smembers('tags') print("所有标签:", all_tags) # 判断元素是否存在 is_member = r.sismember('tags', 'python') print("python是否存在:", is_member) # 获取集合元素数量 tag_count = r.scard('tags') print(f"标签数量: {tag_count}") # 随机弹出一个元素 random_tag = r.spop('tags') print(f"随机弹出: {random_tag}") # 移除指定元素 r.srem('tags', 'database') print("移除后:", r.smembers('tags')) # 集合运算 r.sadd('set1', 'a', 'b', 'c') r.sadd('set2', 'b', 'c', 'd') # 交集 intersection = r.sinter('set1', 'set2') print("交集:", intersection) # 并集 union = r.sunion('set1', 'set2') print("并集:", union) # 差集 difference = r.sdiff('set1', 'set2') print("差集:", difference)

2.6 有序集合(Sorted Set)操作

import redis r = redis.Redis(host='localhost', port=6379, db=0, decode_responses=True) # 添加带分数的元素 r.zadd('leaderboard', { 'player1': 1000, 'player2': 1500, 'player3': 800, 'player4': 2000 }) # 按分数升序获取 asc_players = r.zrange('leaderboard', 0, -1, withscores=True) print("升序排名:", asc_players) # 按分数降序获取 desc_players = r.zrevrange('leaderboard', 0, -1, withscores=True) print("降序排名:", desc_players) # 获取元素分数 score = r.zscore('leaderboard', 'player2') print(f"player2的分数: {score}") # 增加元素分数 r.zincrby('leaderboard', 500, 'player1') print("增加后player1分数:", r.zscore('leaderboard', 'player1')) # 获取排名 rank = r.zrevrank('leaderboard', 'player4') # 从0开始的排名 print(f"player4的排名: {rank + 1}") # 转换为从1开始的排名 # 按分数范围获取 high_scores = r.zrangebyscore('leaderboard', 1000, 3000, withscores=True) print("高分玩家:", high_scores)

2.7 键操作和过期时间

import redis import time r = redis.Redis(host='localhost', port=6379, db=0, decode_responses=True) # 设置键值对 r.set('session:user123', 'user_data') # 检查键是否存在 exists = r.exists('session:user123') print("键是否存在:", exists) # 设置过期时间(秒) r.expire('session:user123', 300) # 5分钟后过期 # 获取剩余生存时间 ttl = r.ttl('session:user123') print(f"剩余生存时间: {ttl}秒") # 设置键值对并指定过期时间 r.setex('temp:code', 60, '123456') # 60秒后过期 # 移除过期时间,使键永久存在 r.persist('session:user123') # 查找匹配模式的键 all_keys = r.keys('*') print("所有键:", all_keys) session_keys = r.keys('session:*') print("会话键:", session_keys) # 删除键 r.delete('session:user123') print("删除后是否存在:", r.exists('session:user123'))

四、结语

Redis差不多就是这些,之后会给大家讲一下数据分析和Linux

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询