redisAPI整理

全局命令
1、查看所有键 keys *
2、键总数 dbsize
3、检查键是否存在 exists key
4、删除键 del key del key1 key2 key3
5、键过期 expire key seconds 大于0的整数表示剩余过期时间;-1表示已过期;-2表示键不存在;ttl key返回键剩余时间

数据结构和内部编码
1、查询内部编码 object encoding key

字符串
命令
常用命令
1、设置值
set key value[ex seconds] [px milliseconds] [nx|xx]
setex key seconds value
setnx key value
2、获取值 get key
3、批量设置值 mset key value [key value]
4、批量获取值 mget key [key ...]
5、计数
incr key
decr key
incrby key increment
decrby key decrement
incrbyfloat key increment
不常用命令
1、追加值 append key value
2、字符串长度 strlen key 每个中文字占用3个字节
3、设置并返回原值 getset key value
4、设置指定位置的字符 setrange key offeset value
5、获取部分字符串 getrange key start end

字符串内部编码
1、int 8个字节的长整型
2、embstr 小于等于39个字节的字符串
3、raw 大于39个字节的字符串

应用场景
1、缓存功能
2、计数
3、共享session
4、限速

哈希
命令
1、设置值 hset key field value 例:hset user:1 name tom
2、获取值 hget key field 例:hget user:1 name
3、删除field hdel key field 例:hdel user:1 name
4、计算field个数 hlen key
5、批量设置或获取field-value hmget key field [field ...]
hmset key field value [field value ...]
6、判断field是否存在 hexists key field
7、获取所有field hkeys key
8、获取所有key hvals key
9、获取所有的field-value hgetall key
10、hincrby hincrbyfloat
11、计算value的字符串长度 hstrlen key field

内部编码
1、ziplist field个数比较少且没有大的value时
2、hashtable 当有value大于64字节/field个数超过512

使用场景
1、使用hash类型缓存用户信息
(1)原生字符串类型:每个属性一个键
(2)序列化字符串类型:将用户信息序列化后用一个键保存
Set user:1 serialize(userInfo)
(3)hash类型:每个用户属性使用一对field-value,但是只用一个键保存

列表
命令
添加操作
(1)从右边插入元素
rpush key value [value ...]
Lrange 0 -1从左到右获取列表所有元素
(2)从左边插入元素
lpush key value[value ...]
(3)向某个元素前或后插入元素
linsert key before|after pivot value
例:linsert listkey before b java
查找
(1)获取指定范围内的元素列表
lrange key start end
(2)获取列表指定索引下标的元素
lindex key index
(3)获取列表长度
Llen key
删除
(1)从列表左侧弹出元素
(2)从列表右侧弹出元素
(3)删除指定元素
(4)按照索引范围修剪列表
修改
修改指定索引下标的元素
lset key index newvalue
阻塞操作
blpop key [key ...] timeout
brpop key[key ...] timeout
timeout:阻塞时间(单位:秒)
(1)列表为空:如果timeout=3,那么客户端要等到3秒后返回,如果timeout=0,那么客户端一直阻塞等下去。
(2)列表不为空:客户端立即返回。
注意:在使用brpop时,有两点需要注意
1.如果是多个键,那么brpop会从左到右遍历键,一旦有一个键能弹出元素,客户端立即返回。
2.如果多个客户端对同一个键执行brpop,那么最先执行brpop命令的客户端可以获取到弹出的值。
内部编码:
(1)元素个数较少且没有大元素时,内部编码为ziplist
(2)元素个数超过512个,内部编码变为linkedlist
(3)某个元素超过64字节,内部编码也会变为linkedlist

使用场景
1、消息队列
2、文章列表

列表使用口诀:
lpush+lpop=Stack
Lpush+rpop=Queue
Lpush+ltrim=Capped Collection
Lpush+brpop=Message Queue

集合(无序,不重复)
命令
集合内操作
(1)添加元素
sadd key element [element...]
(2)删除元素
srem key element [element ...]
(3)计算元素个数
scard key
(4)判断元素是否在集合中
sismember key element
(5)随机从集合返回指定个数元素
srandmember key [count]
(6)从集合随机弹出元素
spop key
(7)获取所有元素
smember key
集合间操作
(1)求多个集合的交集
sinter key [key...]
(2)求多个集合的并集
sunion key [key...]
(3)求多个集合的差集
sdiff key [key...]
(4)将交集、并集、差集的结果保存
sinterstore destination key [key...]
sunionstore destination key[key...]
sdiffstore destination key[key...]
例:sinterstore user:1_2:inter user:1:follow user:2:follow
内部编码
(1)当元素个数较少且都为整数时,内部编码为intset
(2)当元素个数超过512个,内部编码变为hashtable
(3)当元素个数不为整数时,内部编码为hashtable
使用场景
1、给用户添加标签
2、给标签添加用户
3、删除用户下的标签
4、删除标签下的用户
5、计算用户共同感兴趣的标签

