Redis的部署和操作
一.数据库的部署与配置
1.Redis服务器的单机部署
(1)将redis-stable-7.4.tar.gz上传到/export/software目录下
(2)将文件进行解压缩
·tar -xzf /export/software/redis-stable-7.4.tar.gz -C /export/servers/
(3)进入redis目录: cd /export/servers/redis-stable/
(4)安装gcc和make: dnf install gcc mak
(5)编译Redis : make
(6)测试:make test
(7)启动Redis服务端:
·src/redis-serve
·src/redis-server /etc/redis.conf (指定配置文件)
(8)启动Redis 客户端:redis-cli
·cd /export/servers/redis-stable/
·src/redis-cli -h 127.0.0.1 -p 6379
·src/redis-cli -u "redis://127.0.0.1:6379" (连接字符串方式)
2.Redis集群的部署(单机多实例)
(1)创建7001~7006六个目录
·mkdir -p /export/data/redis/7001
·mkdir -p /export/data/redis/7002
·mkdir -p /export/data/redis/7003
·mkdir -p /export/data/redis/7004
·mkdir -p /export/data/redis/7005
·mkdir -p /export/data/redis/7006
(2)复制配置文件到7001~7006文件夹中
(3)修改/7001/redis.conf的配置文件,修改内容如下:
·protected-mode yes -> no
·port 6379 -> 7001
·daemonize no -> yes
·pidfile /var/run/redis_6379.pid -> /export/data/redis/7001/redis_7001.pid
·logfile "" -> /export/data/redis/7001/redis_7001.log
·appendonly no -> yes
·# cluster-enabled yes -> cluster-enabled yes
·# cluster-config-file nodes-6379.conf -> cluster-config-file nodes-7001.conf
(4)将配置好的7001下的redis.conf复制到其他目录下
·cp /export/data/redis/7001/redis.conf /export/data/redis/7002/redis.conf
·cp /export/data/redis/7001/redis.conf /export/data/redis/7003/redis.conf
·cp /export/data/redis/7001/redis.conf /export/data/redis/7004/redis.conf
·cp /export/data/redis/7001/redis.conf /export/data/redis/7005/redis.conf
·cp /export/data/redis/7001/redis.conf /export/data/redis/7006/redis.conf
(5)修改配置文件(7001-->700*)
·sed -i 's/7001/7002/g' /export/data/redis/7002/redis.conf
·sed -i 's/7001/7003/g' /export/data/redis/7003/redis.conf
·sed -i 's/7001/7004/g' /export/data/redis/7004/redis.conf
·sed -i 's/7001/7005/g' /export/data/redis/7005/redis.conf
·sed -i 's/7001/7006/g' /export/data/redis/7006/redis.conf
·sed -i 's/127.0.0.1/192.168.121.160/g' /export/data/redis/7002/redis.conf
·sed -i 's/127.0.0.1/192.168.121.160/g' /export/data/redis/7003/redis.conf
·sed -i 's/127.0.0.1/192.168.121.160/g' /export/data/redis/7004/redis.conf
·sed -i 's/127.0.0.1/192.168.121.160/g' /export/data/redis/7005/redis.conf
·sed -i 's/127.0.0.1/192.168.121.160/g' /export/data/redis/7006/redis.conf
(6)创建日志文件
·touch /export/data/redis/7001/redis_7001.log
·touch /export/data/redis/7001/redis_7002.log
·touch /export/data/redis/7001/redis_7003.log
·touch /export/data/redis/7001/redis_7004.log
·touch /export/data/redis/7001/redis_7005.log
·touch /export/data/redis/7001/redis_7006.log
(7)启动
·/export/servers/redis-stable/src/redis-server /export/data/redis/7001/redis.conf &
·/export/servers/redis-stable/src/redis-server /export/data/redis/7002/redis.conf &
·/export/servers/redis-stable/src/redis-server /export/data/redis/7003/redis.conf &
·/export/servers/redis-stable/src/redis-server /export/data/redis/7004/redis.conf &
·/export/servers/redis-stable/src/redis-server /export/data/redis/7005/redis.conf &
·/export/servers/redis-stable/src/redis-server /export/data/redis/7006/redis.conf &
(8)验证是否启动成功(端口存在即成功)
·netstat -anp | grep 4900*
- 登录服务:redis-cli -c -h 192.168.121.160 -p 7001
- 查看集群节点:cluster nodes
(11)发现集群:
·cluster meet 192.168.121.160 7002
·cluster meet 192.168.121.160 7003
·cluster meet 192.168.121.160 7004
·cluster meet 192.168.121.160 7005
·cluster meet 192.168.121.160 7006
(12)再次查看集群节点:cluster nodes
(13)分配hash槽:redis-cli --cluster fix 192.168.121.160:7001
(14)查看集群信息:cluster info
(15)设置key:set hg hello
(16)增加新节点
①新增目录7007
②复制集群7001的配置文件:
·cp /export/data/redis/7001/redis.conf /export/data/redis/7007/redis.conf
③替换端口:·sed -i 's/7001/7007/g' /export/data/redis/7007/redis.conf
④创建日志文件:·touch /export/data/redis/7007/redis_7007.log
⑤启动redis服务:
·/export/servers/redis-stable/src/redis-server /export/data/redis/7007/redis.conf &
⑥查看是否启动成功:·netstat -anp | grep 7007
⑦查看此时的集群:ps -ef | grep redis
⑧连接集群,查看节点信息:
·redis-cli -c -h 192.168.121.160 -p 7001
·cluster info
二.使用命令访问数据库
1.数据库访问:连接、退出
(1)连接 Redis
①启动服务器:src/redis-server
②使用命令行工具redis-cli连接到Redis服务:redis-cli -h 192.168.121.160 -p 6379
(2)退出Redis: 使用exit命令可以退出 Redis 客户端
2.数据库的管理:切换数据库,查看数据库,清空数据库
(1)切换数据库:默认情况下,Redis会连接到数据库0。切换到其他数据库,可以使用SELECT命令(切换到数据库1):SELECT 1
(2)查看当前数据库:Redis没有直接查看当前选择数据库的命令,但可以使用 DBSIZE命令查看当前数据库中存储的键的数量:DBSIZE
(3)清空数据库:使用FLUSHDB命令来清空当前数据库:FLUSHDB
(4)清空所有数据库:使用FLUSHALL命令来清空所有数据库:FLUSHALL
3.客户端管理:查看所有客户,查看当前客户
(1)查看所有客户端:查看当前连接到 Redis 的所有客户端信息:CLIENT LIST
(2)查看当前连接的客户端的详细信息:CLIENT INFO
4.数据查询与操作:值的操作、键的操作、列表类型、集合类型、有序集合、哈希表、地理空间
(1)值的操作
①设置键值对:使用SET命令设置键值对:SET name "zzr"
②获取值:使用GET命令获取键对应的值:GET name
③删除键:使用DEL命令删除指定的键:DEL key
(2)键的操作
①查看所有键:使用 KEYS * 命令查看当前数据库中的所有键:KEYS *
②检查键是否存在:使用 EXISTS 命令检查一个键是否存在:EXISTS key
③使用EXPIRE命令设置键的过期时间:EXPIRE key 60 #设置key在60秒后过期
(3)列表类型
①推送元素到列表的左边:使用LPUSH命令:
·LPUSH list_name "item1"
·LPUSH list_name "item2"
②推送元素到列表的右边:使用RPUSH命令:
·RPUSH list_name "item3"
③获取列表的元素:使用LRANGE命令获取列表中指定范围的元素:
·LRANGE list_name 0 -1 # 获取整个列表
(4)集合类型
①添加元素到集合:使用SADD命令:
·SADD set_name "member1"
·SADD set_name "member2"
②获取集合中的所有成员:使用SMEMBERS命令:
·SMEMBERS set_name
③检查元素是否在集合中:使用SISMEMBER命令:
·SISMEMBER set_name "member1"
(5)有序集合
①添加元素到有序集合:使用ZADD命令(需要指定分数):
ZADD zset_name 1 "member1"
ZADD zset_name 2 "member2"
②获取有序集合的元素(按分数排序):使用ZRANGE命令:
·ZRANGE zset_name 0 -1 # 获取所有元素,按分数升序
③获取元素的分数:使用ZSCORE命令:
·ZSCORE zset_name "member1"
(6)哈希表
①设置哈希表字段的值:使用HSET命令:
·HSET hash_name field1 "value1"
·HSET hash_name field2 "value2"
②获取哈希表字段的值:使用HGET命令:
·HGET hash_name field1
③获取哈希表中的所有字段和值:使用HGETALL命令:
·HGETALL hash_name
(7)地理空间
①添加地理位置数据:使用 GEOADD 命令:
·GEOADD geospatial_key 13.361389 38.115556 "Sicily"
·GEOADD geospatial_key 15.087269 37.502669 "Catania"
②查询地理位置数据:使用 GEODIST 命令来计算两个地理位置之间的距离:
·GEODIST geospatial_key "Sicily" "Catania" km
③获取指定区域内的地理位置:使用GEORADIUS命令:
·GEORADIUS geospatial_key 15 37 100 km
三.数据库的设计
基于Redis的“游戏排行榜”系统,用来模拟一个游戏中的玩家得分排名。本系统共设计四个键,分别是玩家得分(存储玩家及其得分)、玩家排名(保存玩家的历史排名信息)、玩家信息(存储玩家的个人信息)和玩家总数(存储当前游戏中的总玩家数)。
1.数据库设计
(1)玩家得分(Sorted Set)
使用有序集合game:leaderboard存储玩家及其得分。玩家的名字为成员(Member),得分为分数(Score)。Redis提供的ZADD命令可以用来添加玩家及其得分,并根据得分自动排序。
键名:game:leaderboard
数据类型:ZSET
(2)玩家排名(Sorted Set)
用来保存玩家的历史排名信息。
键名:game:rank_history:{player_name}
数据类型:ZSET
(3)玩家信息(Hash)
存储玩家的个人信息(如头像、等级等)。
键名:player:{player_name}
数据类型:HASH
(4)玩家总数(String)
存储当前游戏中的总玩家数。
键名:game:player_count
数据类型:STRING
(5)数据的增删改查:
①添加玩家及其得分:使用 ZADD 命令为玩家添加得分,并自动排序。
ZADD game:leaderboard 2500 "David"
②更新玩家得分:通过 ZADD 更新玩家的得分,如果玩家已经存在则会更新分数。
ZADD game:leaderboard 2600 "David"
③删除玩家:通过 ZREM 删除指定的玩家。
ZREM game:leaderboard "David"
④查询玩家得分:使用 ZSCORE 获取指定玩家的得分。
ZSCORE game:leaderboard "Alice"
⑤获取排名前N的玩家:使用 ZRANGE 查询排名前 10 的玩家。
ZRANGE game:leaderboard 0 9 WITHSCORES
⑥查询玩家的历史排名:使用 ZRANGE 获取玩家的历史排名。
ZRANGE game:rank_history:Alice 0 -1 WITHSCORES
⑦获取玩家总数。
GET game:player_count
2.键值对设计及数据填充
(1)玩家得分
game:leaderboard | |
Memeber | Score |
“David” | 2500 |
“Bob” | 2000 |
“Charlie” | 1800 |
“Alice” | 1500 |
(2)玩家排名
game:rank_history:Alice | |
Rank | Score |
4 | 1500 |
3 | 1800 |
2 | 2000 |
1 | 2500 |
(3)玩家信息
player:Alice | |
level | 15 |
status | active |
(4)玩家总数
game:player_count |
100 |
四.编程实现数据库的访问
使用Python访问实现设计的“游戏排行榜”系统的Redis数据库,步骤如下:
(1)Redis 连接:通过 redis.StrictRedis 类来连接 Redis 数据库,具体代码如下:
import redis
# 创建 Redis 连接
r = redis.StrictRedis(host='localhost', port=6379, db=0, decode_responses=True)
# 测试连接
if r.ping():
print("Successfully connected to Redis")
(2)添加玩家的个人信息
# 设置 Alice 的基本信息(玩家等级、排名、状态)
r.hset('player:Alice', 'level', 15)
r.hset('player:Alice', 'rank', 1)
r.hset('player:Alice', 'status', 'active')
# 确认数据
player_info = r.hgetall('player:Alice')
print("Player Info:", player_info)
(3)添加玩家的历史排名
# Alice 历史排名记录
r.zadd('game:rank_history:Alice', {'1500': 4, '1800': 3, '2000': 2, '2500': 1})
# 确认数据
rank_history = r.zrange('game:rank_history:Alice', 0, -1, withscores=True)
print("Rank History for Alice:", rank_history)
(4)添加当前游戏的排行榜
# 当前排行榜
r.zadd('game:leaderboard', {'Alice': 1500, 'Bob': 2000, 'Charlie': 1800, 'David': 2500})
# 确认数据
leaderboard = r.zrange('game:leaderboard', 0, -1, withscores=True)
print("Leaderboard:", leaderboard)
(5)查询玩家信息
# 获取 Alice 的个人信息
player_info = r.hgetall('player:Alice')
print("Player Info:", player_info)
(6)查询玩家的历史排名
# 获取 Alice 的历史排名(按分数排序)
rank_history = r.zrange('game:rank_history:Alice', 0, -1, withscores=True)
print("Rank History for Alice:", rank_history)
(7)查询当前排行榜
leaderboard = r.zrange('game:leaderboard', 0, -1, withscores=True)
print("Leaderboard:", leaderboard)
(8)更新Alice的个人信息(修改等级)
# 更新 Alice 的等级为 16
r.hset('player:Alice', 'level', 16)
# 确认更新
updated_player_info = r.hgetall('player:Alice')
print("Updated Player Info:", updated_player_info)
(9)更新 Alice 的历史排名
# 更新 Alice 的得分历史(假设得分 2000 排名提升为 2)
r.zadd('game:rank_history:Alice', {'2000': 2})
# 确认更新
updated_rank_history = r.zrange('game:rank_history:Alice', 0, -1, withscores=True)
print("Updated Rank History for Alice:", updated_rank_history)
(10)删除 Alice 的个人信息
r.delete('player:Alice')
# 确认删除
deleted_player_info = r.hgetall('player:Alice')
print("Deleted Player Info:", deleted_player_info)
(11)删除 Alice 的历史排名
# 删除 Alice 的历史排名记录
r.delete('game:rank_history:Alice')
# 确认删除
deleted_rank_history = r.zrange('game:rank_history:Alice', 0, -1, withscores=True)
print("Deleted Rank History for Alice:", deleted_rank_history)
(12)删除排行榜数据
# 删除当前排行榜数据
r.delete('game:leaderboard')
# 确认删除
deleted_leaderboard = r.zrange('game:leaderboard', 0, -1, withscores=True)
print("Deleted Leaderboard:", deleted_leaderboard)
原文地址:https://blog.csdn.net/r2931887650/article/details/145244137
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!