Redis浅学

目录

一. Redis是什么

二. Redis 的安装

三.基本操作

四.字符串

五.散列表(Hash)

六.列表List

七.集合

八.有序集合ZSet

九.遍历

十.事务​​​​​​​


一. 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

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值