有序集合(不重复,有排序)
命令
集合内
(1)添加成员
zadd key score member [score member...]
例:zadd user:ranking 251 tom
nx:必须不存在,用于添加
xx:必须存在,用于更新
ch:返回此次操作后,有序集合元素和分数发生变化的个数
incr:对score做增加,相当于后面介绍的zincrby
(2)计算成员个数
zcard key
(3)计算某个成员的分数
zscore key member
(4)计算成员排名
zrank key member(从低到高)
zrevrank key member(从高到低)
(5)删除成员
zrem key member [member...]
(6)增加成员的分数
zincrby key increment member
例:zincrby user:ranking 9 tom
(7)返回指定排名范围的成员
zrange key start end [withscore]
zrevrange key start end [withscore]
(8)返回指定分数范围的成员
zrangebyscore key min max [withscores] [limit offset count]
zrevrangebyscore key min max [withscores] [limit offset count]
例:zrangebyscore user:ranking 200 tinf withsore
(9)返回指定分数范围成员个数
zcount key min max
(10)删除指定排名内的升序元素
zremrangebyrank key start end
(11)删除指定分数范围的成员
zremrangebyscore key min max
集合间操作
(1)交集
zinterstore destination numkeys key [key...] [weights weight [weight...]] [aggregate sum|min|max]
参数说明:
destination:交集计算结果保存到这个键
numkeys:需要做交集计算键的个数
key [key...]:需要做交集计算的键
weights weight [weight...]:每个键的权重,在做交集计算时,每个键中的每个member会将自己分数乘以这个权重,每个键的权重默认是1
aggregate sum|min|max:计算成员交集后,分值可以按照sum、min、max做汇总,默认值是sum
例:
zinterstore user:ranking:1_inter_2 2 user:ranking:1 user:ranking:2
zinterstore user:ranking:1_inter_2 2 user:ranking:1 user:ranking:2 weight 1 0.5 aggregate max
(2)并集
zunionstore destination numkeys ke [key...] [weights weight [weight...]] aggregate sum|min|max
内部编码
(1)当元素个数较少且每个元素较小时,内部编码为skiplist
(2)当元素个数超过128个,内部编码变为ziplist
(3)当某个元素大于64字节时,内部编码变为hashtable
使用场景
1、添加用户赞数
2、取消用户赞数
3、展示获取赞数最多的十个用户
4、展示用户信息以及用户分数

键管理
单个键管理
(1)键重命名
rename key newkey
renamenx只有newkey不存在时才被覆盖
(2)随机返回一个键
randomkey
(3)键过期
expire key seconds
expireat key timstamp
ttl/pttl用于查询键剩余过期时间,pttl精度更高,可以达到毫秒级

毫秒级过期方案:
pexpire key milliseconds:键在milliseconds毫秒后过期
pexpire key millseconds-timestamp 键在毫秒级时间戳timestamp后过期
注意:
? 如果expire key的键不存在,返回结果为0
? 如果过期时间为负值,键会立即被删除,如del一样
? persist命令可以将键的过期时间清除
? 对于字符串类型间,执行set命令会去掉过期时间
? 不支持二级数据结构
? setex命令作为set+expire的组合,不但是原子执行,同时减少了一次网络通讯的时间
(4)迁移键
? move
move key db
? dump+store
dump key
restore key ttl value
迁移过程如下:
1、在源Redis上执行dump
2、在目标Redis上执行restore
3、migrate(重要,需要深入研究)
遍历键
(1)全量遍历键
keys pattern
(2)渐进式遍历
scan cursor [match pattern] [count number]
数据库管理
(1)切换数据库
select dbIndex
(2)flushdb/flushall

时间: 2024-08-03 22:25:11

redisAPI整理的相关文章

WPF笔记整理 - Bitmap和BitmapImage

项目中有图片处理的逻辑,因此要用到Bitmap.而WPF加载的一般都是BitmapImage.这里就需要将BitmapImage转成Bitmap 1. 图片的路径要用这样的,假设图片在project下的Images目录,文件名XXImage.png. pack://application:,,,/xxx;component/Images/XXImage.png 2. 代码: Bitmap bmp = null; var image = new BitmapImage(new Uri(this.X

