redis学习--基础2 数据类型 keys

来源:互联网 发布:老干部网络意思是贬义 编辑:程序博客网 时间:2024/06/13 13:37

1.keys

redis本质上是一个key-value的DB,所以我们首先看一下他的key吧。首先key也是字符串类型,所以key中不能有包括边界字符。由于key不是binary safe的字符串,所以像含有空格和换行的key也是不允许的(如"my key" 和“mykey\n")。

关于key的一个格式约定介绍下:object-type:id:field 比如 user:1000:password

还有key的长度最好不要太长,道理很明显占用内存,而且查找时候相对短key也更慢。不过也不推荐过短key,可读性不好。


介绍下key相关的命令

exists key 测试指定key是否存在,返回1表示存在,0不存在

del key1,key2.....keyN 删除给定key,返回删除key的数目

[/u1/yyang/study/redis/redis-2.6.10/src] (127)yyang@dcmvrh12#redis-cliredis 127.0.0.1:6379> set mykey "hello world"OKredis 127.0.0.1:6379> get mykey"hello world"redis 127.0.0.1:6379> exists mykey(integer) 1redis 127.0.0.1:6379> del mykey(integer) 1redis 127.0.0.1:6379> exists mykey(integer) 0redis 127.0.0.1:6379>


type key 返回给定key的value类型,返回none表示不存在key,string字符类型,list链表类型,set 无序集合类型等

keys pattern返回匹配指定模式所有的key

keys * 表示匹配数据库中所有的key

keys h?llo 匹配 hello , hallo 和 hxllo 等。
keys h*llo 匹配 hllo 和 heeeeello 等。
keys h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo 。
特殊符号用 \ 隔开
警告:KEYS 的速度非常快,但在一个大的数据库中使用它仍然可能造成性能问题,如果你需要从一个数据集中查找特定的 key ,你最好还是用 Redis 的集合结构(set)来代替。

redis 127.0.0.1:6379> del mykey(integer) 1redis 127.0.0.1:6379> exists mykey(integer) 0redis 127.0.0.1:6379> type mykeynoneredis 127.0.0.1:6379> set mykey "hello"OKredis 127.0.0.1:6379> set myclass "math"OKredis 127.0.0.1:6379> set myface "big"OKredis 127.0.0.1:6379> keys my*1) "myclass"2) "mykey"3) "myface"redis 127.0.0.1:6379> keys my[cf]*1) "myclass"2) "myface"redis 127.0.0.1:6379> keys *1) "myclass"2) "mykey"3) "myface"

randomkey 从当前数据库中随机返回(不删除)一个key,当数据库不为空时,返回一个key。当数据库为孔氏返回nil。

redis 127.0.0.1:6379> randomkey"myclass"redis 127.0.0.1:6379> del mykey(integer) 1redis 127.0.0.1:6379> del myclass(integer) 1redis 127.0.0.1:6379> del myface(integer) 1redis 127.0.0.1:6379> keys *(empty list or set)redis 127.0.0.1:6379> randomkey(nil)redis 127.0.0.1:6379>


flushdb是删除数据库中的所有key,此方法不会失败,慎用。

redis 127.0.0.1:6379> set mykey "abc"OKredis 127.0.0.1:6379> keys *1) "mykey"redis 127.0.0.1:6379> flushdbOKredis 127.0.0.1:6379> keys *(empty list or set)redis 127.0.0.1:6379>

ttl key 以秒为单位返回给定key的剩余生存时间(TTL,time to live),返回值:当key不存在是返回-2,当key存在但没有设置剩余生存时间时,返回-1,否则以秒为单位返回key的剩余生存时间。注意:在Redis 2.8以前,当key不存在,或者key没有设置剩余生存时间时,命令都返回-1。

redis 127.0.0.1:6379> keys *(empty list or set)redis 127.0.0.1:6379> set mykey "abc"OKredis 127.0.0.1:6379> ttl mykey(integer) -1redis 127.0.0.1:6379> ttl abc(integer) -1
dbsize返回当前数据库key的数量
redis 127.0.0.1:6379> dbsize(integer) 1redis 127.0.0.1:6379> set test "hello"OKredis 127.0.0.1:6379> keys *1) "test"2) "mykey"redis 127.0.0.1:6379> dbsize(integer) 2redis 127.0.0.1:6379>

rename oldkey newkey 原子的重命名一个key,如果newkey存在则呗覆盖,返回1表示成功,0表示失败。可能是oldkey不存在或者newkey相同。

renamenx oldkey newkey与rename一样,但是如果newkey存在的话返回失败。即当且仅当newkey不存在时,将oldkey改名为newkey。

redis 127.0.0.1:6379> keys *1) "test"2) "mykey"redis 127.0.0.1:6379> get test"hello"redis 127.0.0.1:6379> rename test grantOKredis 127.0.0.1:6379> get test(nil)redis 127.0.0.1:6379> get grant"hello"redis 127.0.0.1:6379> get mykey"abc"redis 127.0.0.1:6379> renamenx mykey grant(integer) 0redis 127.0.0.1:6379> get mykey"abc"redis 127.0.0.1:6379> keys*(error) ERR unknown command 'keys*'redis 127.0.0.1:6379> keys *1) "grant"2) "mykey"redis 127.0.0.1:6379> renamenx mykey youkey(integer) 1

就先到这吧,命令都是先用现查也没关系。

0 0