redis可以存储五种数据类型:
string:字符串类型,可以存储任何数据,例如字符串,整数,或者浮点型,
hash:包含键值对的无序散列表
list:一个链表,链表上的每个节点都包含一个字符串
set:包含字符串的无序收集器,并且包含的每个字符串都是
独一无二,各不相同的
zset有序集合,字符串成员与浮点数分值之间的有序映射,元素的排列有分值的大小决定.
1.string类型
字符串命令有
get,set,del等.其中get(获取值),set(设置值),del(删除值),默认的如果set的键已经存在,会覆盖原先的值.
127.0.0.1:6379> set name "jack"
OK
127.0.0.1:6379> get name
"jack"
127.0.0.1:6379> set name jack
OK
127.0.0.1:6379> get name
"jack"
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> get name
(nil)
其它的一些命令:
setnx:设置值的时候如果键已经存在则不更新,如果不存在就设置
127.0.0.1:6379> setnx age 10
(integer) 1
127.0.0.1:6379> get age
"10"
127.0.0.1:6379> setnx age 99
(integer) 0
127.0.0.1:6379> get age
"10"
setex:设置键对应的值,并且指定此键值对应的有效期,单位为秒.
下面例子,设置name值为jack,有效期为3秒,3秒之后查询键被删除
127.0.0.1:6379> setex name 3 jack
OK
127.0.0.1:6379> get name
"jack"
127.0.0.1:6379> get name
(nil)
setrange:设置指定的键的值的子字符串
例如下面这个例子,name原来的值为helloworld,我们要将world改为redis
使用setrange指定从第6个(包含第六个)字符开始设置.注意这里的下标是从0开是,类似于数组,所以第6个下标应该为5,setrange会返回字符串的长度.
127.0.0.1:6379> get name
"helloword"
127.0.0.1:6379> setrange name 5 redis
(integer) 10
127.0.0.1:6379> get name
"helloredis"
mset:一次设置多个键值,成功返回ok表示都设置成功,失败返回0表示都没有设置成功.
127.0.0.1:6379> mset name jack age 10
OK
127.0.0.1:6379> mget name age
1) "jack"
2) "10"
msetnx:类似于setnx,一次设置多个值,如果键存在就不更新,如果键不存在就设置,同样
成功返回ok表示都设置成功,失败返回0表示都没有设置成功
例如继续上面的例子:
127.0.0.1:6379> msetnx sex 1 age 10
(integer) 0
127.0.0.1:6379> get sex
(nil)
因为age键已经存在,msetnx就不会更新,那么所有的都不会设置,所以sex就没有设置.
getset:获取键的值,并重新设置
127.0.0.1:6379> get name
"jack"
127.0.0.1:6379> getset name bob
"jack"
127.0.0.1:6379> get name
"bob"
getrange:获取键值的子字符串,同样下标从0开始,包含指定的下标.
127.0.0.1:6379> get name
"www.baidu.com"
127.0.0.1:6379> getrange name 4 8
"baidu"
mget:一次获得多个key的值,如果对应的key不存在则返回nil
127.0.0.1:6379> mget name age sex
1) "www.baidu.com"
2) "10"
3) (nil)
incr:对key的值做加加操作,如果key不存在,会设置key的值,并且认为原来的值为0,并返回新的值
127.0.0.1:6379> get age
"10"
127.0.0.1:6379> incr age
(integer) 11
127.0.0.1:6379> get name
"www.baidu.com"
127.0.0.1:6379> incr name
(error) ERR value is not an integer or out of range
incrby:同incr类似,加指定值(正负都可以),key不存在的时候会设置key,并认为原来的值为0
127.0.0.1:6379> get num
(nil)
127.0.0.1:6379> incrby num 10
(integer) 10
127.0.0.1:6379> get num
"10"
127.0.0.1:6379> incrby num 5
(integer) 15
127.0.0.1:6379> get num
"15"
decr:类似于incr,不过做的是减减操
decyby:类似于incrby,不过做的减操作.
127.0.0.1:6379> get num
"10"
127.0.0.1:6379> decr num
(integer) 9
127.0.0.1:6379> decrby num 4
(integer) 5
127.0.0.1:6379> decrby num -5
(integer) 10
append:给指定的键添加字符串,并且返回添加后字符串的长度
127.0.0.1:6379> get name
"www.baidu.com"
127.0.0.1:6379> append name .cn
(integer) 16
127.0.0.1:6379> get name
"www.baidu.com.cn"
strlen:获取指定键的字符串长度.
127.0.0.1:6379> strlen name
(integer) 16
2.hash类型
hash存储的是键值对之间的映射,和字符串一样,hash既可以存储字符串又可以存储数值,hash更适合用于存储对象.相对于string类型,存储对象会占用更少的内存,更方便存取对象.下面介绍hash类型的命令
hset:设置hash键的值,如果键不存在则会创建.
下面例子创建一个名为users的hash表,添加一个name的映射
127.0.0.1:6379> hset users name jack
(integer) 1
127.0.0.1:6379> hget users name
"jack"
hget:获取hash表中的field的值
hgetall:获取hash表中的所有键值
127.0.0.1:6379> HGETALL users
1) "name"
2) "jack"
3) "age"
4) "20"
hsetnx:设置hash field的指定值,如果key不存在则先创建,如果存在则返回0
127.0.0.1:6379> hsetnx users name bob
(integer) 0
127.0.0.1:6379> hsetnx users age 10
(integer) 1
hmset:批量设置
127.0.0.1:6379> hmset dbs db1 oracle db2 mysql
OK
127.0.0.1:6379> HMGET dbs db1 db2
1) "oracle"
2) "mysql"
hmget:批量获取
hincrby:对某个键自增
127.0.0.1:6379> hget users age
"10"
127.0.0.1:6379> HINCRBY users age 10
(integer) 20
hexists:测试hash表中field是否存在,存在返回1,不存在返回0
127.0.0.1:6379> HEXISTS users name
(integer) 1
127.0.0.1:6379> HEXISTS users sex
(integer) 0
hlen:返回指定hash表中键的个数
127.0.0.1:6379> HLEN users
(integer) 2
hdel:删除指定hash的field
127.0.0.1:6379> HDEL users age
(integer) 1
127.0.0.1:6379> hget users age
(nil)
hkeys:返回hash表中所有的field
127.0.0.1:6379> hgetall users
1) "name"
2) "jack"
3) "age"
4) "10"
5) "sex"
6) "1"
127.0.0.1:6379> HKEYS users
1) "name"
2) "age"
3) "sex"
hvals:返回hash表中所有的value
127.0.0.1:6379> HVALS users
1) "jack"
2) "10"
3) "1"
3.list类型
list是一个链表结构,一个列表可以有序的存储多个字符串,redis列表可执行的操作和很多编程语言列表操作一致.redis的list既可以将元素从列表左端推入又可以从右端推入,也可以从左边弹出也可以从右边弹出.
list的常用命名如下:
lpush:在列表的
左边推入元素,并且返回列表当前的长度
127.0.0.1:6379> LPUSH list1 hello
(integer) 1
127.0.0.1:6379> lpush list1 world
(integer) 2
127.0.0.1:6379> lrange list1 0 -1
1) "world"
2) "hello"
我们使用lrange查看的时候发现list1返回的world hello,因为lpush是先推入的元素在最右边.
rpush:在list的
右边推入元素,并且返回列表的长度
127.0.0.1:6379> RPUSH list1 ok
(integer) 3
127.0.0.1:6379> lrange list1 0 -1
1) "world"
2) "hello"
3) "ok"
linsert:在列表中指定的位置插入一个元素,使用before/after指定位置.
当存在重复数据的时候,以最左边的元素为准,例如下面的例子有两个jack,因为是从左边开始插入,所以遇到的第一个jack即插入
127.0.0.1:6379> lrange list1 0 -1
1) "jack"
2) "jack"
127.0.0.1:6379> LINSERT list1 before jack lili
(integer) 6
127.0.0.1:6379> lrange list1 0 -1
1) "lili"
2) "jack"
3) "jack"
lset:设置list中指定下标的元素值,注意下标是从0开始.
127.0.0.1:6379> lrange list1 0 -1
1) "lili"
2) "jack"
3) "lucy"
4) "jack"
127.0.0.1:6379> lset list1 0 bob
OK
127.0.0.1:6379> lrange list1 0 -1
1) "bob"
2) "jack"
3) "lucy"
4) "jack"
lrem:从list中删除n个和value相同的元素.返回被删除元素的个数
下面例子从list1中删除1个和jack相同的值.n<0从尾部开始删除n个,n=0全部删除.
127.0.0.1:6379> lrange list1 0 -1
1) "bob"
2) "jack"
3) "lucy"
4) "jack"
127.0.0.1:6379> LREM list1 1 jack
(integer) 1
127.0.0.1:6379> lrange list1 0 -1
1) "bob"
2) "lucy"
3) "jack"
ltrim:保留指定list中下标范围内的数据,其它元素将被删除.
下面这个例子,保留第二到最后一个元素,其它元素删除:
127.0.0.1:6379> lrange list1 0 -1
1) "jack"
2) "tom"
3) "bob"
4) "lucy"
127.0.0.1:6379> LTRIM list1 1 -1
OK
127.0.0.1:6379> lrange list1 0 -1
1) "tom"
2) "bob"
3) "lucy"
lpop:从list的头部弹出元素,返回被弹出的元素.
127.0.0.1:6379> lrange list1 0 -1
1) "tom"
2) "bob"
3) "lucy"
127.0.0.1:6379> lpop list1
"tom"
rpop:从list的尾部弹出元素,返回被弹出的元素
127.0.0.1:6379> lrange list1 0 -1
1) "tom"
2) "bob"
3) "lucy"
127.0.0.1:6379> rpop list1
"lucy"
rpoplpush:从第一个list的尾部移除元素并添加到第二个list的头部
127.0.0.1:6379> RPOPLPUSH list1 list2
"bob"
127.0.0.1:6379> LRANGE list2 0 -1
1) "bob"
lindex:返回list中index位置的元素
127.0.0.1:6379> lrange list1 0 -1
1) "tom"
2) "jack"
3) "lili"
127.0.0.1:6379> LINDEX list1 1
"jack"
llen:返回list中的个数
127.0.0.1:6379> llen list1
(integer) 3
4.set类型
set是集合,它是string类型的无序集合.它和列表的不同之处在于列表可以存储多个相同的字符串,而集合通过使用散列表来保证自己存储的每个字符串都是
各不相同的.
因为集合使用的是无需方式存储的元素,所以永不能像使用列表那样将元素推入或者弹出.
下面是集合的一些常用命令:
sadd:向集合中添加元素,第一个参数是集合的名字,第二个添加的元素
127.0.0.1:6379> sadd set1 one
(integer) 1
127.0.0.1:6379> sadd set1 two
(integer) 1
127.0.0.1:6379> sadd set1 two
(integer) 0
因为集合中不能有重复的值,所以添加第二次two元素失败.
smembers:查看集合中的元素
127.0.0.1:6379> SMEMBERS set1
1) "two"
2) "one"
srem:删除集合中的元素
127.0.0.1:6379> SMEMBERS set1
1) "two"
2) "one"
127.0.0.1:6379> srem set1 one
(integer) 1
127.0.0.1:6379> SMEMBERS set1
1) "two"
spop:随机返回并删除集合中的一个元素.
127.0.0.1:6379> SMEMBERS set1
1) "four"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> SPOP set1
"one"
127.0.0.1:6379> SPOP set1
"three"
sdiff:返回两个集合的差集.类似于oracle的minus,返回的差集和两个集合的顺序有关.
127.0.0.1:6379> SMEMBERS set1
1) "four"
2) "two"
3) "one"
127.0.0.1:6379> SMEMBERS set2
1) "four"
2) "five"
3) "one"
127.0.0.1:6379> SDIFF set1 set2
1) "two"
127.0.0.1:6379> sdiff set2 set1
1) "five"
sdiffstore:返回给定两个集合的差集,并将结果存储到另一个集合中.
返回存储集合元素的个数
其中第一个参数是要存储的集合,后面两个参数指定差集.
下面例子将set1和set2的差集存储到set3中.
127.0.0.1:6379> SMEMBERS set1
1) "four"
2) "two"
3) "five"
127.0.0.1:6379> SMEMBERS set2
1) "four"
2) "one"
3) "five"
127.0.0.1:6379> SDIFFSTORE set3 set1 set2
(integer) 1
127.0.0.1:6379> SMEMBERS set3
1) "two"
sinter:返回给定集合的交集
127.0.0.1:6379> SINTER set1 set2
1) "four"
2) "five"
sinterstore:同理将两个集合的交集存储到指定集合中.
第一个参数是存储的集合,
返回存储集合元素的个数
127.0.0.1:6379> SINTERSTORE set3 set1 set2
(integer) 2
127.0.0.1:6379> SMEMBERS set3
1) "four"
2) "five"
sunion:返回指定集合的并集
127.0.0.1:6379> SUNION set1 set2
1) "two"
2) "four"
3) "one"
4) "five"
sunionstore:同理将两个集合的并集存储到指定集合中,返回存储集合元素的个数
127.0.0.1:6379> SUNIONSTORE set3 set1 set2
(integer) 4
127.0.0.1:6379> SMEMBERS set3
1) "two"
2) "four"
3) "one"
4) "five"
smove:从第一个集合中移除元素并添加到第二个集合中.第一个参数是源集合,第二参数是目标集合,第三个参数是要移动的元素.
127.0.0.1:6379> smove set1 set2 two
(integer) 1
127.0.0.1:6379> SMEMBERS set2
1) "two"
2) "four"
3) "one"
4) "five"
scard:查看集合中元素的个数.
127.0.0.1:6379> SMEMBERS set2
1) "two"
2) "four"
3) "one"
4) "five"
127.0.0.1:6379> scard set2
(integer) 4
sismember:测试某个元素是否在指定集合中.第一个参数是集合名,第二个参数是元素的名.
127.0.0.1:6379> SISMEMBER set2 two
(integer) 1
127.0.0.1:6379> SISMEMBER set2 ten
(integer) 0
srandmember:随机返回集合中的一个元素,但是不会删除此元素.
127.0.0.1:6379> SRANDMEMBER set2
"five"
127.0.0.1:6379> SRANDMEMBER set2
"one"
5.zset类型
有序集合和散列医院,都是用于存储键值对.有序集合的键被称之为成员(member),而有序集合的值被称之为分值(score),每个成员
都不相同.有序集合是redis里面唯一一个即可根据成员访问元素(和散列一样)又可以根据分值以及分值的排列顺序来访问元素的结构
下面是zset的一些方法:
zadd:向有序集合中添加成员和分值.
下面这个例子,我们在zset有序集合中添加分值,当我们添加的分值重复的时候,会自动更新分值的键.
127.0.0.1:6379> zadd zset2 1 one
(integer) 1
127.0.0.1:6379> zadd zset2 2 two
(integer) 1
127.0.0.1:6379> zadd zset2 3 three
(integer) 1
127.0.0.1:6379> zadd zset2 4 one
(integer) 0
127.0.0.1:6379> zrange zset2 0 -1 withscores
1) "two"
2) "2"
3) "three"
4) "3"
5) "one"
6) "4"
zrange:查看集合中的成员.使用withscores选项可以查看每个成员的分值.
zrem:删除集合中的元素第一个参数为集合名字,第二个参数为成员名.
127.0.0.1:6379> zrange zset2 0 -1 withscores
1) "two"
2) "2"
3) "three"
4) "3"
5) "one"
6) "4"
127.0.0.1:6379> zrem zset2 one
(integer) 1
127.0.0.1:6379> zrange zset2 0 -1 withscores
1) "two"
2) "2"
3) "three"
4) "3"
zincrby:如果在指定的有序集合中已经存在成员,则将该成员的分值增加increment,否则向集合中添加该成员,其分值为increment.返回score值
其中第一个参数为集合名,第二个参数为increment,第三个参数为成员名.
127.0.0.1:6379> zrange zset2 0 -1 withscores
1) "two"
2) "2"
3) "three"
4) "3"
127.0.0.1:6379> ZINCRBY zset2 5 two
"7"
127.0.0.1:6379> zrange zset2 0 -1 withscores
1) "three"
2) "3"
3) "two"
4) "7"
127.0.0.1:6379> ZINCRBY zset2 5 five
"5"
127.0.0.1:6379> zrange zset2 0 -1 withscores
1) "three"
2) "3"
3) "five"
4) "5"
5) "two"
6) "7"
zrank:
按照score的值进行排序,
返回集合中指定成员的索引值
127.0.0.1:6379> zrange zset2 0 -1 withscores
1) "three"
2) "3"
3) "xxx"
4) "3"
5) "yyy"
6) "3"
7) "two"
8) "7"
9) "five"
10) "10"
127.0.0.1:6379> zrank zset2 yyy
(integer) 2
127.0.0.1:6379> zrank zset2 five
(integer) 4
zrevrank:
按照score的值进行排序(从大到小排序,和zrank相反),返回集合中指定成员的索引值.
zrevrange:和zrange相似,不过zrevrange是按照score的降序进行排列.
127.0.0.1:6379> zrevrange zset2 0 -1 withscores
1) "five"
2) "10"
3) "two"
4) "7"
5) "yyy"
6) "3"
7) "xxx"
8) "3"
9) "three"
10) "3"
zrangebyscore:找到指定范围内的score值,按照升序排列.withscores选项打印出score的值
127.0.0.1:6379> ZRANGEBYSCORE zset2 5 10 withscores
1) "two"
2) "7"
3) "five"
4) "10"
zcount:返回指定范围内score的数量,最后两个参数指定score的范围
127.0.0.1:6379> zcount zset2 5 8
(integer) 1
zcard:返回集中所有成员的数量
127.0.0.1:6379> ZCARD zset2
(integer) 5
zremrangebyrank:删除集中给定
索引区间内的成员.rank表示按照索引删除
127.0.0.1:6379> zrange zset2 0 -1 withscores
1) "three"
2) "3"
3) "xxx"
4) "3"
5) "yyy"
6) "3"
7) "two"
8) "7"
9) "five"
10) "10"
127.0.0.1:6379> ZREMRANGEBYRANK zset2 1 3
(integer) 3
127.0.0.1:6379> zrange zset2 0 -1 withscores
1) "three"
2) "3"
3) "five"
4) "10"
zremrangebyscore:删除集合中
score给定区间内的成员.score表示是按照score区间.
127.0.0.1:6379> zrange zset2 0 -1 withscores
1) "three"
2) "3"
3) "five"
4) "10"
127.0.0.1:6379> ZREMRANGEBYSCORE zset2 5 10
(integer) 1
127.0.0.1:6379> zrange zset2 0 -1 withscores 1) "three" 2) "3"