Redis_命令

来源:互联网 发布:免费下载音乐软件 编辑:程序博客网 时间:2024/06/05 11:44
  1. 基本命令

    EXISTS key          

    判断建key是否存在

    TYPE key                

    查看key的值类型

    set key value EX s      

    创建键值对key-value,设置生存时间s秒

    KEYS pattern            

    查看建
    pattern支持通配符:

    ?   匹配一个字符*   匹配任意个(包括0个)字符[]  匹配括号间的任意字符,可以使用“-”符号表示一个范围,如a[b-d]可以匹配“ab”,“ac”和“ad”\x  匹配字符x,用于转义符号

    删除键

    DEL key
    DEL命令的参数不支持通配符,可以通过如下方法删除所有符合规则的键:

    redis-cli KEYS “user:*” | xargs redis-cli DEL
    redis-cli DEL ‘redis-cli KEYS “user:*”’

    获取键key对应的值

    GET key

    为键key的值加1

    INCR key

    关于Redis键命名:
    比较好的实践是:“对象类型:对象ID:对象属性”,如键“user:1:friends”用来存储ID为1的用户的好友列表

  2. 散列类型

    散列类型(hash)适合存储对象:使用对象类别和ID构成键名,使用字段表示对象的属性。而字段值则存储属性值
    赋值与取值:

    HSET key field valueHGET key fieldHMSET key field value[field value ···]HMGET key field [field···]HGETALL key

    判断字段是否存在:

    HEXISTS key field
    当字段不存在时复制:

    HSETNX key field value
    HSETNX命令与HSET命令类似,区别在于如果字段已经存在,HSETNX命令将不执行任何操作
    增加数字:

    HINCRBY key field increment
    删除字段:

    HDEL key field [field ···]
    只获取字段名或字段值:

    HKEYS key
    HVALS key
    获得字段数量:

    HLEN key

  3. 列表类型

    向列表两端增加元素:

    LPUSH key value [value ···]
    RPUSH key value [value ···]
    从列表两端弹出元素:

    LPOP key
    RPOP key
    获取列表中元素的个数:

    LLEN key
    获得列表片段:

    LRANGE key start stop
    Redis列表的索引从0开始,LRANGE返回的值包含最右边的元素
    删除列表中前count个值为value的元素:

    LREM key count value
    获得/设置指定索引的元素值:

    LINDEX key index

    LSET key index value
    只保留列表指定字段:

    LTRIM key start end
    向列表中插入元素:

    LINSERT key BEFORE|AFTER pivot value
    在列表中找到值为pivot的元素,然后在其前/后插入值value
    将元素从一个列表转到另一个列表:

    RPOPLPUSH source destination

  4. 集合类型

    集合内的元素无序、唯一
    列表中的元素有序、不唯一
    增加/删除元素:

    SADD key member [member ···]
    SREM key member [member ···]
    获得集合中所有的元素:

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

    SISMEMBER key member
    集合间运算:

    SDIFF setA setB [setC ···] 差集
    SINTER setA setB [setC ···] 交集
    SUION setA setB [setC ···] 并集
    获得集合中元素个数:

    SCARD key
    进行集合运算并将结果存储:

    SDIFFSTORE destination key [key ···]
    SINTERSTORE destination key [key ···]
    SUNIONSTORE destination key [key ···]
    随机获取集合中的count个元素:

    SRANDMEMBER key [count]
    从集合中随机弹出一个元素:

    SPOP key

  5. 有序集合类型

    有序集合与列表的相同之处:
    ①都是有序的;
    ②都可以获得某一范围的元素。

    不同之处:
    ①列表类型是通过链表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问中间的数据速度会较慢,所以它更加适合实现如“新鲜事”或“日志”这样很少访问中间数据的应用
    ②有序集合类型是使用散列表和跳跃表实现的,所以即使读取位于中间部分的数据速度也很快
    ③列表中不能简单地调整某个元素地位置,但是有序集合可以(通过更改这个元素的分数)
    ④有序集合要比列表类型更耗费内存
    增加元素:

    ZADD key score member [score member···]
    获得元素的分数:

    ZSCORE key member
    获得排名在某个范围的元素列表:

    ZRANGE key start stop [WITHSCORES]
    ZREVRANGE key start stop [WITHSCORES]
    获取指定分数范围的元素:

    ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
    该命令按照元素分数从小到大的顺序返回分数在min和max之间(包含min和max)的元素

    ZRANGEBYSCORE scoreboard 80 100
    如果希望分数范围不包含端点值,可以在分数前加上“(”符号。

    ZRANGEBYSCORE scoreboard 80 (100
    min和max还支持无穷大,-inf和+inf分别表示负无穷和正无穷

    ZRANGEBYSCORE scoreboard (80 +inf
    LIMIT offset count表示在获得的元素列表的基础上向后偏移offset个元素,并且只获取前count个元素
    增加某个元素的分数:

    ZINCRBY key increment member
    获得集合中元素的数量:

    ZCARD key
    获得指定分数范围内的元素个数:

    ZCOUNT key min max
    删除一个或多个元素:

    ZREM key member [member ···]
    按照排名范围删除元素:

    ZREMRANGEBYRANK key start stop
    按照分数范围删除元素:

    ZREMRANGEBYSCORE key start stop
    获得元素的排名:

    ZRANK key member
    ZREVRAN key member
    计算有序集合的交集:

    ZINTERSTORE destination numkeys key [key ···] [WEIGHTS weight [weight ···]] [AGGREGATE SUM|MIN|MAX]

  6. 事务

    redis > MULTI #开始事务
    redis > EXEC #结束事务

    错误处理:
    如果是语法错误,输入EXEC命令后Redis会直接返回错误,连正确的命令也不会执行
    如果是运行错误,除了出错的命令以外的命令都会被执行,同时Redis没有回滚功能,因此需要开发者格外注意

    WATCH命令:
    可以监控一个或多个键,一旦其中有一个键被修改(或删除),之后的事务就不会执行。监控一致持续到EXEC命令(事务中的命令是在EXEC之后才执行的,所以在MULTI命令之后可以修改WATCH监控的键值)
    【由于WATCH命令的作用只是当被监控的键值被修改后阻止之后一个事务的执行,而不能保证其他客户端不修改这一键值,所以我们需要在EXEC执行失败之后重新执行整个函数】
    执行EXEC命令后会取消对所有键的监控,如果不想执行事务中的命令也可以使用UNWATCH命令来取消监控

  7. 生存时间

    Redis中可以使用EXPIRE命令设置一个键的生存时间,到时间后Redis会自动删除它

    EXPIRE key seconds

    seconds表示键的生存时间,单位是秒
    想知道一个键还有多久被删除,使用TTL命令:

    TTL key
    取消键的生存时间设置(即恢复成永久的),可以使用PERSIST命令:

    PERSIST key
    除了PERSIST命令之外,使用SET或GETSET命令为键赋值,也会同时清楚键的生存时间
    【如果使用WATCH命令监测了一个拥有生存时间的键,该键时间到期自动删除并不会被WATCH命令认为该键被改变】
    实际开发过程中很难为缓存键设置合理的生存时间,为此可以限制Redis能够使用的最大内存,并让Redis按照一定规则淘汰不需要的缓存键:修改配置文件的maxmemory参数,超过这个限制后Redis会依据

    maxmemory-policy参数指定的策略来删除不需要的键,直到Redis占用的内存小于指定内存。maxmemory-policy支持的规则如下:volatitle-lru   使用LRU算法删除一个键(只对设置了生存时间的键有效)allkeys-lru 使用LRU算法删除一个键volatitle-random    随机删除一个键(只对设置了生存时间的键有效)allkeys-random  随机删除一个键volatitle   删除生存时间最近的一个键noeviction  不删除键,只返回错误
  8. 排序

    除了使用有序集合外,可以借助Redis提供的SORT命令对列表类型、集合类型和有序集合类型的键进行排序。
    SORT命令还可以通过ALPHA参数按照字典顺序排列非数字元素:

    SORT key ALPHASORT命令的DESC参数可以实现将元素按照从大到小的顺序排列:SORT key DESCSORT命令的还支持LIMIT参数来返回指定范围的结果:SORT key DESC LIMIT 1 2

    BY参数:

    SORT tag:ruby:posts BY post:* ->time DESC

    读取post:2、post:6、post:12、post:26几个散列键中的time字段的值并以此决定tag:ruby:posts键中各个文章ID的顺序
    STORE参数:
    如果希望保存排序结果,可以使用STORE参数

    SORT性能调优:
    SORT命令的时间复杂度是O(n+mlogm)
    ①尽可能减少待排序键中元素的数量(使n尽可能小)
    ②使用LIMIT参数只获取需要的数据(使m尽可能小)
    ③如果要排序的数据量较大,尽可能使用STORE参数将结果缓存

原创粉丝点击