发布网友 发布时间:2022-04-25 00:04
共5个回答
懂视网 时间:2022-05-01 20:24
List操作,redis中的List在在内存中按照一个name对应一个List来存储。如图:
lpush(name,values)
1 2 3 4 5 6 7 8 |
# 在name对应的list中添加元素,每个新的元素都添加到列表的最左边
# 如:
# r.lpush(‘oo‘, 11,22,33)
# 保存顺序为: 33,22,11
# 扩展:
# rpush(name, values) 表示从右向左操作
|
lpushx(name,value)
1 2 3 4 |
# 在name对应的list中添加元素,只有name已经存在时,值添加到列表的最左边
# 更多:
# rpushx(name, value) 表示从右向左操作
|
llen(name)
1 |
# name对应的list元素的个数
|
linsert(name, where, refvalue, value))
1 2 3 4 5 6 7 |
# 在name对应的列表的某一个值前或后插入一个新值
# 参数:
# name,redis的name
# where,BEFORE或AFTER
# refvalue,标杆值,即:在它前后插入数据
# value,要插入的数据
|
r.lset(name, index, value)
1 2 3 4 5 6 |
# 对name对应的list中的某一个索引位置重新赋值
# 参数:
# name,redis的name
# index,list的索引位置
# value,要设置的值
|
r.lrem(name, value, num)
1 2 3 4 5 6 7 8 |
# 在name对应的list中删除指定的值
# 参数:
# name,redis的name
# value,要删除的值
# num, num=0,删除列表中所有的指定值;
# num=2,从前到后,删除2个;
# num=-2,从后向前,删除2个
|
lpop(name)
1 2 3 4 |
# 在name对应的列表的左侧获取第一个元素并在列表中移除,返回值则是第一个元素
# 更多:
# rpop(name) 表示从右向左操作
|
lindex(name, index)
1 |
在name对应的列表中根据索引获取列表元素
|
lrange(name, start, end)
1 2 3 4 5 |
# 在name对应的列表分片获取数据
# 参数:
# name,redis的name
# start,索引的起始位置
# end,索引结束位置
|
ltrim(name, start, end)
1 2 3 4 5 |
# 在name对应的列表中移除没有在start-end索引之间的值
# 参数:
# name,redis的name
# start,索引的起始位置
# end,索引结束位置
|
rpoplpush(src, dst)
1 2 3 4 |
# 从一个列表取出最右边的元素,同时将其添加至另一个列表的最左边
# 参数:
# src,要取数据的列表的name
# dst,要添加数据的列表的name
|
blpop(keys, timeout)
1 2 3 4 5 6 7 8 |
# 将多个列表排列,按照从左到右去pop对应列表的元素
# 参数:
# keys,redis的name的集合
# timeout,超时时间,当元素所有列表的元素获取完之后,阻塞等待列表内有数据的时间(秒), 0 表示永远阻塞
# 更多:
# r.brpop(keys, timeout),从右向左获取数据
|
brpoplpush(src, dst, timeout=0)
1 2 3 4 5 6 |
# 从一个列表的右侧移除一个元素并将其添加到另一个列表的左侧
# 参数:
# src,取出并要移除元素的列表对应的name
# dst,要插入元素的列表对应的name
# timeout,当src对应的列表中没有数据时,阻塞等待其有数据的超时时间(秒),0 表示永远阻塞
|
自定义增量迭代
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# 由于redis类库中没有提供对列表元素的增量迭代,如果想要循环name对应的列表的所有元素,那么就需要:
# 1、获取name对应的所有列表
# 2、循环列表
# 但是,如果列表非常大,那么就有可能在第一步时就将程序的内容撑爆,所有有必要自定义一个增量迭代的功能:
def list_iter(name):
"""
自定义redis列表增量迭代
:param name: redis中的name,即:迭代name对应的列表
:return: yield 返回 列表元素
"""
list_count = r.llen(name)
for index in xrange (list_count):
yield r.lindex(name, index)
# 使用
for item in list_iter( ‘pp‘ ):
print item
|
Set操作,Set集合就是不允许重复的列表
sadd(name,values)
1 |
# name对应的集合中添加元素
|
scard(name)
1 |
获取name对应的集合中元素个数
|
sdiff(keys, *args)
1 |
在第一个name对应的集合中且不在其他name对应的集合的元素集合
|
sdiffstore(dest, keys, *args)
1 |
# 获取第一个name对应的集合中且不在其他name对应的集合,再将其新加入到dest对应的集合中
|
sinter(keys, *args)
1 |
# 获取多一个name对应集合的并集
|
sinterstore(dest, keys, *args)
1 |
# 获取多一个name对应集合的并集,再讲其加入到dest对应的集合中
|
sismember(name, value)
1 |
# 检查value是否是name对应的集合的成员
|
smembers(name)
1 |
# 获取name对应的集合的所有成员
|
smove(src, dst, value)
1 |
# 将某个成员从一个集合中移动到另外一个集合
|
spop(name)
1 |
# 从集合的右侧(尾部)移除一个成员,并将其返回
|
srandmember(name, numbers)
1 |
# 从name对应的集合中随机获取 numbers 个元素
|
srem(name, values)
1 |
# 在name对应的集合中删除某些值
|
sunion(keys, *args)
1 |
# 获取多一个name对应的集合的并集
|
sunionstore(dest,keys, *args)
1 |
# 获取多一个name对应的集合的并集,并将结果保存到dest对应的集合中
|
sscan(name, cursor=0, match=None, count=None)
sscan_iter(name, match=None, count=None)
1 |
# 同字符串的操作,用于增量迭代分批获取元素,避免内存消耗太大
|
有序集合,在集合的基础上,为每元素排序;元素的排序需要根据另外一个值来进行比较,所以,对于有序集合,每一个元素有两个值,即:值和分数,分数专门用来做排序。
zadd(name, *args, **kwargs)
1 2 3 4 5 |
# 在name对应的有序集合中添加元素
# 如:
# zadd(‘zz‘, ‘n1‘, 1, ‘n2‘, 2)
# 或
# zadd(‘zz‘, n1=11, n2=22)
|
zcard(name)
1 |
# 获取name对应的有序集合元素的数量
|
zcount(name, min, max)
1 |
# 获取name对应的有序集合中分数 在 [min,max] 之间的个数
|
zincrby(name, value, amount)
1 |
# 自增name对应的有序集合的 name 对应的分数
|
r.zrange( name, start, end, desc=False, withscores=False, score_cast_func=float)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# 按照索引范围获取name对应的有序集合的元素
# 参数:
# name,redis的name
# start,有序集合索引起始位置(非分数)
# end,有序集合索引结束位置(非分数)
# desc,排序规则,默认按照分数从小到大排序
# withscores,是否获取元素的分数,默认只获取元素的值
# score_cast_func,对分数进行数据转换的函数
# 更多:
# 从大到小排序
# zrevrange(name, start, end, withscores=False, score_cast_func=float)
# 按照分数范围获取name对应的有序集合的元素
# zrangebyscore(name, min, max, start=None, num=None, withscores=False, score_cast_func=float)
# 从大到小排序
# zrevrangebyscore(name, max, min, start=None, num=None, withscores=False, score_cast_func=float)
|
zrank(name, value)
1 2 3 4 |
# 获取某个值在 name对应的有序集合中的排行(从 0 开始)
# 更多:
# zrevrank(name, value),从大到小排序
|
zrangebylex(name, min, max, start=None, num=None)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# 当有序集合的所有成员都具有相同的分值时,有序集合的元素会根据成员的 值 (lexicographical ordering)来进行排序,而这个命令则可以返回给定的有序集合键 key 中, 元素的值介于 min 和 max 之间的成员
# 对集合中的每个成员进行逐个字节的对比(byte-by-byte compare), 并按照从低到高的顺序, 返回排序后的集合成员。 如果两个字符串有一部分内容是相同的话, 那么命令会认为较长的字符串比较短的字符串要大
# 参数:
# name,redis的name
# min,左区间(值)。 + 表示正无限; - 表示负无限; ( 表示开区间; [ 则表示闭区间
热心网友
时间:2022-05-01 17:32
1、 Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例如图片、视频等等。 |