1、什么是Redis
-
远程字典服务器:一个开源的基于内存的数据库,常用作键值存储,缓存和消息队列等
-
Redis通常将全部数据存储在内存中,也可以不时的将数据写入硬盘实现持久化,但仅用于重新启动后将数据加载回内存(内存的速度比硬盘快一个数量级)
-
基于key-value 键值对的非关系型数据库
-
基于内存的kv键值对内存数据库(NoSQL一种),mysql是关系数据库
-
redis在某一些场景使用中要明显优于mysql
-
redis通常用于一些特定场景,需要与MySQL一起配合使用
-
相互依存,相互互补
优点:
-
性能极高
-
数据类型丰富,单键值对最大支持512M大小的数据
-
简单易用,支持所有主流编程语言
-
支持数据持久化,主从复制,哨兵模式等高等可用特性
2、安装Redis
在 ubuntu 上安装 Redis我的是这一种
-
控制面板--卸载程序中
-
在电脑商城中下载---Ubuntu 22.04.3 LTS,下载好点击打开,等几分钟
-
打开命令行:管理员运行
-
输入ubuntu---回车
-
在输入sudo apt update---回车
-
在输入sudo apt install redis-server---回车
-
在输入sudo service redis-server start---回车
-
在输入redis-cli---回车:(第二天学习,可以输入这个命名,进去redis客户端)
-
在输入ping回车返回给你PONG安装完成---回车
-
-
启动Redis
-
sudo service redis-server start
-
总结:当你第二天打开redis时,会发现一个异常:could not connect to redis at 127.0.0.1:6379: connection refused
我们只需要启动一下服务器进行了,不需要在网络上看着都是重装,打开你win11电脑上的Ubuntu,然后输入redis-service命令就启动了你的redis服务器就可以了,然后关闭窗口
3、基本操作
-
redis默认有16个数据库,编号为0~15,且默认访问0号数据库
select 数据库编号 选择指定的数据库 dbsize 获取当前数据库键值对数量 flushdb 清空当前数据库 flushall 清空所有数据库
save 将数据报错至磁盘 bgsave 将数据异步保存至磁盘(后台:Background) lastsave 获取最后一次成功保存的unix时间 -
通用数据操作(操作范围为当前数据库)
keys 格式 查看符合指定格式的key,*为通配符 exists key1[key2 ...] 查看是否存在一个至多个指定的key type key 按key查看value的数据类型 del key1[key2 ...] 按key删除一至多个键值对 rename 重命名key1,如果key2已经存在,其值会被覆盖 renamenx key1 key2 key2不存在时重命名key1 move key 数据库编号 按key将一个键值对移动到指定数据库 copy key1 key2 将key1的值拷贝给key2
4、字符串
set key value | 添加/修改一个键值对 |
get key | 按key获取value |
mset key1 value [key2 value2 ...] | 添加/修改一个至多个键值对 |
mget key1 [key2 ...] | 按key获取一至多个value |
append key value | 在原有value后追加内容 |
strlen key | 查看字符串长度 |
getrange key startindex endindex | 获取范围时[startindex,endindex]的子串 |
set key value nx setnx key value | 仅在key不存在时,添加一个键值对 |
set key value xx | 仅在key已存在时,添加一个键值对 |
set key value get getset key value | 修改一个键值对并返回原值,原值不存在则返回nil |
msetnx key1 value[key2 value2 ...] | 批量版setnx |
incr key | 按key创建值为1的value,或使value增长 |
incrby key 数值 | 按key使value增长(increase)给定数值 |
decr key | 按key使value减小(decrease)1 |
decrby key 数值 | 按key使value减小(decrease)给定数值 |
重点 | |
---|---|
expire key 秒数 | 设定一个生存时间 |
ttl key | 查看生存时间的剩余秒数(*kev不存在则返回-2,永久键值对则返回) |
pexpire key毫秒数 | 毫秒版expire |
pttl key | 毫秒版ttl |
persist key | 持久化(取消生存时间) |
set key value ex秒数 setex key秒数value | set + expire |
set key value px毫秒数 psetex key毫秒数value | set + pexpire |
set key value exat unix秒 | 设置一个unix秒的过期时刻 |
set key value pxat unix毫秒 | 设置一个unix毫秒的过期时间 |
set key value keepttl | set时不重置ttl |
5、散列表
hset key field1 value1 [field2 value2 ...] | 添加/修改一个键与一至多对字段和值 |
hget key field | 按key和field获取一对value |
hmget key field1[feld2 ...] | 按key和field获取一至多对value |
hgetall key | 按key获取feld获取全部的field-value |
hdel key field1[field2 ...] | 删除一至多对field-value |
hsetnx key field value | 仅在field不存在时添加一对field-value |
hkeys key | 查看一个散列表中所有的field |
hvals key | 查看一个散列表中所有的value |
hlen key | 统计一个散列表中有多少对field-value |
hexists key field | 查询一个field是否存在 |
hstrlen key field | 按key和field查看value的长度 |
hincrby key field整数值 | 按key和field使value增长(increase)给定数值 |
hincrbyfloat key field 小数值 | 按key和field使value增长(increase)给定数值 |
6、列表(List)
rpush key valueO [value1 ...] | 在列表右侧推入1至多个值 |
lpush key [... value1] valueO | 在列表左侧推入1至多个值 |
rpop key [数量] | 从列表右侧弹出(指定数量的)值★全部弹出后,key也会被删除 |
lpop key [数量] | 从列表左侧弹出(指定数量的)值*全部弹出后,key也会被删除 |
rpushx key value0 [value1 ...] | 仅当列表存在时,在列表右侧推入1至多个值 |
lpushx key [... value1] value0 | 仅当列表存在时,在列表左侧推入1至多个值 |
lrange key 0 -1 | 查询这个List集合中所有值 |
lset key *index value | 修改指定位置的值 |
linsert key before/after定位value value | 在定体value前/后插入一个值 |
lindex key *index | 按索引查看值(从0开始,也就是数值下标) |
Irange key *startindex *endindex | 查看给定范围的值 |
llen key | 查看队列长度 |
lrem key 数量value | 删除指定值(*数量为正代表从左侧开始删除,数量为正表从右侧开始删除) |
ltrim key *startindex *endindex | 将列表修剪到给定范围 |
索引从0开始,-n表示倒数第n个
7、集合(Set):你存进去的数据都是随机的
sadd key string×[stringY ...] | 添加1至多个成员 |
srem key stringX [stringY ...] | 删除1至多个成员 |
scard key | 返回成员数量,*集合基数cardinality |
sismember key string | 查看是否存在指定成员(1 有--0 没有) |
smismember key string×[stringY ...] | 批量查看是否存在指定成员 |
smembers key | 查看集合中所有成员 |
srandmember key [数量] | 随机查看指定数量的成员 |
spop key [数量] | 随机取出指定数量的成员 |
smove key1 key2 string | 将指定成员从集合1移至集合2 |
sinter key1 [key2 ...] | 查看给定集合的交集 |
sinterstore newkey key1 [key2 ...] | 存储给定集合的交集 |
sunion key1 [key2 ...] | 查看给定集合的并集 |
sunionstore newkey key1 [key2 ...] | 存储给定集合的并集 |
sdiff key1 [key2 ...] | 查看给定集合的差集 |
sdiffstore newkey key1 [key2 ...] | 存储给定集合的差集 |
8、有序集合(Set)
zadd key [nx/xx] gt/lt[incr] score1 stringX [score2 stringY ...] | 添加1至多个成员: |
XX:仅当成员存在时修改 | NX:仅当成员不存在时添加成员 |
LT(less than) : 仅当分数低于原来的分数时才更新分数 | GT(greater than):仅当分数高于原来的分数时才更新分数 |
NX:不可以与LT/GT同时使用 | CH(changed) :返回变更的成员数量 (默认返回新增的成员数量) |
incr:累加分数(选择incr时,只能操作一个分数-成员对) |
zrem key stringX[stringY ...] | 删除1至多个成员 |
zcount key minScore maxScore | 返回指定分数区间内的成员数量支持开区间:分数前加"(""支持无穷大: "-inf"负无穷大,"+inf"正无穷大 |
zscore key string | 查看成员分数(*成员不存在时返回nil) |
zmscore key stringX[stringY ...] | 批量查看成员分数(*成员不存在时返回nil) |
zcard key | 查看成员数量 |
More Actionszincrby key数值string | 将指定成员的分数增加给定数值 |
9、遍历
scan游标match格式[type 指定类型] | 遍历一定数量的key,游标:开始遍历的位置,从0开始,scan命令将返回遍历结束位置,如果返回0,说明已经遍历到了最后一个,match:指定key的格式,*为通配符count:指定遍历结束的游标,默认为10type:指定遍历的类型 |
hscan key游标match格式 | 遍历指定散列表中的字段与值 |
sscan key 游标match 格式 | 遍历指定集合中的成员 |
zscan key游标match格式 | 遍历指定有序集合中的成员与分数 |
10、事务
11、发布订阅模式
两台ubuntu客户端
一个发送,一个接收
-
首先订阅一个终端(subscribe订阅一个平台,也可以订阅多个)
subscribe 用户名
-
多个终端都可以进行访问这个终端,(publish发行,在那个平台发行信息)
publish 用户名 发行的内容
-
总结:相当于一个人创建,多个人可以进去访问,还可以添加数据