Redis开发与运维1-2章笔记

Redis性能剖析与高级特性
本文深入探讨Redis的高速运行原理,包括纯内存访问、非阻塞I/O及单线程设计的优势。详解Redis配置与操作命令,如键管理、数据库切换、数据类型及其内部编码。同时,介绍高级特性如键迁移、渐进式遍历和数据过期策略。

为什么redis单线程还能这么快
  1. 纯内存访问,Redis将所有数据放在内存中,内存的响应时长大
    约为100纳秒,这是Redis达到每秒万级别访问的重要基础。
  2. 非阻塞I/O,Redis使用epoll作为I/O多路复用技术的实现
  3. 单线程避免了线程切换和竞态产生的消耗。但是单线程会有一个问题:对于每个命令的执行时间是有要求的。如果某个命令执行过长,会造成其他命令的阻塞,对于Redis这种高性能的服务来说是致命的,所以Redis是面向快速执行场景的数据库
配置文件启动redis
redis-server   $path/redis.conf
关闭server
redis-cli shutdown
redis-cli shutdown nosave|save #通过加参数控制生成持久化文件
常用命令
keys pattern	 #列出模式键
dbsize			#键总数
exists key		#键是否存在
del [key...]	#删除键
expire key seconds #设置过期时间(s)
ttl key			#返回剩余时间,-1键没设置过期时间,-2键不存在
type key		#键类型,不存在返回none
object encoding key #键内部编码
键管理
rename key newkey #rename之前,newkey已经存在,则会覆盖
renamenx key newkey #rename的非覆盖版
randomkey #随机挑选一个键
expireat key timestamp #key在秒级时间戳timestamp后过期
pexpire key millisecond #设置过期时间(ms)
pexpireat key millisecond-timestrap #设置ms级时间戳
pttl key 	#返回剩余时间精确到ms
persist key #将键的过期时间删除

ps:

  1. 无论是使用过期时间还是时间戳,秒级还是毫秒级,在Redis内部最终使用的都是pexpireat
  2. 对于字符串类型键,执行set命令会去掉过期时间,这个问题很容易在开发中被忽视
  3. Redis不支持二级数据结构(例如哈希、列表)内部元素的过期功能,例如不能对列表类型的一个元素做过期时间设置
  4. setex命令作为set+expire的组合,不但是原子执行,同时减少了一次网络通讯的时间
迁移键
migrate host port key|"" destination_db timeout [copy] [replace] [keys [key...]]
#迁移多个键key|""这里为空字符串""
#timeout 迁移的超时时间(ms)
#[copy] 迁移后不删除原键
#[replace] 如果目标键存在,则进行覆盖
渐进式遍历键
scan cursor [match pattern] [count number]
#cursor 必需参数,第一次遍历从0开始,每次scan遍历完都会返回当前游标的值,直到游标值为0,表示遍历结束 
#match pattern 模式匹配
#count number 每次要遍历的键个数,默认10
数据库管理

当使用redis cli -h ip -p port连接Redis时,redis默认进入的是0号数据库

select dbIndex #切换数据库
flushdb | flushall #清除数据库,前者清除当前,后者清除所有
为什么不使用多个数据库
  1. ·Redis是单线程的。如果使用多个数据库,那么这些数据库仍然是使用一个CPU,彼此之间还是会受到影响的
  2. 多数据库的使用方式,会让调试和运维不同业务的数据库变的困难,
    假如有一个慢查询存在,依然会影响其他数据库,这样会使得别的业务方定位问题非常的困难
  3. ·部分Redis的客户端根本就不支持这种方式。即使支持,在开发的时候来回切换数字形式的数据库,很容易弄乱

如果要使用多个数据库功能,完全可以在一台机器上部署多个Redis实例,彼此用端口来做区分,因为现代计算机或者服务器通常是有多个CPU的。这样既保证了业务之间不会受到影响,又合理地使用了CPU资源。

string

字符串最大不能超过 512 MB

