道者编程

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 − 设置指定的到期时间(以秒为单位)。
PX milliseconds - 设置指定的到期时间(以毫秒为单位)。
NX - 仅在键不存在时设置键。
XX - 只有在键已存在时才设置。

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的多个fieldhmset myhash field1 hello1 field2 hello2
hget获取指定的hash field 
hmget批量获取指定的hash fieldhmget myhash field1 field2
hincrby指定的hash field加上给定值hincrby myhash age 8
hexists测试指定field是否存在hexists myhash age
hlen返回指定hash的field数量hlen myhash
hdel删除指定hash的fieldhdel 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_arraysismember 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的元素

最新评论:
1楼 System Error 发表于 2018-04-10 08:08:01
66666
共有 1 条记录  首页 上一页 下一页 尾页 1
我要评论:

看不清楚