Redis基本命令整理

strings类型

设值

设单个值

set key value

如果不存在,设一个值

setnx key value 
//nx: not exists

设置过期时间(expired time)

setex key [number] value 
//number为有效期,有效期过后,值为nil

把number索引后面替换为value

setrange key [number] value 

设置多个值

mset key1 value1 key2 value2 …

批量设值

msetnx key1 value1 key2 value2 …
//设值全部成功或全部回滚

取值

get key

设置key值,并返回key的旧值

getset key value

获取指定区间的子字符串

getrange key number1 number2

批量获取key值,不存在的返回nil

mget key1 key2 key3 …

值操作

自增1

incr key

增加指定值

incrby key number

自减1

decr key

减去指定值

decry key number

拼接字符

append key value

取key的value长度

strlen key

hashes类型

创建hash数据结构,指定key值为value

hset hash_name key value

如果不存在,设置新值

hsetnx hash key value

批量设定hash的多个field

hmset hash key1 value1 key2 value2 …

获取hash指定的key值

hget hash key

获取指定的全部key值

hmget hash key1 key2 …

给指定的hash field加上定值number

hincrby hash key number

指定的field是否存在

hexists hash key

获取指定的hash的field数量

hlen hash

移除指定的field

hdel hash key

返回所有key值

hkeys hash

返回所有value值

hvals hash

返回所有key value

hgetall hash

lists类型

 链表结构,主要功能是push pop,获取范围内的值
 分非阻塞版本(默认)、阻塞版本

list左侧(或称头部)添加值value

lpush list value

list右侧(或称尾部)添加值value

rpush list value

在key对应list的位置之前/之后插入元素value

linsert list before/after key value

设置list中指定下标元素值

lset list index value

从list中删除count个value值

lrem list count value 

保留指定区间的值

ltrim list index1 index2

弹出顶部元素并返回该值

lpop list

同上,底部

rpop list

弹出list1底部元素,并添加到list2头部,返回该值

rpoplpush list1 list2

返回value在list中的索引

lindex list value

返回list长度

llen list

sets类型

 集合,和数学的集合概念相似,有交并差等操作(union、intersection、difference)
 无序string类型集合,由hashtable实现,复杂度O(1)

添加set值

sadd set value

移除set中的值value

srem set value

随机移除set的value并返回

spop set

差集

sdiff set1 set2
 返回set1于set2的差集(即set1中不存在于set2中的value的集合)
 sdiff set1 set2的结果 不等于 sdiff set2 set1的结果

将set1 set2的差集存储到set3中

sdiffstore set3 set1 set2

返回set1 set2的交集

sinter set1 set2

将交集存储到set3

sinterstore set3 set1 set2

并集

sunion set1 set2

将并集存储到set3

sunionstore set3 set1 set2

将value从set1移动到set2

smove set1 set2 value

返回set中元素数量

scard set

判断value是否是set中元素

sismember set value

随机获取set值

srandmember set

Sorted sets类型 : zset

 set基础上添加了顺序属性,zset会按新的值调整顺序,可以理解为有两列的数据库表,一列为value,一列为排序数值。
 zset每个元素会关联一个double类型的score。
 sorted set是skip list和hash table的混合体

在索引位置添加值value

zadd zest index value

移除value

zrem zest value

自增

zincrby zset number value
 如果value存在于zset中,其score值增加number
 如果value不存在,在zset中增加value,其score值为number

获取序列编号

zrank zset value
 返回value在zset中的序列(按score升序排列),即索引(下标)

获取反向序列编号

zrevrank zset value 
 返回value在zset中的序列(按score降序排列),即索引(下标)

获取反向序列编号

zrevrange zset index1 index2 [withscores]
 将zset按照score值降序排列,区间为index1至index2,with scores控制是否显示score值
 (测试不通过)

返回给定socre区间元素数量

zcount zset score1 score2

返回给定的value的score值

zscore zset value

移除给定的索引区间的元素

zremrangebyrank zset index1 index2

移除给定的score区间的元素

zremrangebyscore zset score1 score2

Redis常用命令

键值相关命令

返回满足给定的pattern的所有key,如keys , keys mylist

keys [pattern]

确认一个key是否存在

exists key

移除一个key

del key

设置过期时间

expire key number
 给key设置一个过期时间number,单位秒,ttl key显示剩余时间,过期后值为-2

设置永不过期

persist key
 将expire过程中的key持久化,变成不会不过期状态,持久化之后,执行ttl key值为-1

重命名key

rename key new_name

返回key的数据类型

type key

将key移动到其他库

move key schema

服务器命令

测试连接是否存活,如果是,返回PONG

ping

打印内容

echo string

选择数据库,编号0-15

select number 

退出连接

quit 

返回当前数据库key的数目

dbsize

获取服务器信息和统计

info

获取服务器配置信息

config get attribute

查看全部配置

config get * 

清空当前数据库

flushdb

清空所有库

flushall

高级实用特性

1.安全性,设置密码

2.主从复制

master可以有多个slave,slave还可以连接到其他slave。
主从复制不会阻塞master,在数据同步时,master可以继续处理client请求。

3.事务控制

开启事务

multi 

执行事务,提交

exec

事务回滚

discard

注意:redis 部分事务失败,不会回滚全部事务

乐观锁

watch key

4.持久化机制

快照方式 snapshotting

(1)自动保存快照
配置信息:

     save 900 1 #如果900秒内超过1个key被修改,则发起快照保存
     save 300 10 #如果300秒内超过1个key被修改,则发起快照保存
     save 60 10000 …

过程:

 1. redis调用fork,为主进程(父进程)创建一个子进程
 2. 父进程继续处理client请求,子进程将内存内容写入临时文件。子进程地址空间内的数据是fork时的整个数据库的快照。子进程不会影响父进程处理client请求。
 3.当子进程将快照写入临时文件完毕后,用临时文件替换原来的快照文件,然后子进程退出。

(2)save / bgsave

 手动保存快照,在主线程中完成快照保存,会阻塞所有的client请求。
 每次都是将内存数据完整的写入到磁盘,如果数据量大,会引起大量的IO操作,影响性能。

Append-only file方式

 记录每次write的操作内容
 比快照方式更好

5.发布及订阅消息pub/sub

订阅tv1
client1: subscribe tv1

订阅tv2

client2: subscribe tv1 tv2

发布tv1消息,client1 client2收到消息

client3: publish tv1 program1 

发布tv2消息,client2收到消息

client3:publish tv2 program2

批量订阅tv开头的频道内容

psubscribe tv* 

6.Pipeline批量发送请求

 可以将多个命令放到一个tcp报文一起发送、返回。

7.虚拟内存的使用

    原文作者:我有切糕
    原文地址: https://segmentfault.com/a/1190000004448463
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