set key value
mset [key value...] #一次设置多个kv
mget [key...]		#批量获取
incr key 			#对值(int)进行自增操作
decr key			#对值(int)进行自减操作
incrby key val		#对值(int)进行自增val
decrby key val		#对值(int)进行自减val
incrbyfloat key val #对值(float)进行自增val
append key word		#向字符串末尾追加word
strlen key			#字符串长度(每个中文占用三个字节)
getset key val		#设置并返回原值
setrange key offeset val #设置指定位置的字符
getrange key start end #获取部分字符串

set命令有几个选项:
· ex seconds:为键设置秒级过期时间。
·px milliseconds:为键设置毫秒级过期时间。
·nx:键必须不存在,才可以设置成功,用于添加。
·xx:与nx相反,键必须存在,才可以设置成功,用于更新。
redis 还提供了 setex 与 setnx 与上面的选项有相同的功能

incr命令用于对值做自增操作,返回结果分为三种情况:
·值不是整数,返回错误。
·值是整数,返回自增后的结果。
·键不存在,按照值为0自增,返回结果为1。

字符串类型的内部编码有3种:
·int:8个字节的长整型。
·embstr:小于等于39个字节的字符串。
·raw:大于39个字节的字符串

hash
hset key filed value
hmset key [filed value...]
hget key filed
hmget key [filed...]
hdel key [filed ...]
hstrlen key filed
hincrby key filed
hlen key				#filed个数
hexists key filed		#判断filed是否存在
hkeys key				#获取所有filed
hvals key				#获取所有value
hgetall key				#获取所有filed-value
list

在这里插入图片描述

linsert key before|after val newval #在val前或后插入newval
lrem key count value #删除指定元素 
ltrim key start end #按照索引范围修剪列表

lrem命令会从列表中找到等于value的元素进行删除,根据count的不同
分为三种情况:
·count>0,从左到右,删除最多count个元素。
·count<0,从右到左,删除最多count绝对值个元素。
·count=0,删除所有。

set
sadd key [element...]
srem key [element...]
scard key #计算元素个数
sismember key element #判断元素是否在集合中
srandmember key [count] #随机从集合返回指定个数元素,count不写默认为1
spop key [count] #从集合中随机弹出元素
smembers key #获取集合所有元素

集合间操作

sinter [key...] #求多个集合的交集
sunion [key...] #求多个集合的并集
sdiff  [key...] #求多个集合的差集

由于集合操作在元素多的情况下比较耗时,redis提供了三个命令 (原命令+store)将结果存在destination key中
for example : sinterstore destkey [key…]

zset
zadd key [score member...]
zcard key #计算成员个数
zscore key member #计算某个成员分数
zrank key member #计算成员排名
zrevrand key member #从高到底排名
zincrby key incermemt member #增加成员分数
zrange key start end [withscores] 
zrevrange key start end [withscores] #分数从大到小返回,加withscores连上分数一起返回
zrangebyscore key min max [withscores] [limit offset count] #同时min和max还支持开区间(小括号)和闭区间(中括号),-inf和+inf分别代表无限小和无限大
zcount key min max #返回指定分数范围成员个数
zrembyrank key start end #删除指定排名内的升序元素
zrembyscore key min max #删除指定分数范围成员

集合间操作

zinterstore destionation numkeys [key...] [weights [weight...]] [aggregate sum|min|max]

·destination:交集计算结果保存到这个键。
·numkeys:需要做交集计算键的个数。
·key[key…]:需要做交集计算的键。
·weights weight[weight…]:每个键的权重,在做交集计算时,每个键中
的每个member会将自己分数乘以这个权重,每个键的权重默认是1。
·aggregate sum|min|max:计算成员交集后,分值可以按照sum(和)、
min(最小值)、max(最大值)做汇总,默认值是sum。

·Redis3.2为zadd命令添加了nx、xx、ch、incr四个选项:
·nx:member必须不存在,才可以设置成功,用于添加。
·xx:member必须存在,才可以设置成功,用于更新。
·ch:返回此次操作后,有序集合元素和分数发生变化的个数
·incr:对score做增加,相当于zincrby

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值