下面的内容来源网络,后面附有出处链接
Redis是什么
Redis 是现在最受欢迎的 NoSQL 数据库之一
- 基于内存运行,性能高效
- 支持分布式,理论上可以无限扩展
- key-value存储系统
- 开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API
redis安装
我是使用虚拟机上的ubuntu安装的
虚拟机 ubuntu16 安装 redis:
sudo apt-get update
sudo apt-get install redis-server # 安装Redis服务器端
- 在 Ubuntu 系统中,软件包的二进制文件通常会被安装到
/usr/bin目录下,配置文件会被安装到/etc目录下。因此,您可以在/usr/bin目录下找到redis-server命令,而在/etc/redis目录下找到 Redis 服务器的配置文件。
启动 redis :
redis-server
启动后就会一直在后台运行,Ctrl+c 或关闭终端退出
一些配置和检查
安装完成后,Redis 服务器会自动启动,我们检查 Redis 服务器程序
ps 命令->检查 Redis 服务器系统进程信息
$ ps -aux|grep redis
redis 3764 0.0 0.0 41876 3088 ? Ssl 00:41 0:02 /usr/bin/redis-server 127.0.0.1:6379
gaoxiao+ 5009 0.0 0.0 15984 940 pts/1 S+ 01:26 0:00 grep --color=auto redis
- 系统中正在运行一个名为
redis-server的进程,进程 ID 为3764,占用了0.0%的 CPU 和0.0%的内存。此外,该进程的启动命令为/usr/bin/redis-server 127.0.0.1:6379,这意味着 Redis 服务器正在监听本地地址127.0.0.1上的6379端口。 - 还有一个名为
grep的进程,进程 ID 为5009。这个进程是您执行ps -aux|grep redis命令时创建的,用于在ps命令的输出中搜索包含 “redis” 字符串的行。
netstat 命令->检查 Redis 服务监听状态的命令输出
$ netstat -nlt|grep 6379
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN
- 系统中有一个进程正在监听本地地址
127.0.0.1上的6379端口。LISTEN状态表示该进程正在等待客户端连接。 - 原理:
netstat -nlt命令用于显示系统中所有处于监听状态的 TCP 端口。-n选项表示以数字形式显示地址和端口号,而不是使用主机名和服务名;-l选项表示仅显示处于监听状态的端口;-t选项表示仅显示 TCP 协议的端口。同时使用了管道符|将netstat命令的输出传递给grep 6379命令,以便在输出中搜索包含 “6379” 字符串的行。
通过启动命令检查Redis服务状态的命令输出
$ sudo /etc/init.d/redis-server status
● redis-server.service - Advanced key-value store
Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)
Active: active (running) since 二 2023-08-15 00:21:50 PDT; 1h 12min ago
Docs: http://redis.io/documentation,
man:redis-server(1)
Process: 3751 ExecStopPost=/bin/run-parts --verbose /etc/redis/redis-server.post-down.d (code=exited, status=0/SUCCESS)
Process: 3747 ExecStop=/bin/kill -s TERM $MAINPID (code=exited, status=0/SUCCESS)
Process: 3744 ExecStop=/bin/run-parts --verbose /etc/redis/redis-server.pre-down.d (code=exited, status=0/SUCCESS)
Process: 3765 ExecStartPost=/bin/run-parts --verbose /etc/redis/redis-server.post-up.d (code=exited, status=0/SUCCESS)
Process: 3762 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS)
Process: 3757 ExecStartPre=/bin/run-parts --verbose /etc/redis/redis-server.pre-up.d (code=exited, status=0/SUCCESS)
Main PID: 3764 (redis-server)
CGroup: /system.slice/redis-server.service
└─3764 /usr/bin/redis-server 127.0.0.1:6379
8月 15 00:21:50 ubuntu systemd[1]: Starting Advanced key-value store...
8月 15 00:21:50 ubuntu run-parts[3757]: run-parts: executing /etc/redis/red...e
8月 15 00:21:50 ubuntu run-parts[3765]: run-parts: executing /etc/redis/red...e
8月 15 00:21:50 ubuntu systemd[1]: Started Advanced key-value store.
8月 15 00:30:11 ubuntu systemd[1]: Started Advanced key-value store.
Hint: Some lines were ellipsized, use -l to show in full.
- 已经成功启动了 Redis 服务,并且它正在正常运行。
Active: active (running)表示 Redis 服务处于活动状态,since 二 2023-08-15 00:21:50 PDT; 1h 12min ago表示服务启动时间。此外,还有一些有关 Redis 服务进程的信息,如进程 ID(Main PID: 3764 (redis-server))和进程所在的控制组(CGroup: /system.slice/redis-server.service)。
安装 Redis 服务器,会自动地一起安装 Redis 命令行客户端程序。
$ redis-cli # 启动客户端程序访问Redis服务器。
# 命令行帮助
127.0.0.1:6379> help
redis-cli 3.0.6
Type: "help @<group>" to get a list of commands in <group>
"help <command>" for help on <command>
"help <tab>" to get a list of possible help topics
"quit" to exit
# 查看所有key列表
127.0.0.1:6379> keys * # 用于查找 Redis 数据库中所有的键。
1) "test"
127.0.0.1:6379> ping # 测试连接情况
PONG # 输出
127.0.0.1:6379> set test "It's working!" # 设置需要返回的结果
OK # 输出
127.0.0.1:6379> get test # 再次检查
"It's working!" # 得到修改后的
127.0.0.1:6379> exit # 退出redis提示符并返回shell
gaoxiaozhi@ubuntu:~$ sudo systemctl restart redis # 重启redis实例
gaoxiaozhi@ubuntu:~$ redis-cli # 再次接入客户端
127.0.0.1:6379> get test # 测试修改数据
"It's working!"
# 如果失败可能是因为数据未持久化,重启服务导致数据丢失
127.0.0.1:6379> exit
一些操作使用
redis 客户端基本命令操作
gaoxiaozhi@ubuntu:~$ redis-cli
# 增加一条记录key1
127.0.0.1:6379> set key1 "hello"
OK
127.0.0.1:6379> get key1 # 打印记录
"hello"
# 增加一条数字记录
127.0.0.1:6379> set key2 1
OK
# 让数字自增
127.0.0.1:6379> INCR key2
(integer) 2
127.0.0.1:6379> INCR key2
(integer) 3
127.0.0.1:6379> get key2 # 打印记录
"3" # redis中默认字符串存储数据(二进制安全)
# 增加一个列表记录key3
127.0.0.1:6379> LPUSH key3 a
(integer) 1
# 从左边插入列表
127.0.0.1:6379> LPUSH key3 b
(integer) 2
# 从右边插入列表
127.0.0.1:6379> RPUSH key3 c
(integer) 3
# 按从左到右的顺序打印列表记录
127.0.0.1:6379> LRANGE key3 0 3
1) "b"
2) "a"
3) "c"
# 增加一个哈希记表录key4
127.0.0.1:6379> HSET key4 name "John Smith"
(integer) 1
# 在哈希表中插入Key为email和Value为"abc@gmail.com"的值
127.0.0.1:6379> HSET key4 email "abc@gmail.com"
(integer) 1
# 打印哈希表key4的name
127.0.0.1:6379> HGET key4 name
"John Smith"
# 打印整个哈希表
127.0.0.1:6379> HGETALL key4
1) "name"
2) "John Smith"
3) "email"
4) "abc@gmail.com"
# 增加一条哈希表记录key5,一次插入多个Key和value的值
127.0.0.1:6379> HMSET key5 username antirez password P1pp0 age 3
OK
# 打印哈希表中key为username和age的值
127.0.0.1:6379> HMGET key5 username age
1) "antirez"
2) "3"
# 打印完整的哈希表记录
127.0.0.1:6379> HGETALL key5
1) "username"
2) "antirez"
3) "password"
4) "P1pp0"
5) "age"
6) "3"
# 查看所有的key列表
127.0.0.1:6379> keys *
1) "test"
2) "key2"
3) "key4"
4) "key5"
5) "key1"
6) "key3"
# 删除key1,key5
127.0.0.1:6379> del key1
(integer) 1
127.0.0.1:6379> del key5
(integer) 1
# 查看所有的key列表
127.0.0.1:6379> keys *
1) "test"
2) "key2"
3) "key4"
4) "key3"
ubuntu16.04安装使用redis入门教程_腾讯数据架构师的博客-CSDN博客
RedisInsight 的图形化工具:
后期完善。。
一些更全的操作
字符串 string:
key *me查找所有以 me 结尾的键FLUSHALL把所有数据库里面的键都删除掉(慎用)- 默认不支持中文(中文也是二进制存储的)
quit退出redis-cli --raw以原始形式显示内容clean清空屏幕TTL name查看 key 为 name 的过期时间(-1:未设置过期时间, -2 表示已经过期)EXPIRE name 10name 键的过期时间为 10秒SETEX name 10 gao设置一个带有过期时间的键值对SETNX只有当键不存在时才设置键的值
列表 List(有序列表):
LPUSH list a列表头部添加一个元素 a (也可同时添加多个)RPUSH list b列表尾部。。。LPOP list头部删除RPOP list 2尾部删除 2 个元素LRANGE list 0 -1获取第一个到最后一个LLEN list列表长度LTRIM list 1 3删除列表中索引除 1->3 的元素
集合 Set (无序集合,不重复):
SADD course redis在集合 course 中添加 redisSMEMBERS course查看集合元素SISMEMBER course redis判断 redis 元素是否在集合中SREM course redis删除集合中的元素- 集合运算
SINTER SUNION SDIFF等
有序集合 SortedSet (ZSet):
ZADD result 680 清华 660 北大 650 复旦 640 浙大在集合添加ZRANGE result 0 -1输出第一个元素到最后一个元素ZRANGE result 0 -1 WITHSCORES输出第一个元素到最后一个元素(带分数)SISMEMBER course redis判断 redis 元素是否在集合中ZSCORE result 清华输出分数ZEANK result 清华输出排名 (从小到大的 index)ZREVRANK result 清华从大到小
哈希 Hash:
HSET person name laoyang新建HGET person name查询HGETALL person获取整个哈希中的所有键值对HDEL person age删除哈希中的某个键值对HEXISTS person name判断某个键值对是否存在HKEYS person获取哈希中的所有键HLEN person获取哈希中所有键值对的数量
分布订阅模式 消息无法持久化, 无法记录历史消息等等
SUBSCRIBE geekhour订阅这个频道 (可以同时开多个终端订阅)publish geekhour redis将消息发送到指定的频道
消息队列 Stream 流: 轻量级的消息队列(可用于解决发布订阅功能的一些局限性)
XADD geekhour * course redis向 Stream 中添加消息,星号表示自动生成一个消息的 ID (保证递增),添加消息的内容就是课程是 Redis(回显信息就是消息的 ID)XADD geekhour 1-0 course git指定 ID 添加消息 (时间戳-序列号)XLEN geekhour查看 Stream 中消息的数量XRANGE geekhour - +查看 Stream 中的消息的详细内容(开始和结束使用减号和加号表示所有的消息)XDEL geekhour 1686495710450-0/XTRIM geekhour MAXLEN 0删除消息 (MAXLEN 0 为删除所有消息)XREAD COUNT 2 BLOCK 1000 STREAMS geekhour o读取消息 (COUNT 2 表示一次读取两条消息, BLOCK 表示如果没有消息就阻塞 1000 毫秒也就是 1 秒,0 表示从头读取/$表示获取从现在开始以后的最新的消息)XGROUP CREATE geekhour group1 0创建消费者组XINFO GROUPS geekhour查看组信息XGROUP CREATECONSUMER geekhour group1 consumer1添加组消费者XREADGROUP GROUP group1 consumer1 COUNT 2 BLOCK 3000 STREANS geekhour >右箭头表示从这个消息中读取最新的消息
。。。 未完待续