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
命令入队——setor 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相关再放到这里。
参考

希望本文章能够帮到您~