最近学习了下Redis,在网上搜集整理了一些Redis操作的相关命令,整理如下:
1. key-value
1.1普通复制
set mykey myValue --存在即覆盖
get myKey
del myKey
1.2 数字自增
set num++ 100
incr num++ --执行后为101
incrby num++ 50 --执行一次加50
1.3 批量复制
mset key1 key1Value key2 key2Value
mget key1 key2
1.4 判断key是否存在, 存在返回1,否则返回0
命令
结果
exists key1 1
exists key3 0
1.5 判断存储类型
type key1 --结果 string
type num++ --结果 string
1.6 设置数据失效时间(精度可以使用毫秒或秒)
1.6.1 设置失效时间
set key3 key3Value
expire key1 5
1.6.2 取消失效时间设置
persist key1
1.6.3 赋值的同时设置试下时间
set key3 key3Value ex 10 --设置key3的值为10秒
ttl key3 --查看key3的剩余失效时间
2. list集合(Redis Lists用linked list实现)
2.1 简介
一般意义上讲,列表就是有序元素的序列:10,20,1,2,3就是一个列表。但用数组实现的List和用Linked List实现的List,在属性方面大不相同。
Redis lists基于Linked Lists实现。这意味着即使在一个list中有数百万个元素,在头部或尾部添加一个元素的操作,其时间复杂度也是常数级别的。用LPUSH 命令在十个元素的list头部添加新元素,和在千万元素list头部添加新元素的速度相同。
那么,坏消息是什么?在数组实现的list中利用索引访问元素的速度极快,而同样的操作在linked list实现的list上没有那么快。
Redis Lists用linked list实现的原因是:对于数据库系统来说,至关重要的特性是:能非常快的在很大的列表上添加元素。另一个重要因素是,正如你将要看到的:Redis lists能在常数时间取得常数长度。
如果快速访问集合元素很重要,建议使用可排序集合(sorted sets)。
2.2 添加元素
2.2.1 单个添加
lpush myList 1 --左边头部添加
rpush myList 2 --右边尾部添加
2.2.2 批量添加
rpush myList 1 2 3 4
2.3 集合元素查看
lrange 带有两个索引,一定范围的第一个和最后一个元素。这两个索引都可以为负来告知Redis从尾部开始计数,因此-1表示最后一个元素,-2表示list中的倒数第二个元素,以此类推。
lrange mylist 0 -1 --0表示开始位置所以,-1表示最后一个位置索引
2.4 队列实现(它从list中删除元素并同时返回删除的值,当myList为空时,返回NULL)
lpop myList -- 左边开始位置弹出,并删除
rpop myList -- 右边开始位置弹出,并删除
2.5 应用场景
2.5.1 聊天消息队列
2.5.2 新闻列表
2.5.3 评论列表
2.6 List上的阻塞操作
可以使用Redis来实现生产者和消费者模型,如使用LPUSH和RPOP来实现该功能。但会遇到这种情景:list是空,这时候消费者就需要轮询来获取数据,这样就会增加redis的访问压力、增加消费端的cpu时间,而很多访问都是无用的。为此redis提供了阻塞式访问 BRPOP 和 BLPOP 命令。 消费者可以在获取数据时指定如果数据不存在阻塞的时间,如果在时限内获得数据则立即返回,如果超时还没有数据则返回null, 0表示一直阻塞。
同时redis还会为所有阻塞的消费者以先后顺序排队
3. set集合
3.1 增加(值重复,会覆盖,只保留唯一的值)
sadd mySet setValue1 setValue2 setValue3
3.2 查看
smembers mySet
3.3 判断值是否存在(存在返回 1,不存在返回 0)
sismember mySet setValue1
3.4 返回set的元素个数,不存在返回 0
scard mySet
3.5 返回一个随机元素
srandmember mySet
3.6 删除一个随机元素,并返回该元素
spop mySet
3.7 删除一个或多个元素
srem mySet setValue1
原文链接:http://www.redis.cn/topics/data-types-intro.html#lists