redis之api学习

学习redis api的方法:

1:理解redis的一些机制,会发现这些命令有很强的通用性。

2:redis不是万金油,有些数据结构和命令必须在特定场景下使用。

keys * :查询当前数据库中中的所有键

dbsize:数据库键的数量

rpush :插入一个列表数据

exists:判断键是否存在

del:    支持删除多个键 del key1 key2

设置键过期:expire key second 到期后会自动删除键

通过ttl 命令可以观察距离键的过期时间

type :查看键的类型

object encoding:查看键的内部编码实现

字符类型命令: 字符串类型内部编码:int emnstr(小于等于39字节字符串) raw

设置值:

set key value nx (nx代表键必须不存在,才能将该键向数据库添加成功。相当于向数据库添加一个新键)

set key value xx(键必须存在才能向数据库添加该建,相当于修改的情况)这里简单的介绍一下一下,setnx可以作为分布式锁的一种实现方案。

获取值:
get key

批量的设置与获取值 mset key1 value1 key2 value2 key3 value3

mget key1 key2,key3

推荐使用批量操作:
如果使用get,执行n次命令所需时间:n次get时间=n次网络时间+n次命令时间

使用mget:n次get时间:1次网络时间+n次get时间

这里n次时间是指客户端的时间,因为redis客户端与服务器通过网络套接字通信。

追加值命令:
append key value

字符串长度:

strlen key

设置并返回原来的值
设置指定位置的字符:
setrange key offset value (offset 代表值的偏移位置) 如果value大于当前字符长度会进行覆盖后面的值。

getrange key start end(必须有start 与end不然会报错)

哈希命令:hash类型内部编码:ziplist hashtable
hset key field value

hget key field

批量添加field value

hmset key field1 value1 field2 value2

批量获得field1 field2

hmget key field1 field2

判断field是否存在:
hexists key field

获取key的所有field

hkeys key

获取key所具有的filed的所有的value:
hvals key

获取所有的field-value

hgetall key

计算字符串的长度:
hstrlen key

列表命令:内部编码:linkedlist ziplist 列表可以用来存储多个有序的字符串,记住列表是有序的,列表中的元素可以是重复的
rpush key value

范围查找:
lrange key start end

lrange key 0 -1 可以从左到右获取列表的所有元素

从左边插入元素:
lpush key value

向某个元素前/后插入元素:
linsert key before |after pivot(具体元素的值) value

获取列表指定索引下标的元素:
lindex key index (index为-1代表最右边第一个元素,-1之后没有了)

获取列表长度:
llen key

删除:
从列表左侧弹出元素:
lpop key

从列表右侧弹出元素:
rpop key

删除指定元素:
lrem key count value

因为列表可以具有重复元素:所以当count>0 代表从左到右开始删除 count个值等于value的元素

当count<0 代表从右到左开始删除 count个值等于value的元素

当count==0时,代表删除所有值等于value的元素

按照索引范围修剪列表:
ltrim listkey  1 3

只保留listkey的第二个和第四个元素

修改指定索引下标的元素:
lset key index newvalue

brpop 阻塞式的获得列表尾部的元素,如果列表尾部有元素则返回,否则就阻塞。

集合命令:内部编码:intset (为什么用intset还是无序,根据书上说的intset底层数组难道不是有序的吗?)hashtable

问题解答:intset编码的集合里面的元素是有序的(按照整数从小到大排列),hashtable编码的集合是无序的

集合类型也是用来保存多个hash的字符串元素,但和列表类型不一样的是,集合中不允许有重复元素,并且集合中的元素是无序的,不能通过索引下标获取元素

添加元素:
sadd key element1 element2...

删除元素:
srem key element1 element2

计算元素个数:

scard key

判断元素是否在集合中:
sismember  key element

随机从集合返回指定个数元素:
srandmember key count (count可选,默认为1)

从集合中随机弹出元素:
spop key

获取所有元素:
smembers key

求交集:
sinter key1 key2

求并集:
sunion key1 key2

