Redis学习笔记-1
本文最后更新于:2023年4月24日 晚上
Redis是什么?
是一个key-value
数据库。
安装Redis
下载点此处
点击上面跳转到下载界面(github链接,中国大陆可能难以访问),下载zip
压缩包形式的文件,然后将其解压到某一处。在该目录下运行终端(cmd
),并执行命令:redis-server.exe redis.windows.conf
。
ok那么安装这里我卡了半天,之前是用过的,但是现在一启动就:提供无效参数balabala
每个人的解决方法可能都不一样,我建议多搜不同方法试
我自己是这一句Warning: no config file specified, using the default config.
,也就是不能直接使用redis-server
启动,而是得打全(也就是指定使用哪个配置文件):redis-server.exe redis.windows.conf
,挺无语的
如果成功开启Redis
的话,会看到Redis
的图标,以及最后一句Ready to accept connections
,不要关闭这个窗口,在Redis
目录下另外打开一个终端并执行redis-cli.exe -h 127.0.0.1 -p 6379
(如果没修改过配置文件直接redis-cli.exe
也行,后面的host
和port
参数都是默认的)。成功连接后显示127.0.0.1:6379>
。
这里如果遇到目标计算机积极拒绝,那我建议和上面一样上网搜,当然跟上述步骤用cmd
成功启动Redis
的话我觉得是不会出现这个问题的。
Redis数据类型
Redis
一共支持五种数据类型:string(字符串)
,hash(哈希)
,list(列表)
,set(集合)
,zset(有序集合)
。
使用
del <key_1> [key_2]...
来删除键,使用select <num>
来选择数据库。
要查看更多命令,可以前往:Redis官网
string
最基本的数据类型,一个key
对应一个value
。
只需要注意一下:“string
类型是二进制安全的。意思是Redis
的string
可以包含任何数据。比如jpg
图片或者序列化的对象。
相关指令:set <key> <value>
,get <key>
。
hash
Redis hash
是一个键值对集合。
相关指令:hmset <key> <field_1> <value_1> [field_2] [value_2]...
,hget <key> <field>
。
list
Redis list
是简单的字符串列表,依照插入顺序排序。
相关指令:lpush <key> <value_1> [value_2]...
,rpush <key> <value_1> [value_2]...
,lrange <key> <start> <stop>
。
set
Redis set
是字符串的无序集合。
相关指令:sadd <key> <member_1> [member_2]...
,smembers <key>
。
zset
“每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。”
“zset的成员是唯一的,但分数(score)却可以重复。”
相关指令:zadd <key> <score_1> <member_1> [score_2] [member_2]...
,zrangebyscore <key> <min> <max>
。
HyperLogLog
后面添加的新东西,用来做基数统计的算法,基数就是数据集中不重复元素的数量,而这个东西因为是用来计算基数的,所以不会存储输入元素本身。
Stream
后后面添加的新东西,主要用于消息队列MQ(什么物联网应用)。
至于“不是已经有发布订阅模式了吗怎么还有加入个Stream啊?”这个问题,参考网站上说:“但它有个缺点就是消息无法持久化,如果出现网络断开、Redis宕机等,消息就会被丢弃。简单来说发布订阅可以分发消息,但无法记录历史消息。”
那么Stream
呢?“而 Redis Stream 提供了消息的持久化和主备复制功能,可以让任何客户端访问任何时刻的数据,并且能记住每一个客户端的访问位置,还能保证消息不丢失。”
每个Stream
都有唯一个名称,这个名称就是Redis
的Key
。
不过菜鸟教程上的Stream
这部分也只是讲了些基础命令就没了,消费者组没怎么讲,之后我会找点其他文档看看,再进行补充。总之先把有的讲了吧!
下面以一个消息中两个字段来创建一个Stream
,并对其进行一些操作。假设我们现在需要记录学生的姓名和他们对应的学号,并放入这个Stream
中。
由于Redis
自带命令提示,所以下面命令不会给出完整格式。
xadd
我们可以用xadd
来创建队列和向队列中添加消息。
xadd
命令格式:xadd key ID field string [field string ...]
,ID
既可以自己设置,也能够让Redis
来设置。自己设置需要保持递增性,如果需要Redis
设置,ID
处就改为*
。
1 |
|
xlen
我们可以用xlen
来查看指定队列的长度。
1 |
|
xrange
要查看指定队列,则使用xrange
命令。其中,-
代表最小值,+
代表最大值
1 |
|
另外,Redis
也提供了一个倒序获取消息列表的命令:xrevrange
,用法和xrange
一致。
xdel
要删除某一消息,可以使用xdel
命令。
1 |
|
Redis的发布订阅
Redis
也有发布订阅通信模式,发布者发布信息到频道,频道转发消息给订阅者,示例如下:
我们需要打开两个redis-cli
,先在第一个里面进行频道订阅
1 |
|
然后来到第二个redis-cli
进行信息的发布
1 |
|
接着就能看到另外一边显示出信息了
1 |
|
Redis中的事务
既然它是个数据库,那很明显它也有事务!(Redis
的事务处理步骤如下:
开始事务——
multi
命令入队——set
or other commands
执行事务——exec
/ 取消事务——discard
但是要注意的是,如果在执行事务的过程中,有命令执行失败并不会打断事务执行,所以也不会回滚之前的操作。Redis
的事务还有一个watch
命令可以监视key
,如果在事务执行之前这个(或这些)key
被其他命令所改动,那么事务将被打断。
比如现在有两个redis-cli
都在使用同一个数据库,第一个在执行事务,第二个改变了第一个事务中监视的key
,那么第一个中的事务将被打断。
同样的我们打开两个redis-cli
来使用一下watch
。在第一个窗口中,我们先使用set
命令设置一个键值对:127.0.0.1:6379> set WatchKey "A value"
。然后来到第二个窗口,输入如下:
1 |
|
上面监视了在第一个窗口设置的WatchKey
键,然后设置了一个三条命令的事务。这时候先别执行,回到第一个窗口对WatchKey
进行修改,比如删除:127.0.0.1:6379> del WatchKey
,执行成功后再在第二个窗口执行事务:
1 |
|
可以看到exec
命令直接返回了null
,说明事务没有被执行。
Redis数据备份与恢复
要备份数据库,可以使用save
或bgsave
命令,直接在redis-cli
中输入即可,该命令执行后会生成dump.rdb
文件。要恢复数据也十分容易,直接将dump.rdb
文件置于Redis
安装目录并启动服务即可。
Redis密码验证
为Redis
设置密码访问,使用config set requirepass <password>
命令即可。如果需要查看密码,使用config get requirepass
命令即可。
可能遇到的问题
redis-cli
乱码
Solution: redis-cli --raw
乱七八糟的话
也许以后又学到什么Redis
相关再放到这里。
参考
希望本文章能够帮到您~