linux 命令 及学习进度综合整理

linux  命令  及学习进度综合整理 pwd 查看当前所在位置 cd  跳转到什么什么目录 ls  显示所有文件和目录 ls -l  显示目录详细信息 cd ..  返回上一级 vi  lnany.txt  创建一个文件 vi  .lnany.txt    创建一个隐藏文件 vim 是 vi 的升级版 功能更多 出现 -bash: vim: command not found 的解决办法 i. 那么如何安裝 vim 呢?输入rpm -qa|grep vim 命令, 如果 vim 已经正确安裝

夏令营讲课内容整理Day 0.

今年没有发纸质讲义是最气的.还好我留了点课件. 第一次用这个估计也不怎么会用,但尝试一下新事物总是好的. 前四天gty哥哥讲的内容和去年差不多,后三天zhn大佬讲的内容有点难,努力去理解吧. 毕竟知识还是需要消化的. 这里我只整理知识点,每天上午评测的题目我会单独处理. 嗯大概就是这样了. 写完后我就会考虑发到博客园里.

linux基本命令整理(三):进程和vim

linux基本命令整理(三) -----------进程和vim 一.进程 1.查看进程 ps:将某个时间点的程序运行的状况截取下来 a:所有的进程 x:后台进程 u:有效的使用者相关的进程(常用组合aux) -IA:也能观察系统所有的数据 axjf:连同部分的程序树状态 -I:今查看和自己bash相关的程序 top:动态的观察进程的变化 -d:后面接描述,就是整个页面刷新的时间:默认是5秒 -b:以批次的方式执行top -n:与-b搭配使用,意义是需要进行几次top的输出结果 如:top -b

检测和整理索引碎片

索引碎片的检测和整理 存储数据是为了查找数据,存储结构影响数据查找的性能.对无序数据进行查找,最快的查找算法是哈希查找:对有序数据进行查找,最快的查找算法是平衡树查找.在传统的关系型数据库中,聚集索引和非聚集索引都是平衡树(B-Tree)类型的存储结构,用于顺序存储数据,便于实现数据的快速查找.除了提升数据查找的性能之外,索引还能减少硬盘IO和内存消耗.通常情况下,硬盘IO是查找性能的瓶颈,由于索引是数据表的列的子集,这意味着,索引只存储部分列的数据,占用的硬盘空间比全部列少了很多,因此,数据库

新awk整理

总感觉上一篇awk的总结几乎是照着man翻译过来的,惨不忍睹 无意间在互联网上有找到了宝贵的资料 感觉整理的很好,想着照着这个来重新写下,对照新的man更新下吧,只是总是在改变的 一.awk简介二.awk工作流程三.awk程序结构四.awk基本语法 awk命令行模式 awk程序文件 awk标准选项五.awk内置变量 标准awk变量 awk特定变量(即专有变量)六.awk操作符 算数运算符 关系运算符 逻辑运算符 三元运算符 一元运算符 字符串连接操作符(即空格符) 数组成员操作符(in) 正则表

Linux运维(十)-2016-12-9整理

也有段时间没有整理面试题目了,这几天呢,完成了2场实习生和1场校招,十分郁闷,为什么金融运维一点都不关注技术,在乎我的学校成绩,我尼玛想说,学校那么水的课程能说明什么,跟技术有一丁丁点关系吗?我学业成绩不好,就能否定我的专业岗位基础不行吗?唉,劳资想说,你如果质疑我的能力,你就问我,劳资要是被你虐倒是我算我输,学艺不精我就服,看过去有球用. 这辈子职业生涯都不想进外包和IDC这两种类型的公司,就是TM打杂的,薪资还低,关键是不厚道,比如垃圾胜蓝.这回校招那家是我之前就提到的那家,大多数人对我是认

Web网站服务及知识整理(二)

Web网站服务及知识整理(二)

整理第三方类库

网络 AFNetworking:mattt大神的网络事件处理框架. XMPPFramework:XMPP,主要用于即时通讯. CocoaAsyncSocket:异步socket请求框架. Reachability:用来检查应用当前的网络连接状况,是苹果Reachability类的直接替代品,支持ARC,支持block,使用GCD方法来通知网络接口的变化. SocketRocket:WebSocket协议是一种网络协议,它的Web设计实现了浏览器与服务器的双向通讯.通过使用WebSockets,你