redis的数据类型
redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合),zset(有序集合)。
字符串类型(string)
string是redis最基本的类型,这个跟memcached一样。一个key对应一个value。
字符串类型是一个很基础的数据类型。因为是二进制,所以可以吧图片文件内容作为字符串来储存。
一个键最大能储存512MB。
字符串的操作
SET key value
设置指定key的值
GET key
读取指定key的值
127.0.0.1:6379> set mystr 'hello world' //设置key的值
OK
127.0.0.1:6379> get mystr //读取key的值
"hello world"
GETRANGE key start end
返回字符串中的子字符串
127.0.0.1:6379> getrange mystr 0 4 //获取mystr的下标为0的字符至下标为4的字符
"hello"
127.0.0.1:6379> getrange mystr 6 10//第6个字符至第10个字符
"world"
这个指令,如果超过字符串的总长度也不会报错,取到最后一个字符为止。
127.0.0.1:6379> getrange mystr 0 100 //第1个字符至第101个字符
"hello world"
127.0.0.1:6379> getrange mystr 0 -1 //第1个字符至倒数第1个字符
"hello world"
127.0.0.1:6379> getrange mystr 0 -2 //第1个字符至倒数第2个字符
"hello worl"
GETSET key value
给key设置新的value,并返回旧的value值
127.0.0.1:6379> getset mystr 'hello' //设置mystr为'hello',获取到了旧的mystr值
"hello world"
SETBIT key offset value
对key储存的字符串值,设置或清除指定偏移量上的位(bit)。
比如:数字"1"的ASCII码值转换成二进制为00110001。那么如何把"1"变成"2"。把最后一位的1移动到前一位就好了。ASCII码值00110010就是数字"2"。
可以用作计数器。比如用户在第几天上线
setbit 用户名称 网站运行天数 1 如:setbit fhw 1 1 setbit fhw 2 1 bitcount fhw 得出用户总上线天数
127.0.0.1:6379> set mystr '1' //设置mystr的值为1
OK
127.0.0.1:6379> get mystr
"1"
127.0.0.1:6379> setbit mystr 6 1 //把从左向右数的第七位改成1
(integer) 1
127.0.0.1:6379> setbit mystr 7 0 //把从左向右数的第八位改成0
(integer) 0
127.0.0.1:6379> get mystr
"2"
GETBIT key offset
对key储存的字符串值,获取指定偏移量上的位(bit)。
比如:"1"的ASCII码为00110001。第三个参数超过了总位数都为0。
127.0.0.1:6379> set mystr '1'
OK
127.0.0.1:6379> bitget mystr 0 //获取mystr的第一位
(integer) 0
127.0.0.1:6379> bitget mystr 1 //获取mystr的第二位
(integer) 0
127.0.0.1:6379> bitget mystr 2 //获取mystr的第三位
(integer) 1
127.0.0.1:6379> bitget mystr 100 //获取mystr的第100位
(integer) 0
BITOP operation destkey key [key ..]
对一个或多个二进制字符串进行位元操作,并将结果保存在destkey上。
operation 可以是AND(并)、OR(或)、NOT(非)、XOR(异或)这四种操作中的一种。
除了NOT外,其他操作都可以接受一个或多个key作为输入。
返回值:保存到destkey 字符串长度,和输入key中最长的字符串长度相等。
BITOP进行大数据运算的时候,最好将任务指派到附属节点进行,避免阻塞主节点。
127.0.0.1:6379> setbit bit-1 0 1
127.0.0.1:6379> setbit bit-1 1 0
127.0.0.1:6379> setbit bit-1 2 0
127.0.0.1:6379> setbit bit-1 3 1
127.0.0.1:6379> setbit bit-2 0 0
127.0.0.1:6379> setbit bit-2 1 0
127.0.0.1:6379> setbit bit-2 2 1
127.0.0.1:6379> setbit bit-2 3 1
127.0.0.1:6379> bitop and result bit-1 bit-2
127.0.0.1:6379> bitcount result
127.0.0.1:6379> getbit result
MSET key1 value [key2 value..]
设置所有(一个或多个)的key值
MGET key1 [key2..]
获取所有(一个或多个)的key值
127.0.0.1:6379> mset mystr 'hello world' mystr2 'hello'
OK
127.0.0.1:6379> mget mystr mystr2 //获取所有key的值
1) "hello world"
2) "hello"
SETEX key seconds value
将value值关联到key,并将key的过期时间设置为seconds(秒为单位)
127.0.0.1:6379> setex mystr 3000 'hello world' //设置了3000秒的mystr,值为'hello world'
OK
127.0.0.1:6379> get mystr
"hello world"
127.0.0.1:6379> ttl mystr
(integer) 2984 //存在的时间
PSETEX key milliseconds value
这个跟setex命令基本相同,只不过以毫秒为单位设置key的生存时间,setex为秒单位。
127.0.0.1:6379> psetex mystr 3000 'hello world' //设置了3000毫秒的mystr,值为'hello world'
OK
127.0.0.1:6379> get mystr
"hello world"
127.0.0.1:6379> ttl mystr
(integer) 1 //存在的时间
SETNX key value
只有在key不存在时设置key的值
127.0.0.1:6379> set mystr 'hello world'
OK
127.0.0.1:6379> setnx mystr 'hello'
(integer) 0 //设置失败
127.0.0.1:6379> setnx mystr2 'hello'
(integer) 1 //设置成功
MSETNX key value [key value ..]
同时设置一个或多个key-value,并且都当key不存在时才能成功。有一个已经存在了,都设置失败。
127.0.0.1:6379> msetnx mystr 'hello world' mystr2 'hello'
(integer) 1 //设置成功
127.0.0.1:6379> msetnx mystr2 'hello' mysr3 'world'
(integer) 0 //设置失败
127.0.0.1:6379> mget mystr mystr2
1) hello world
2) hello
SETRANGE key offset value
用value参数覆写给key所储存的字符串值,从偏移量offset开始。就是修改字符串。 如果你修改的是一个字符,那么后面其余的字符是不会改动的。
127.0.0.1:6379> set mystr 'hello world'
OK
127.0.0.1:6379> setrange mystr 6 'redis'
(integer) 11
127.0.0.1:6379> get mystr
"hello redis"
127.0.0.1:6379> setrange mystr 6 'e'
(integer) 11
127.0.0.1:6379>get mystr
"hello eedis"
STRLEN key
返回字符串的长度
127.0.0.1:6379> set mystr 'hello world'
OK
127.0.0.1:6379> strlen mystr
(integer) 11
INCR key
将key中存储的数字值加1
INCRBY key increment
将key中存储的值加上给定的增量(increment)。
DECR key
将key中存储的数字值减1
DECRBY key increment
将key中存储的值加上给定的减量(increment)。
incr等指令本身具有原子性。如果有多个客户端进行了文章的点击操作,那么最后会全部加起来。用作计数十分方便。
127.0.0.1:6379> set mynum '1'
OK
127.0.0.1:6379> incr mynum
(integer) 2
127.0.0.1:6379> incrby mynum 2
(integer) 4
127.0.0.1:6379> decr mynum
(integer) 3
127.0.0.1:6379> decrby mynum 2
(integer) 1
INCRBYFLOAT key increment
将key所储存的值加上给定的浮点增量值(increment)。
127.0.0.1:6379> set mynum '1'
OK
127.0.0.1:6379> incrbyfloat mynum 1.1
"2.1"
APPEND key value
如果key已经存在并且是一个字符串,APPEND指令将指定的value追加到该key原来值(value)的末尾。
如果key不存在,那么就当做set指令执行。
127.0.0.1:6379> set mystr 'hello'
OK
127.0.0.1:6379> append mystr ' world'
(integer) 11
127.0.0.1:6379> get mystr
"hello world"