自学内容网 自学内容网

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*

  1. 登录服务:redis-cli -c -h 192.168.121.160 -p 7001
  2. 查看集群节点: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)!