4.redis入门命令以及string类型介绍

来源:互联网 发布:掷骰子问题c语言 编辑:程序博客网 时间:2024/05/24 15:43
Redis提供ping命令来测试客户端与redis连接是否正常,返回pong表示正常。
127.0.0.1:6389> ping
PONG

echo打印命令
127.0.0.1:6389> echo "hi boy!"
"hi boy!"

通过config get与config set,能动态获取与设置redis配置参数,但不是什么参数都能动态设置,如PORT参数就不行。要修改端口,必须重启数据库。
127.0.0.1:6389> config get port
1) "port"
2) "6389"
127.0.0.1:6389> config set loglevel warning
OK
 
select命令选择数据库
redis的数据库,相当于mysql的数据库,也像oracle的schema。
默认redis有16个数据库,编号从0开始,不支持用户自定义数据库名称。
127.0.0.1:6389> config get databases
1) "databases"
2) "16"
可以通过修改databases参数来修改数据库个数,不能动态修改。

keys返回匹配的key列表
redis 127.0.0.1:6379> keys fwy*
1) "fwy2"
2) "fwy"
KEYS命令返回当前数据库的所有匹配的key,会遍历所有key来查找,所以当KEY很多时会影响性能,不建议在生产环境用。
? 匹配一个字符
* 匹配任意个字符
\x转义,例如\?匹配?
127.0.0.1:6389> set "?" fwy
OK
127.0.0.1:6389> get "\?"
"fwy"

exist判断是否存在这个key
127.0.0.1:6389> exists fwy
(integer) 1

del命令删除key 
127.0.0.1:6389> del fwy
(integer) 1
127.0.0.1:6389> del fwy
(integer) 0
因为DEL命令不支持通配符,但是可以配合linux的管道等命令来删除符合规则的key。
redis-cli keys "users*" | xargs redis-cli del
或redis-cli del `redis-cli keys "user:*"`

获得键值的数据类型:type
127.0.0.1:6379> type fwy2
string

dbsize --返回数据库key的条数
quit退出

重命名某个key
rename fwy fwy3 如果fwy3已经存在回覆盖掉
renamenx fwy fwy3 如果fwy3存在会失败
设置某个Key在多少秒后过期,即自动被系统删除
expire fwy3 10
ttl 返回某个key还有多长时间过期,返回秒数。
flushdb:清空当前数据库数据
flushall:清空所有数据库数据
randomkey:随机获得已经存在的key

key的名称:由于key 不是binary safe的字符串,所以像"my key"和"mykey\n"这样包含空格和换行的key 是不允许的。

redis 提供五种数据类型:string,hash,list,set 及sorted set
string类型是Redis最基本的数据类型,一个键最大能存储512MB。存的是二进制的存储,所以可以包含任何数据,比如JPG图片或者序列化的对象。其他类型只是组织字符串的形式不同。例如,list类型是以列表的形式组织字符串,set是以集合的类型组织字符串而已。

set key1 fwy1 --设置key的值,key已经存在就会覆盖
get key1 --获取key1的值
setnx key1 fwy1 --设置Key的值,如果key已经存在会失败。
getset key1 value1 先获取key1的值,再设置key1的值为value1,如果Key不存在会返回nil,但仍会设置新值。
mget key1 key2 key3..keyn 一次获取多个key的值,如果对应key不存在会返回nil
redis 127.0.0.1:6379> mget fwy4 fwy2 fwy
1) "afwe"
2) (nil)
3) "22"
mset fwy4 aaa fwy2 bbb fwy ccc 一次设置多个key的值,
msetnx key1 value1 key2 values --与上面一样,但不会覆盖已有值。
incr 对一个value是数字的增1,不是整数的string会报错,incr一个不存在的值会将value设为1。
当我们用type看返回类型是,仍然是string。只是它内部有函数去判断这个string是否数字。
decr 与上面效果相反。
incrby key1 5 对key加上指定值,key不存在时会设置并认为key值原来为0
decrby key1 5 与上面相反,其实用上面的incrby,值为负数能实现相同的效果
incrbyfloat bus 2.7 为一个Key增加一个双精度浮点数
127.0.0.1:6389> incrbyfloat bus 1e+2
"100"
strlen 返回string长度
127.0.0.1:6389> set fwy 你好
OK
127.0.0.1:6389> get fwy
"\xe4\xbd\xa0\xe5\xa5\xbd"
127.0.0.1:6389> strlen fwy
(integer) 6
Redis接收到的是使用UTF-8编码的中文。

append可以往一个key追加value值。
redis 127.0.0.1:6379> exists fwy
(integer) 0
redis 127.0.0.1:6379> append fwy "hello "
(integer) 6
redis 127.0.0.1:6379> append fwy " world"
(integer) 12
redis 127.0.0.1:6379> get fwy
"hello world"
substr求子串,一个例子可以证明一切。
redis 127.0.0.1:6379> set s "This is a string"
OK
redis 127.0.0.1:6379> substr s 0 3
"This"
redis 127.0.0.1:6379> substr s -3 -1
"ing"
redis 127.0.0.1:6379> substr s 0 -1
"This is a string"
redis 127.0.0.1:6379> substr s 9 10000
" string"
del删除key
redis 127.0.0.1:6379> del fwy4 fwy5
(integer) 1
我这里fwy5是不存在的,所以只影响了1行

位操作
set foo bar
bar3个字母对应的ASCII码是98,97,114.转换成二进制后分别为1100010、1100001、1110010
127.0.0.1:6389> getbit foo 0
(integer) 0
127.0.0.1:6389> getbit foo 6
(integer) 1
foo的位下标从左到右,从0开始算。如果要获取的超出了key的二进制位,getbit foo 100000将返回0.
setbit命令可以设置二进制位,返回值是该位置的旧值。如我们将foo键值设置为aar,将foo键的二进制位的索引第6位设为0,第7位设为1即可。
setbit foo 6 0
setbit foo 7 1
127.0.0.1:6389> get foo
"aar"
bitcount foo  获得字符串中二进制位是1的个数
bitop命令对多个string进行位运算,支持and,or,xor,not等。
set foo1 bar
set foo2 aar
bitop or destkey foo1 foo2
127.0.0.1:6389> get destkey
"car"


0 0