目录
十.事务
一. Redis是什么
1. Redis - Remote dictionary server
a.基于内存的数据库(开源),用于键值存储/缓存/消息队列等
b.通常存储于内存中,也可写入硬盘持久化(每2s),重启后重新加载回内存 (内存速度比硬盘快一个数量级,性能就会比较好)
二. Redis 的安装
1. windows安装步骤
a.查看版本(path:设置-系统-关于-操作系统内部版本(>16237的就是新版本,安装如下))
b.控制面板-卸载或更改程序-启用或关闭Windows功能(点进去之后勾选 适用于linux的Windows子系统)
c.应用商店搜ubuntu进行安装 之后打开 或用命令 ubuntu在控制台执行打开
d.通过apt安装redis
#通过apt安装redis,避免权限不够用sudo
#更新软件列表
sudo apt update
#安装
sudo apt install redis-server
#安装后启动
sudo service redis-server start
#检验
redis-cli
#然后输入ping,如果返回PONG则安装成功
2.MacOS 安装
#安装Homebrew 是一款开源的MacOS软件包管理器
#网址:https://brew.sh
#安装命令
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
#用Homebrew 安装redis
brew install redis
#启用Redis
brew services start redid
3.Linux 安装
#Ubuntu/Debian 用apt 安装redis
sudo apt update
sudo apt install redis-server
4.CentOS/Red Hat Enterprise Linux用yum安装Redis
#yum 软件包管理器
#更新
sudo yum update
sudo yum install redis
#启用redis
su systemctl start redis
#配置Redis自启动(一般都要配)
sudo systemctl enable redis
#手动配自启动
#在/etc/redis 或 /etc 下找到redis.conf编辑该文件,直接将 supervised auto
前面的#去掉即可(或将supervised改成system)
cd /etc/redis
#假设找到redis.conf文件,用nano进去改
nano redis.conf
5.通用操作
#手动启动redis客户端,然后验证输入ping 返回PONG,则安装正常
redis-cli
#前台启动redis 服务器
redis-server
三.基本操作
1.redis 默认有16个数据库,编号为0-15,默认访问0号数据库
#选择指定数据库 select 数据库编号
select 15
#获取当前键值对数量
dbsize
#清空当前数据库
flushdb
#清空所有数据库
flushall
#保存数据到磁盘
save
#将数据异步保存到磁盘
bgsave
#获取最后一次成功保存的unix时间
lastsave
#塞数据
set key value #单塞
mset key1 value1 key2 value2 #多塞
2.通用数据操作
#查看指定格式key,*为通配符
key *
key key1
#查看是否存在一个或多个指定key,存在1个返回1,2个返回2
exist key1 key2
#按key查看value的数据类型
type key
#按key删除一个或多个键值对
del key1 key2
#重命名key1,若key2存在,则其值会被覆盖掉,如下示例,key1-2都存在,key1名字会被key2覆盖,key2的值被key1覆盖
rename key1 key2
#key2不存在时才重命名key1
renamenx key1 key2
#按key将一个键值对移到指定数据库 move key 数据库编号
move key 12
#将key1值拷贝给key2
copy key1 key2
四.字符串
1.基本操作
#添加/修改一个键值对
set key value
#按key获取value
get key
#添加/修改一个或多个键值对
mset key1 value1 key2 values2
#按key获取1个或多个value
mget key1 key2
#在原有的value后追加内容
#如原有k1 v1
#append k1 abc 后得到k1对应的value为v1abc
append key value
#查看字符串长度
strlen key
#获取范围[startindex,endindex]的子串(index从0开始,-n代表倒数第n个)
getrange key start index endindex
#仅在key不存在时,添加一个键值对
set key value nx
setnx key value
#批量版setnx
msetnx key1 value1 key2 value2
#仅在key已存在,修改一个键值对,不存在的修改返回nil
set key value xx
#修改一个键值对并返回原值,原值不存在则返回nil
set key value get
getset key value
2.字符串的内容是整数
#按key创建值为1的value,或使得value增加1 (key对应的值还是字符串,只是字符串里的值是整数)
incr key
#按key使value增长给定数值
incrby key 数值
#按key使value减1
decr key
#按key使value减小给定数值
decrby key 数值
3.临时键值对
生存时间(time to live,ttl):键值对距离被删除的剩余秒数 (如重新set,生存时间ttl将被重置)
##以下操作支持各种数据类型
#设定一个生存时间
expire key 秒数
#毫秒版expire
pexpire key 毫秒数
#查看生存时间剩余的秒数 (key不存在返回-2,永久键值对则返回-1)
ttl key
#毫秒版ttl
pttl key
#持久化,即取消生存时间
persist key
##以下操作仅支持字符串
#设置失效时间
set key value ex 秒数
setex key 秒数 value
#毫秒版
set key value ps 毫秒版
pretax key 毫秒数 value
#设置一个unix秒的过期时刻
set key value eat unix秒数
#毫秒版
set key value pat unix毫秒数
#set时不重置ttl,不会将原先的覆盖,不加keepttl则会覆盖
set key value keepttl
五.散列表(Hash)
1.格式:key - field -value (键-字段-值)(不同的key之间的字段可以相同,同key里的字段则不能重复)
#添加/修改一个键与一到多对字段和值 (老版本hset只能设置1个,多个用hmset)
set key field1 value1 field2 value2
#按key和field 获取一对value
hget key field
#按key和field 获取一到多对value
hmget key field1 field2
#按key获取全部field-value
hgetall key
#删除一到多对field-value
hdel key field1 field2
#仅在filed不存在时添加一对field-value
hsetnx key field value
#查看一个散列表中所有的field
hkeys key
#查看一个散列表中所有的value
hvals key
#统计一个散列表中有多少对field-value
hlen key
#查看一个field是否存在
hexists key value
#按key和field查看value的长度
hstrlen key field
2.value字符串的内容是数值
#按key 和 feild 使value增长给定数值
hincrby key field 整数值
hincrbyfloat key field 小数值
六.列表List
1.格式:key -value1-value2 (键-有序的值)
2.可以从队头、队尾、队推中入
3.基本操作
#索引从0开始,-n表示倒数第n个
#从列表右侧推入 1到多个值
rpush key value0 value1 value2
#从列表左侧推入1到多个值
lpush key value0 value1 value2
#从列表右侧弹出(指定数量的)值 --全部弹出后,key也会被删除
rpop key [数量]
#从列表左侧弹出(指定数量的)值 --全部弹出后,key也会被删除
lpop key [数量]
#仅当列表存在时,在列表右侧推入1到多个值
rpushx key value0 value1
#仅当列表存在时,在列表左侧推入1到多个值
lpushx key value1 value0
#修改指定位置的值
lset key *index value
#在定位value前/后插入一个值
linsert key before/after 定位value value1
#按索引查看值
lindex key *index
#查看给定范围的值
lrange key *startindex *endindex
#查看队列长度
llen key
#删除指定值 -数量为正代表从左侧开始删除,数量为负代表从右侧开始删除
#举例: lrem l1 2 c (表示在key为l1下从第一个出现c开始删,第二个还是c继续删)
lrem key 数量 value
#将列表修剪到给定范围
#eg:ltrim l1 1 -2 (表示对key为l1下的值开始保留从索引1 到 索引倒数第二之间的值 )
ltrim key *startindex *endindex
七.集合
1. 格式:key - stringx,stringy... (键-无序不重复成员)
2.基本操作
#添加1到多个成员
sadd key stringX stringY
#删除1到多个成员
srem key stringX stringY
#返回成员数量(cardinality)
scard key
#查看是否存在指定成员
sismember key string
#批量查看是否存在指定成员
smismember key stringX stringY
#查看集合中所有成员
members key
#随机查看指定数量的成员
srandmember key 数量
#随机取走指定数量的成员
stop key 数量
#将指定成员从集合1移至集合2
smove key1 key2 string
#查看给定集合的交集
sinter key1 key2
#存储给定集合的交集
sinterstore newly key1 key2
#查看给定集合的并集
sunion key1 key2
#存储给定集合的并集
sunionstore newly key1 key2
#查看给定集合的差集
stiff key1 key2
#存储给定集合的差集 (先算key1跟key2的差集,然后这个差集再跟key3的差集,以此类推)
sdiffstore newkey key1 key2
八.有序集合ZSet
1.格式:key-score1:stringX,score2:stringY (键-按分数排序的不重复成员:分数为范围在float64的浮点数,且可重复)
2.基本操作
#添加1到多个成员
#说明:NX不能与LT/GT同时使用
#NX:仅当成员不存在时添加 XX:仅当成员存在时修改成员
#LT(less than):仅当分数低于原有分数时才更新分数
#GT(great than):仅当分数高于原有分数时才更新分数
#CH(changed):返回变更成员的数量
#incr:累加分数(选择incr时只能操作一个 分数-成员对)
zadd key [nx/xx][gt/lt][ch][incr] score1 stringX score2 stringY
#删除1到多个成员
zrem key stringX stringY
#返回指定分数区间内的成员数,默认时闭区间
#说明:支持开区间:分数前加(
#支持无穷大:“-inf”负无穷大,“+inf”正无穷大
zcount key minScore maxScore
#查看成员分时 (成员不存在时返回nil)
zscore key string
#批量查看成员分数
zmscore key stringX stringY
#查看成员数量
zcard key
#将指定成员的分数增加给定数值
zincrby key 数值 string
#按区间操作
#查看指定分数区间内的成员
#说明:
#byscore:按分数升序排序 (1.支持开区间:分数前加( 2.byscore支持无穷大:“-inf”负无穷大,
#“+inf”正无穷大)
#bylex:(分数相同时)按成员字符排序 (指定字符串区间,且需要指定开闭,如[string,(string )
#bylex支持选取到开始或结束:“-”表示开始,“+”表示结束
#rev:反转
#limit 用于指定查看范围,仅在开启byscore/bylex时使用
#withscores:带分数
#*zrevrange key start end[withscores] 相当于 zrange key start end rev[withscores]
zrange key start end [byscore/bylex][rev][limit 偏移量 查看数量][withscores]
#存储指定分数区间内的成员
#偏移量,0即是无便宜,1则是从第二名开始
zrangestore newkey key start end [byscore/bylex][rev][limit偏移量 查看数量]
#查看指定字符串区间内的成员数
zlexcount key startString endString
#删除指定字符串区间内的成员
zremrangebylex key startString endString
#删除指定分数区间内的成员
zremrangebyscore key minScore maxScore
#查看成员升序排名 -从第0名开始
zrank key string
#查看成员降序排名
zrevrank key string
#删除指定排名区间内的成员
zremrangebyrank key startRank endRank
#交集 并集 差集
#查看给定集合的交集
#weights:依次为每个集合的分数设置权重 权重默认为1
#aggregate:新分数的计算方法 默认为sum
#withscores:带分数
#新分数=aggregate(集合1中该成员的分数*权重1,集合2中该成员的分数*权重2...)
zinter key的数量 key1 key2 [weights 权重1][aggregate sum|min|max][withscores]
#存储给定集合的交集
zinterstore newkey key的数量 key1 key2 [weights权重1[权重2...]][aggregate sum|min|max]
#查看给定集合的并集
zunion key的数量 key1 key2 [weights权重1 权重2][aggregate sum|min|max][withscores]
#存储给定集合的并集
zunionstore newkey key的数量key1 key2 [weights 权重1 权重2][aggregate sum|min|max]
#查看给定集合的差集
zdiff key的数量 key1 key2 [withscores]
#c存储给定集合的差集
zdiffstore newkey key的数量 key1 key2
九.遍历
1.遍历整个数据库
#遍历一定数量的key
#游标:开始遍历的位置,从0开始,如scan命令将返回遍历结束位置,如返回0则表示已遍历完
#match:指定key到格式,*为通配符
#count:指定遍历结束的游标,默认为0
#type:指定遍历的类型
scan 游标 [match 格式][count 游标][type 指定类型]
2.特定键值对的遍历
#遍历指定散列表中的字段和值
hscan key 游标[match 格式][count 游标]
#遍历指定集合中的成员
sscan key 游标[match 格式][count 游标]
#遍历指定有序集合中的成员与分数
zscan key 游标[match 格式][count 游标]
十.事务
1.基本操作
#开启一个事务
multi
#执行事务
#执行前发现错误将无法执行
#执行中发现错误只能跳过错误的那一步
exec
#回滚事务
discard
#eg:
mset Tom 100 May 100 Tony 100 #创建数据,Tom May Tony都有100块
multi #开启一个事务
incrby Tom 10 #Tom加了10块
decrby May 10 #May减了10块
exec #执行上操作 后 Tom 110,May 90
#举例接下面第二点
set coupon 5 #设5块钱红包1个
watch coupon #监视coupon
multi #开启事务
incr Tom #Tom抢到了这个红包
decr coupon #红包数量就得减1
exec #执行 且成功
#然后在另一个redis的客户端 May也去抢红包
watch coupon #它也监视着coupon
multi #开启事务
incr May #May也来抢红包
decr coupon #红包减1
exec #上面已经执行成功之后,没有红包了,上面已经领完了红包,这里就会执行失败,返回nil
2.监视
#按key开始监视键值对
#需要在事务开始之前启用
#如果被监视的键值对在事务exec之前被事务之外的操作改动,事务将被discard
watch key1 key2
#停止监视
#exec或discard会自动调用unwathch
unwatch