求差集:
sdiff key1 key2  需要注意key1 key2的顺序

将交,并,差集合结果进行保存:
sinterstore destination key1 key2...

sunionstore destination key1 key2...

sdiffstore destination key1 key2....

有序集合:内部编码:压缩列表,跳跃表

压缩列表每个集合元素使用两个相邻的压裂列表节点表示,第一个节点保存元素的值,第二个节点保存元素的分值。

跳跃表由哈希表与跳跃表组成。哈希表使得获取成员的时间复杂度降低,而跳跃表可以使得获取排名,执行范围查找时间复杂度降低。

有序集合中的元素可以排序是因为它给每个元素都设置了一个分数。

添加元素:
zadd key  score member score mmber2

计算成员个数

zcard key

计算某个成员的分数:和有序集合底层实现有关,所以执行此命令较快。
zscore key member

计算某个成员的排名:
zrank key  member 计算正向排名

zrerank key member 计算逆向排名

删除成员:
zrem key member (删除成员)

增加成员的分数:
zincrby key 分数 member(分数代表增加的分数)

返回指定下标的元素:
zrange key start end (按照得分从小到大排序) (withscores)可选参数,带上也返回得分

zrevrange key start end(按照得分从大到小排序)(withscores)

返回指定分数范围的成员:
zrangebyscore key min max (withscore) 从小到大返回

zrevrangebyscore key min max(withscore) 从小到大返回

返回指定分数范围成员个数:
zcount key min max(min 与max都包含)

范围删除:
删除指定排名范围内的升序元素:
zremrangebyrank key start end

删除指定分数范围内的元素:
zremrangebyscore key min max

集合间的操作:
交集:
zinterstore destination numkeys key1 key2...    weights weights...     aggregate sum|min|max

zinterstore key3 2 key1 key2 1 0.5 aggregate sum

key1的成员变量member权重为1,key2的member权重为0.5 计算所得交集 分值按照sum进行汇总

numkeys:需指定参与交集的key的个数,必须指定,上面就是两个,所以指定为2

键的管理

键的通用命令:
type del object exists expire

键重命名

rename key newkey

方式newkey与已经存在在数据库中的键重复,采用

renamenx 只有在newkey不存在时,才可以使用rename key newkey

随机返回一个键:
randomkey

键过期:
expire key seconds(秒级)

expire key timestamp(时间戳)

毫秒级过期时间设置

pexpire key milliseconds

pexpire key milliseconds-timestamp

过期时间为-1,代表不会失效

使用expire key的键不存在,返回结果为0

如果过期时间为副值,键会立即被删除 example:
expire key -2

persist:命令可以将键的过期时间删除

小提示:对于字符串类型键,执行set命令会去掉过期时间

迁移键:实现在不同实例之间进行数据迁移过程功能
(1)dump key:在源主机上执行,dump命令会将键值序列化,格式采用rdb格式

restore key ttl value(ttl=0则代表没有过期时间)

(2)migrate:命令也是在redis实例之间进行数据迁移的,migrate命令的执行是原子性的,不同于dump在多个redis实例上开启客户端,migrate命令传输直接在源reids和目标redis上

完成,目标redis完成restore后会发送ok给源redis

渐进式遍历:
scan:它能有效的解决keys命令存在的问题。和keys命令执行时会遍历所有键不同,scan采用渐进式遍历的方法来解决keys命令可能带来的阻塞问题,每次scan命令的时间复杂度是o(1)
要实现keys所提供的的功能,需要多次进行scan

scan cursor match_pattern count number

match_pattern:可选 代表支持正则表达式匹配;

count_number:可选 代表每次需要遍历的个数

cursor 必须要有,每一执行完scan 都会返回下一个cursor,拿到下一个cursor即可继续向下遍历,直到cursor返回0,代表全部遍历。

select db 选择数据库

flushdb 清楚当前数据库

flushall 清楚所有数据库

原文地址:https://www.cnblogs.com/foreverlearnxzw/p/13861337.html