1.为什么我们需要re
dis?
因为re
dis是在我们的内存中实现缓存的 因此读取速率比在硬盘中的
MysqL快上很多 在某些特定的场景 几秒钟信息量特别大的时候尤其用的多
对于关系型
数据库,即使做到了分库分表,它的读写速度也只能达到1W+ 很显然不能适用于高并发的场景
而Reids这类非关系型
数据库,读写速度可以达到10W+每秒,于是常用作缓存,是能够顶住大部分场景的冲击的。
2.关系型
数据库和非关系型
数据库
关系型
数据库:即我们常用的
MysqL等
数据库,它的语言被称为
sql(structured query language)
我们知道关系型
数据库的内部模型其实就是
一个二维表,之所以它们被称为关系
数据库而不是表
数据库
就是因为在
数据库中:关系比表更加重要
非关系型
数据库:
no
sql(not only
sql) 也有人称它为文档型
数据库
比如我们对不同的表
增加同
一个ID
标签,就能在
查询的时候进行关联
3.Re
dis(Remote Dictionary Server 远程字典服务器 )是
一个由C语言编写的,开源的高
性能非关系型的键值对
数据库,它以字典结构存储数据。并允许其他应用通过TCP协议读写字典中的
内容。
4.Re
dis支持的键值对数据类型如下
-
字符串 string
-
散列 list
-
列表 list
-
集合
这种存储结构域
MysqL等关系
数据库的二维表形式的存储结构有很大的差异。举个例子
post["title"]="Hello World"
post["content"]= "Blablabla..."
5.内存存储与持久化
Re
dis数据库中的所有数据都存储在内存中,由于内存的读写速度远快于硬盘,因此Re
dis在
性能上对比其他基于硬盘存储的
数据库,不过在程序
退出后内存中的数据会丢失,不过re
dis提供了持久化的
支持,即可以将内存中的数据异步写入到硬盘中,同时不影响继续提供服务
6.启动服务端
re
dis-server.exe
启动客户端
重新开
一个cmd
双击re
dis-cli.exe程序
或者
re
dis-cli.exe -h 127.0.0.1 -p 6379 //服务器地址和端口号
默认
停止re
dis
考虑到Re
dis有可能正在将内存中的数据同步到硬盘中,强行终止Re
dis进程可能会导致数据丢失,正确停止Re
dis的方式应该是向Re
dis发送SHUTDOWN命令
reids-cli SHUTDOWN
7.re
dis配置:
con
fig set con
fig_setting_name new_con
fig_value
//栗子
//con
fig set loglevel "notice"
8.Re
dis数据类型
1.string //re
dis最基本的数据类型,是一种键值对类型
特点:二进制安全,即reids的string可以包含任何数据,比如jpg
图片或者序列化的对象,最大能存储512MB的值
栗子:
re
dis 127.0.0.1:6379>SET mystring "xiaocheng"
OK
re
dis 127.0.0.1:6379>GET mystring
"xiaocheng"
2.Hash
re
dis hash是
一个键值对集合。其底层是
一个string类型的filed和value的映射表,hash特别适合用于存储对象。
栗子:
re
dis 127.0.0.1:6379> HMSET runoob field1 "Hello" field2 "World""OK"
re
dis 127.0.0.1:6379> HGET runoob field1
"Hello"
re
dis 127.0.0.1:6379> HGET runoob field2
"World"
在这个例子中使用了re
dis的HMSET和HGET命令,HMSET设置了两个field=>value对,HGET
获取对应filed对应的value
每个hash可以存储2的32次方-1键值对 大概有四十多亿
3.List
list是简单的字符串列表,按照插入顺序排序,可以
添加一个元素到列表的头部(左边)或者尾部(右边)
栗子:
re
dis 127.0.0.1:6379> DEL runoob
re
dis 127.0.0.1:6379> lpush runoob re
dis
(integer) 1
re
dis 127.0.0.1:6379> lpush runoob mongodb
(integer) 2
re
dis 127.0.0.1:6379> lpush runoob rabbitmq
(integer) 3
re
dis 127.0.0.1:6379> lrange runoob 0 101) "rabbitmq"2) "mongodb"3) "re
dis"
上面的栗子使用了lpush
添加元素
lrange
加上左右边界 就能够遍历从左边界到右边界的list
list最多也可存储2的32次方-1个元素
4.Set
re
dis的set是string类型的无需集合,通过哈希表实现,所以
添加,
删除,查找的复杂度都是O(1),因为是hash表,所以set里的元素具有唯一性
栗子:
re
dis 127.0.0.1:6379> DEL runoob
re
dis 127.0.0.1:6379> sadd runoob re
dis
(integer) 1
re
dis 127.0.0.1:6379> sadd runoob mongodb
(integer) 1
re
dis 127.0.0.1:6379> sadd runoob rabbitmq
(integer) 1
re
dis 127.0.0.1:6379> sadd runoob rabbitmq
(integer) 0
re
dis 127.0.0.1:6379> smembers runoob
1) "re
dis"2) "rabbitmq"3) "mongodb"
以上示例中rabbitmq
添加了两次,但因为set中元素的唯一性,所以第二次
添加的元素将被忽略
sadd:
添加set中的元素
smembers:
获取set中的元素
set中的最大成员数也为2的32次方-1
5.zset(sorted set:有序集合)
和set一样,string类型元素的集合,且不允许重复的成员。
不同:每个元素都会关联
一个double类型的分数,re
dis正式通过分数来为集合中的成员进行从小到大的排序
zset的成员是唯一的,但分数却可以重复
栗子:
re
dis 127.0.0.1:6379> zadd runoob 0 re
dis
(integer) 1
re
dis 127.0.0.1:6379> zadd runoob 0 mongodb
(integer) 1
re
dis 127.0.0.1:6379> zadd runoob 0 rabbitmq
(integer) 1
re
dis 127.0.0.1:6379> zadd runoob 0 rabbitmq
(integer) 0
re
dis 127.0.0.1:6379> ZRANGEBY
score runoob 0 10001) "mongodb"2) "rabbitmq"3) "re
dis"
zadd:
添加元素 第
一个值是分数 第二个是string类型的值
zrangeby
score:通过分数进行排序
输出 后面两个参数是分数的范围 如果两个string分数一致的话 那么就通过string的排序进行先后
输出
9.re
dis命令:
re
dis命令需要作用在re
dis服务上执行操作,要在re
dis服务上进行操作就需要
一个re
dis客户端。
re
dis客户端:
re
dis-cli
re
dis服务端:
re
dis-server.exe
11.re
dis key
re
dis键的基本语法如下:
command keyname
示例:
re
dis 127.0.0.1:6379> SET runoobkey re
dis
OK
re
dis 127.0.0.1:6379> DEL runoobkey
(integer) 1
//以上示例 set是
一个命令 runoobkey是
一个键 re
dis是值 del也是命令
第一条语句是将runoobkey的值设置为re
dis
第二条语句是
删除runoobkey键
//如果成功了则
输出(integer) 1 否则
输出(integer) 0
最常用的操作re
dis key的命令
del key //在key存在时
删除key
exists key //检查给定key是否存在
rename key newkey //
重命名key
type key //返回key所存储的值的类型
12.re
dis string
re
dis string 相关命令用于管理re
dis string的值,基本语法如下:
re
dis 127.0.0.1:6379>command key_name
栗子:
re
dis 127.0.0.1:6379> SET runoobkey re
dis
OK
re
dis 127.0.0.1:6379> GET runoobkey
"re
dis"
常用re
dis string commond:
set key value //设置指定key的值
get key //
获取指定key的值
setnx key value //只有在key不存在时设置key的值
strlen key //返回key所存储的字符串值的长度
13.re
dis hash
re
dis hash是
一个string类型的field和value的映射表,hash特别适合用于存储对象
栗子:
127.0.0.1:6379> HMSET runoobkey name "re
dis tutorial" description "re
dis basic commands for caching" likes 20 visitors 23000
OK
127.0.0.1:6379> HGETALL runoobkey
1) "name"2) "re
dis tutorial"3) "description"4) "re
dis basic commands for caching"5) "likes"6) "20"7) "visitors"8) "23000"
在上述的栗子中,我们设置了re
dis的一些描述信息:
name:2
description:re
dis basic commands for caching
likes: 20
visitior:23000
//注意存储的都是字符串类型 在re
dis里面没有整数类型
re
dis hash command:
hdel key field1 //
删除一个hash字段
hdel key all //
删除整个hash表
hget key field //
获取存储在hash表中特定字段的值
hgetall key //
获取在哈希表中指定key的所有字段和值
hkeys key //
获取哈希表中的所有字段
hlen key//
获取哈希表中字段的
数量
hmset key field1 field2//
获取所有给定字段的值
hmset key field1 value1 field2 value2 //同时
hvals key//
获取哈希表中所有值
14.re
dis list
re
dis list是简单的字符串列表,按照插入顺序排序,可以
添加一个元素到头部或者尾部
一个列表最多可以包含2的32次方-1个元素
栗子:
re
dis 127.0.0.1:6379> LPUSH runoobkey re
dis
(integer) 1
re
dis 127.0.0.1:6379> LPUSH runoobkey mongodb
(integer) 2
re
dis 127.0.0.1:6379> LPUSH runoobkey
MysqL
(integer) 3
re
dis 127.0.0.1:6379> LRANGE runoobkey 0 10
1) "
MysqL"2) "mongodb"3) "re
dis"
在以上示例中 使用了lpush将三个值插入到了名为runoobkey的列表当中
并通过lrange key 0 10 把runnoobkey中下表从0到10的值全部读取出来
re
dis list command:
blpop key timeout //移除并
获取列表的第
一个元素
brpop key timeout //移除并
获取列表的最后
一个元素
lindex key index //通过索引
获取列表中的元素
llen key//
获取列表长度
lpush key value1 (value2) //将
一个或多个值插入到列表头部
lpushx key value //将
一个值插入到已存在的列表头部
lrange key start stop//
获取列表指定范围内的元素
del key//
删除列表
15.re
dis set
re
dis的set是string类型的无需集合,集合成员是唯一的,集合对象的编码可以是intset或者hashtable
Re
dis中集合是通过哈希表实现的,所以
添加,
删除,查找的复杂度都是O(1)
最大的成员数也是2的32次方-1
栗子:
re
dis 127.0.0.1:6379> SADD runoobkey re
dis
(integer) 1
re
dis 127.0.0.1:6379> SADD runoobkey mongodb
(integer) 1
re
dis 127.0.0.1:6379> SADD runoobkey
MysqL
(integer) 1
re
dis 127.0.0.1:6379> SADD runoobkey
MysqL
(integer) 0
re
dis 127.0.0.1:6379> SMEMBERS runoobkey
1) "
MysqL"2) "mongodb"3) "re
dis"
//在上面的demo中我们通过sadd命令向 key 为runoobkey的set中插入了三个元素,然后使用smembers读取出了key里面的值
re
dis set command:
sadd key member1【member2】 //像集合中
添加一个或者多个成员
scard key //
获取集合中的成员数
sismember key member //判断member元素是否是集合key的成员
smembers key //返回集合中的所有成员
spop key //移除并返回集合中的
一个随机元素
del key //
删除一个集合
16.re
dis zset
re
dis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员
不同的是每个元素都会关联
一个double类型的分数,re
dis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但
score却可以重复
有序集合也是通过哈希表实现的,所以
添加 删除 查找的复杂度都是O(1)
栗子:
re
dis 127.0.0.1:6379> ZADD runoobkey 1 re
dis
(integer) 1
re
dis 127.0.0.1:6379> ZADD runoobkey 2 mongodb
(integer) 1
re
dis 127.0.0.1:6379> ZADD runoobkey 3
MysqL
(integer) 1
re
dis 127.0.0.1:6379> ZADD runoobkey 3
MysqL
(integer) 0
re
dis 127.0.0.1:6379> ZADD runoobkey 4
MysqL
(integer) 0
re
dis 127.0.0.1:6379> ZRANGE runoobkey 0 10 WITH
scoreS
1) "re
dis"2) "1"3) "mongodb"4) "2"5) "
MysqL"6) "4"
//在上面的demo 中我们通过zadd命令向 key为runoobkey的zset中
添加元素 其中 数字是元素的
score 字符串是元素的value
re
dis zset command:
zadd key
score1 member1 (
score2 member2) //向有序集合
添加一个或者多个成员
zcard key //
获取有序集合的成员数
zcountkeystop (with
scores) //通过索引区间返回有序集合指定区间内的成员
zrangeby
score key min max (with
scores) //通过分数返回有序集合指定区间内的成员
zrank key member //返回有序集合中指定成员的索引
zrem key member (member2) //移除有序集合中的
一个或者多个成员
z
score key member//返回有序集合中,成员的分数值
del key//
删除一个有序集合
17.re
dis HyperLogLog
re
dis在2.8.9版本
添加了HyperLogLog结构
它是用来做技术
统计的算法
优点:在输入元素的
数量或者体积非常大时,计算基数所需的空间总是固定的,而且很小
在re
dis里,每
一个HyperLogLog只需要花费12KB内存,就可以计算接近2的64次方个不同元素的基数。
这和计算基数时,元素越多耗费内存就越多的集合形成了鲜明的对比。
但是因为HyperLogLog只会根据输入元素来计算基数,而不会存储输入元素本身,所以HyperLogLog不能像集合那样返回输入的各个元素
基数:
一个数据集内不重复元素的个数
比如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。 基数估计就是在误差可接受的范围内,
快速计算基数。
re
dis HyperLogLog command:
pfadd key element (element) //
添加指定元素到HyperLogLog中
pfcount key //返回给定HyperLogLog的基数估计值
pfmerge destkey sourcekey (sourcekey) //将多个HyperLogLog合并为
一个
18.re
dis发布
订阅
re
dis发布
订阅是一种消息通信模式,发送者(pub)发送消息,
订阅者(sub)接收消息
re
dis客户端可以
订阅任意
数量的频道
demo:
第
一个re
dis-cli:
re
dis 127.0.0.1:6379> SUBSCRIBE runoobChat
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "re
disChat"
3) (integer) 1
第二个re
dis-cli:
re
dis 127.0.0.1:6379> PUBLISH runoobChat "Re
dis PUBLISH test"
(integer) 1
re
dis 127.0.0.1:6379> PUBLISH runoobChat "Learn re
dis by runoob.com"
(integer) 1
#
订阅者的客户端会
显示如下消息
1) "message"
2) "runoobChat"
3) "Re
dis PUBLISH test"
1) "message"
2) "runoobChat"
3) "Learn re
dis by runoob.com"
//第
一个cli的subscribe命令表示
订阅runoobChat频道
第二个cli输入publish命令表示往runoobChat频道发送消息 这个时候第
一个cli就会看见第二个cli客户端发送的测试消息
re
dis pub/sub command:
psubscribe pattern //
订阅一个或者多个频道
pubsub subcommand //查看
订阅与发布系统状态
publish channel message //将信息发送到指定的频道
punsubscribe pattern1 (pattern2) //退订所有给定模式的频道
subscribe channel (channel) //
订阅给定
一个或多个频道的信息
unsubscribe channel //退订给定的频道
19.re
dis事务:
re
dis事务可以一次执行多个命令,并且带有一下三个重要的保证:
-
批量操作在发送exec命令前被放入队列缓存
-
收到exec命令后进入事务执行,事务中任意命令执行失败,其他的命令依然被执行
-
在事务执行过程,其他客户端提交的命令请求不会被插入到事务执行命令序列中
一个事务从开始到执行会经历以下三个阶段:
单个re
dis命令的执行是原子性的,但re
dis没有在事物上
增加任何维持原子性的机制,所以re
dis事务的执行兵不是原子性的。
事务可以理解为
一个打爆的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。
demo:
re
dis 127.0.0.1:7000> multi
OK
re
dis 127.0.0.1:7000> set a aaa
QUEUED
re
dis 127.0.0.1:7000> set b bbb
QUEUED
re
dis 127.0.0.1:7000> set c ccc
QUEUED
re
dis 127.0.0.1:7000> exec1) OK
2) OK
3) OK
如果在set b执行时失败
那么set a 已经执行成功 不会回滚
set c 还会继续执行
re
dis transaction command:
discard//取消事务,放弃执行事务块的所有命令
exec//执行所有事务快的命令
multi//
标记一个事务快的开始
unwatch //取消watch命令对key的监视
watch key1 (key2) //监视
一个或者多个key 如果在事务执行之前这些key被其他命令改动,那么事务将被打断
20.re
dis连接
re
dis connect command:
auph password //验证
密码是否正确
echo message //打印字符串
ping //查看服务是否运行
quit //
关闭当前连接
select index //切换到指定的
数据库
21.re
dis 脚本
re
dis脚本使用lua解释器来执行脚本。re
dis 2.6版本通过内嵌
支持lua环境,执行脚本的常用命令为EVAL
关于lua:一种轻量小巧的脚本语言,用标准C语言编写并以源
代码形式开放,其设计目的是为了嵌入应用程序当中,从而为应用程序提供灵活的扩展和定制
功能。
应用场景:
-
游戏开发
-
独立应用脚本
-
web应用脚本
-
扩展和数据库插件
-
安全系统,如入侵检测系统
Eval命令的基本语法:
re
dis 127.0.0.1:6379> EVAL script numkeys key [key ...] arg [arg ...]
re
dis lua command:
evla script numkeys key...arg... //执行lua脚本
evalsha sha1 numkeys key //执行lua脚本
script fulsh //从脚本缓存中移除所有脚本
script kill //杀死当前正在运行的lua脚本
22.re
dis stream 是re
dis 5.0版本新
增加的数据结构
re
dis stream主要用于消息队列,re
dis本身使用
一个re
dis发布
订阅来实现消息队列的
功能,但它有个缺陷就是消息无法持久化,如果出现网络断开,re
dis宕机等情况,消息就会被抛弃。
简单来说发布
订阅(pub/sub)可以粉
发消息,但无法记录历史信息
23.re
dis的缺点:
-
因为其是存储在内存中的,即使可以持久化,但也容易丢失
-
redis属于kv型非关系型数据库,即只能由k找到v,而不能由v找到k
-
redis过于依靠硬件,即使现在内存价格降低了,但对于redis仍然昂贵
24.go使用
MysqL
我用的是
"github.com/garyburd/redigo/re
dis"
其中有conn接口
conn接口的do
函数可以执行re
dis命令,参数和re
dis-cli命令参数格式一致。
25.在很多框架里面我们能看见args变量,那么它到底是个什么东西呢
它一般是
一个字符串变量名,总的来说就是个存放字符串数组用的,是arguments的缩写。
26.re
dis各种数据类型的应用场合
-
string: 不知道用什么就用string,因为string是redis中最基本也是最简单的数据类型
-
hash:存储、读取、修改、删除用户属性
-
list:最新消息排行等功能;消息队列
-
set:共同好友 利用唯一性,统计访问网站的唯一ip
-
sorted set:排行榜 带权重的消息队列
27.re
dis常用场景
-
高并发下的数据缓存,比如在某个场景下,大量日志同时写入数据库会给服务器带来巨大压力,可以先将数据写入redis中,再由redis写入数据库,减轻同时写入压力
-
热点信息快速显示,如果有一个新闻首页,需要快速显示各栏目前20条热点新闻,如果直接查库的话,在大量用户同时访问下,会同时有很多数据库请求,这时就可以用redis进行优化,在新闻录入时将标题、时间、来源等写入redis中,客户端访问时,可以从内存中一次性取出当天热点新闻列表,极大地提高请求速度和节约了服务器开销
-
保存会话信息,可以将登录后用户信息缓存入redis并同时设置key过期时间,这样后台api过滤请求时,就可以从内存中读取用户信息,而且redis的过期机制,天然支持用户身份有效期校验,用起来十分方便
-
统计计数 ,可以用incrby命令统计计数
-
其他场景:队列、发布订阅等等
1.re
dis启动
方法:有直接启动和初始化脚本启动两种方式
直接启动:
-
redis-server
-
redis-server --port 6380 //指定6380端口启动
初始化脚本启动(linux):
2.停止re
dis
关闭re
dis的时候可能正在将内存中的数据同步到硬盘中,强行终止re
dis进程可能会导致数据丢失,正确的停止redsi的方式应该是发送SHUTDOWN命令
在re
dis收到shutdown命令后,会先断开所有客户端的连接,然后根据配置执行持久化,最后
退出
3.re
dis客户端
登录
-
redis-cli
-
redis-cli -h 127.0.0.1 -p 6379 //指定服务器和端口号登录
4.re
dis数据库:re
dis默认
支持16个
数据库,每个
数据库对外都是
一个从0开始的递增数字命名,客户端和re
dis连接后
默认会
自动连接到0号
数据库,这些
数据库的名字不允许
修改,另外re
dis不支持对于为每个
数据库设置不同的
密码,所以
一个客户端要么能访问全部的
数据库,要么
一个也访问不了,最重要的是:多个
数据库之间并不是完全隔离的。比如FLUSHALL命令可以清空
一个Re
dis实例中所有
数据库的数据
5.glob风格
通配符格式
符号
|
含义
|
?
|
匹配一个字符
|
*
|
匹配任意个字符(包括0个)
|
【】
|
匹配括号间的任一字符,可以使用“-”符号表示一个范围,如a[b-d]可以匹配ab\ac\ad
|
\x
|
匹配字符x,用于转义符号。如要匹配‘?’
就需要使用\?
|
6.re
dis命令是不区分大小写的
7.key命令:
-
keys * //遍历redis中所有的键,在键数量较多时会影响性能,不建议在生产环境中使用
-
exists key //判断键是否存在 如果存在返回1 否则返回0
-
del key [key...] //可以删除一个或者多个键 返回值是删除的键的个数
-
type key //获取键值的数据类型
-
set key value //赋值
-
get key //取值
8.字符串类型命令
-
自增命令 incr key //当存储的字符串是整数形式时,incr能让当前键值递增,并返回递增之后的值 键值不是整数时redis会报错
-
如果同时多个客户端连接到redis时可能出现竞态条件(race condition:指一个系统或者进程的输出,依赖于不受控制的时间的出现顺序或者出现时间),例如有两个客户端A和B都要执行incr命令并准备将同一个键的键值增加,结果虽然是对键执行了两次递增操作,但最后以后的键值是增1而不是增2,因为所有的Redis命令都是原子操作(atomic operation)
-
incrby key increment //增加指定的整数
-
decr key //自减命令
-
decrby key decrement//减少指定的整数
-
incrbyfloat key increment //增加指定的浮点数
-
append key value //向尾部增加值
-
strlen key //获取字符串长度
-
mget key [key...] //与get类似 不过可以获得多个键的键值
-
mset key value [key value...] //与set类似 不过可以同时设置多个键
9.散列类型命令:
散列:
一个key具有多个
属性和value
栗子:
一个叫做car的key:
car name:BMW
car price:500
car time:2021
-
hest key field value //给key的一个field赋值 不区分插入和更新
-
hget key field //取得key的一个field中的值
-
hmset key field value [field value ...] //多个field赋值
-
hmget key field [field..] //多个field取值
-
hgetall key //取所有field的值
-
hexists key field //判断字段是否存在 存在返回1 不存在返回0
-
hsetnx key field value //当字段不存在时赋值
-
hincrby key field increment //给key中的一个字段增加数字
-
hdel key field[field...] //删除多个字段
-
hkeys key //获得所有字段的名字
-
hvals key //获得所有字段值
-
hlen key //获取字段数量
10.列表类型命令:由双向链表实现
优点:插入和
删除速度快
缺点:根据索引
查询的速度慢
如果想把列表当成栈 则搭配使用lpush和lpop/rpush和rpop
如果想要把列表当成队列 则搭配使用lpsuh和rpop/rpush和lpop
-
lpush key value [value...] //向列表左侧添加元素
-
rpush key value [value...] //向列表右侧添加元素
-
lpop //左边弹出一个元素
-
rpop //右边弹出一个元素
-
llen key //获得元素个数
-
lrange keys start stop //遍历 从左索引到右索引
-
lrem key count value //删除count个指定为value的值 当count>0 从左边开始删 当count<0 从右边开始删 当count=0 全删
-
lindex key index //获取索引的元素值
-
lset key index value //设置指定索引的元素值
-
ltrim key start end //保留指定片段
-
rpoplpush source destination //将元素从一个列表转移到另一个列表 将source最右侧元素弹出 加入到destination表的最左侧
-
linsert key before|after pivot value //插入元素 首先找到pivot元素 根据第二个参数决定插入到前面还是后面
11.集合类型命令
13.re
dis事务
Re
dis中的事务是一组命令的集合,事务同命令一样都是re
dis的最小执行单位,
一个事务中的命令要么都执行,要么都不执行。
事务的原理是将
一个属于事务的命令发送给Re
dis 然后再让re
dis依次执行这些命令
事务使用方式
-
multi //开启事务
-
..... //执行命令
-
exec //结束事务
14.Re
dis错误处理
-
语法错误:指令不存在或者命令参数格式错误 这种错误Redis会直接返回错误,哪怕有一部分正确的命令,redis也不会执行
-
运行错误 指在运行过程中出现的错误,比如使用散列类型命令操作集合类型的键 这种错误在实际执行前是不会发现的 如果事务中的一条命令出现了运行错误 那么事务中的其他命令仍然会继续执行
-
Redis事务没有回滚功能,所以开发者必须在事务执行出错时自行处理错误,这也是得Redis在事物上可以保持简洁和高效
lpop key //左边
15.WATCH命令
Watch命令可以监控
一个键或多个键 一旦其中
一个键被
修改 之后的事务就不会执行
监控可以持续到EXEC命令执行
UNWATCH:取消监控
16.过期时间命令
-
expire key seconds //设置过期时间
-
ttl key //查看还有多久到过期时间
-
persist key //取消键的过期时间 即让键恢复为永久
-
pexpire key millisecond //设置键的过期时间 毫秒级别
17.排序命令:sort
-
sort key //对数字进行排序 什么类型都可以 如果是对zset排序 那么会忽略元素都分数
-
sort key alpha //按照字典顺序排序非数字元素
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。