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的元素 |