redis数据类型
基本管理命令:
1:获取当前库下key:keys
三个通配符
(1)* 该通配符表示任一长度的字符
keys * 获取当前库下的所有key
keys c* 获取以c开头的key
keys *c 获取以c结尾的key
(2)? 该通配符表示任一字符
keys ??? 获取长度为3个任意字符的key
keys 123?56 获取以123开头,第四个字符为任意字符,56位结尾的所有key
(3)[] 每次可以配其中任何一个字符
keys c[01234] 这里匹配c0,c1,c2,c3,c4
在生成环境中,如果存在很多key的时候,一定要慎重使用keys命名,特别是keys *。严重的很可能会卡死redis,搞不好你就得离职了。
因为redis是单线程的,keys * 会锁住redis,其他命令都得等待,数据量小无所谓,数据量大扫描所有key非常耗时,等待的指令多了,一大堆线程堵在那里,CPU就要飙升了,服务器就要宕机了。
既然这东西有风险,怎么限制呢?最好的办法就是不准用这个,修改配置文件redis.conf,找SECURITY区域:
危险的命令:KEYS,FLUSHALL,FLUSHDB,CONFIG
a:禁用命令
rename-command KEYS "" rename-command FLUSHALL "" rename-command FLUSHDB "" rename-command CONFIG ""b:重命名命令
rename-command KEYS "aaaaaa" //使用aaaaaa代替KEYS rename-command FLUSHALL "bbbbbb" //使用aaaaaa代替FLUSHALL rename-command FLUSHDB "cccccc" //使用cccccc代替FLUSHDB rename-command CONFIG "dddddd" //使用dddddd代替CONFIG
然后重启redis!
2:获取key类型 type
127.0.0.1:6379> type c2 #c2为字符串类型 string
3:统计当前key数量: dbsize
127.0.0.1:6379> dbsize (integer) 4
dbsize和keys *统计的key数可能不一样,keys *统计的是当前db有效的key,而dbsize统计的是所有未被销毁的key,有效和未被销毁是不一样的
4:判断某个key是否存在: exists
127.0.0.1:6379> exists c1 (integer) 1 #1:存在,0:不存在
5:删除key:del
127.0.0.1:6379> del s2 (integer) 1 #1从,0:失败6:重命名key :rename keyname newkeyname
127.0.0.1:6379> rename c1 c11 #c1 重命名为c11 OK
7:查询key的生命周期 :ttl key
127.0.0.1:6379> ttl c11 (integer) -1不存在的key或已过期的key/不过期的key,都返回-1 ,否则返回秒数
8:设置key的生命周期,以秒为单位 :expire key 整型值
127.0.0.1:6379> expire c11 60 (integer) 1
9:移除给定 key 的生存时间:persist key
10:使用密码登录redis控制台:auth 123
一:String数据类型及操作 | ||
一个Key对应一个Value,string是二进制安全的,redis的string可以包含任何数据 | ||
命令方法 | 介绍 | 例子 |
---|---|---|
set | 命令用于设置给定 key 的值。如果 key 已经存储其他值, set 就覆写旧值,且无视类型。 选项:SET KEY VALUE [EX seconds] [PX milliseconds] [NX|XX] EX seconds − 设置指定的到期时间(以秒为单位)。 | SET name "lijie" //设置key:name value:lijie SET "shortMsg:limit:13534543456" 1 EX 10 NX |
setnx | 命令用于设置给定的key值,如果key存在,返回0,不更新,如果不存在,则设置新值. | |
setex | 指定腱值的有效期 | setex name 10 lijie 指定name的值为lijie,且指定有效期为10秒;如果过期返回nil(空),键消失。 |
setrange | 设置指定key的value值的子字符串( 命令用指定的字符串覆盖给定 key 所储存的字符串值),类似于PHP的搜索替换 | setrange name 6 abc 表示从第6个开始替换 |
mset | 一次性设置多个Key值(批量设置),一个键没设置成功,则所有都不成功 | mset key1 value1 key2 value2 |
mestnx | 设置多个Key值,不覆盖,类似setnx,一个键没设置成功,则所有都不成功 | |
get | 获取一个值 | |
getset | 设置key值,并获取旧值,获取旧值,并设置新值。 | |
getrange | 获取Key的Value值的子字符串(获取一部分) | 比如 getrange name 0 5 获取name值0到第5个 |
mget | 批量获取 | |
incr | 对key的值做加加操作,递增,并返回新值 | |
incrby | 通incr类似,加指定值,key不存在时候会设置key,并认为原来的value是0,如果减:直接加负数 | |
decr | 对Key值做减减操作 | |
decrby | 同decr类似,减指定值 | |
strlen | 取Key的Value只的长度 | |
二:HASA数据类型及操作 | ||
redis hash是一个string类型的field和value的映射表,适合用于存储对象,占用更少的内心,且更方便存取。 | ||
命令方法 | 介绍 | 例子 |
hset | 设置一个哈希表,设置hash field为指定值,如果key不存在,则首先创建,存在则覆盖 | hset myhash field1 hello (myhash:哈希表名称,field1:key) |
hsetnx | 设置hash field为指定值,如果key不存在,创建,如果存在返回0 | |
hmset | 同时设置hash的多个field | hmset myhash field1 hello1 field2 hello2 |
hget | 获取指定的hash field | |
hmget | 批量获取指定的hash field | hmget myhash field1 field2 |
hincrby | 指定的hash field加上给定值 | hincrby myhash age 8 |
hexists | 测试指定field是否存在 | hexists myhash age |
hlen | 返回指定hash的field数量 | hlen myhash |
hdel | 删除指定hash的field | hdel myhash age(把哈希表myhash中的age字段删除) |
hkeys | 返回hash的所有field | |
hgetall | 获取某个hash中全部field及value | |
三:List数据类型及操作 | ||
list是链表结构,主要功能是push ,pop等,通过链表头部或者尾部添加元素,能够实现栈,又能够作为队列。 | ||
命令方法 | 介绍 | 例子 |
lpush | 在Key对应的List头部添加字符串元素(先进后出:栈) | lpush mylist "wold" |
rpush | 在Key对应的List尾部添加字符串元素(先进先出:队列) | rpush mylist "hello" |
linsert | 在Key对应的list的特定位置添加字符串 | insert mylist before "world" "hello"(在wordl前面添加一个元素hello) |
lset | 设置list中指定下标的元素值(类似PHP数组某个key重新赋值) | lset mylist 0 "word" |
lrem | 从Key对应的list中删除N个和value相同的元素(N<0从尾删除,N=0全部删除) | lrem mylist 1 "hello" |
ltrim | 保留指定Key的值的范围内数据,其他的全部删除 | ltrim mylist 1 -1;:表示除了下标为1到最后的全部元素删除 |
lpop | 从list头部删除元素,并返回删除元素 | lpop mylist |
rpop | 从list尾部删除元素,并返回删除元素 | rpop mylist |
rpoplpush | 从第一个list尾部移除元素,并添加到第二个list的头部 | rpoplpush mylist1 mylist2 表示把mylist1尾部的元素添加到mylist2头部 |
lindex | 返回名称为Key的list中的index位置的元素,相当于php中数组下标输出 echo $list[0] | |
llen | 返回Key对应list的长度(所有元素,相当于php数组的count) | |
lrange | 返回list指定范围的元素 | lrange mylist 0 -1 表示返回mylist所有元素 |
四:Set类型及操作 | ||
set是集合,它是string类型的无序集合,没有顺序。set是通过hash table实现的,添加,删除和查找的复杂度都是0、1、对集合可以去并集、交集、差集。 | ||
命令方法 | 介绍 | 例子 |
sadd | 向名称为Key的set中添加元素,集合元素不允许有重复值 | sadd myset "hello" |
srem | 删除名称为Key的set中的元素 | srem myset "hello" |
spop | 随机返回并删除名称为Key的set中的一个元素 | |
sdiff | 返回所有给定的Key与第一个Key的差集 | sdiff myset1 myset2 (返回两个集合的差集,也就是myset1和myset2不同的元素,但是以最后一个为标准,myset1元素在myset2中不存在,则返回) |
sinter | 命令返回给定所有给定集合的交集。 不存在的集合 key 被视为空集。 当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)。 | |
sinterstore | 返回所有给定Key的交集,并将结果保存在另一个Key上 | sinterstore myset myset1 myset2 表示把myset1和myset2的交接保存在myset |
sunion | 返回所有给定Key的并集 | |
sunionstore | 命令将给定集合的并集存储在指定的集合 destination 中。如果 destination 已经存在,则将其覆盖。 | |
smove | 从第一个Key对应的set总的移除元素并添加到第二个对应的set中 | smove myset1 myset2 three 表示将three从myset1移动到myset2 |
scard | 返回名称为key的集合的元素个数 | scard myset 表示返回myset元素个数 |
sismember | 测试某个元素是否名称为Key的集合的元素,类似PHP的in_array | sismember myset one 判断one在myset中是否存在 |
scandmember | 随机返回名称为key的集合中的一个元素,但不删除元素 | scandmember myset 随机返回myset中的元素 |
五:Zset类型及操作 | ||
zset类型在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定。每次指定后,zset会自动重新安心的值调整顺序 | ||
命令方法 | 介绍 | 例子 |
zadd | 添加元素,如果元素存在,则更新其顺序 | zadd sset 1 one z向sset添加一个元素one,顺序号为1 |
zrem | 删除名称为key的zset中的元素 | |
zincrby | 对顺序号进行增加,如果元素不存在,则新加一个元素 | zincrby sset 3 ttt 表示元素ttt序号加3,如果不存在新加一个元素ttt |
zrank | 升序排序,返回元素的索引 | zrank sset ttt 返回集合sset中ttt的索引 |
zrange | 返回所有元素,升序排序,withscores显示序号 | zrange myset 0 -1 withscores |
zrevrange | 返回所有元素,降序排序,withscores显示序号 | zrevrange myset 0 -1 withscores |
zrangebyscore | 返回给定区间元素 | zrangebyscore myset 2 3 witchscores 返回myset中2到3元素 |
zcount | 返回集合中给定区间的元素数量 | zcount myset 2 3 返回2到3区间的数量 |
zcard | 返回集合中所有元素个数 | |
zremrangebyank | 删除集合中排名在给定区间的元素(按索引) | zremrangebyank myset 1 1删除索引1到1的元素 |
zremrangebyscore | 删除集合中排名在给定区间的元素(按顺序) | zremrangebyscore myset 1 2删除顺序1到2的元素 |