
MySQL数据库是一种经典的关系型数据库,不同于MySQL数据库,Redis是一种高级的基于Key-Value的非关系型数据库,其中Value支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。如下图所示:
Strings字符串类型是Redis中最为基础的数据存储类型,它在Redis中以二进制保存,没有编码和解码的过程。无论存入的是字符串、整数、浮点类型都会以字符串写入。在Redis中字符串类型的Value最多可以容纳的数据长度是512M。这是以后最常用的数据类型。
常用命令1、set key value:添加一个字符串类型的key和value,返回OK表示添加成功。
2、get key:从数据库中取出一个指定key的value,如果有返回值,如果没有返回nil。
3、del key:删除指定的键和值,如果删除成功,返回删除的个数,否则返回0。
4、mset key1 value1 [key2 value2 …]:指定多个key的value。
5、mget key1 [key2 …]:获取多个key的value。
6、incr key:将 key 中储存的值value增加一。
7、incrby key increment:将key中存储的的值value增加increment。
127.0.0.1:6379> set a 10 OK 127.0.0.1:6379> get a "10" 127.0.0.1:6379> del a (integer) 1 127.0.0.1:6379> mset a 10 b 20 c 30 OK 127.0.0.1:6379> mget a b c 1) "10" 2) "20" 3) "30" 127.0.0.1:6379> incr a (integer) 11 127.0.0.1:6379> incrby b 10 (integer) 30Hashes
Redis中的Hash类型可以看成具String的键和String的值Map容器,每一个Hash可以存储40亿个键值对。
常用命令1、hset key field value:向指定的键中添加一对hash类型的字段名和值。
2、hget key field:取出指定键的指定字段的值。
3、hmset key field1 value1 [field2 value2 …]:向某个键中设置多个字段名和值。
4、hmget key field1 [field2 …]:从指定的键中得到多个字段的值。
5、hdel key field1 [field2 …]:删除一个键中的一个或多个字段。
6、hgetall key:得到某个键所有的字段值。
127.0.0.1:6379> hset user name mary (integer) 1 127.0.0.1:6379> hget user name "mary" 127.0.0.1:6379> hdel user name (integer) 1 127.0.0.1:6379> hmset user name mary sex man age 15 OK 127.0.0.1:6379> hmget user name sex age 1) "mary" 2) "man" 3) "15" 127.0.0.1:6379> hgetall user 1) "name" 2) "mary" 3) "sex" 4) "man" 5) "age" 6) "15"Lists
在Redis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其左部(left)和右部(right)添加新的元素。在插入时,如果该键并不存在,Redis将为该键创建一个新的链表,如果这个键已经存在,则是向list添加元素。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。List中可以包含的最大元素数量是40亿个。
常用命令1、lpush key value1 [value2 …]:在列表的左边向指定的键key中添加列表元素,如果该键并不存在,Redis将为该键创建一个新的链表,如果这个键已经存在,则是向list添加元素。
2、rpush key value1 [value2 …]:在列表的右边向指定的键中添加列表元素。
3、lpop key:从指定键中的左边弹出一个元素,列表中的元素就删除了。
4、rpop key:从指定键的右边弹出一个元素,列表中的元素就删除了。
5、lrange key start stop:从指定键的列表中取出指定范围的元素列表,从左边数起从0开始,从右边数起从-1开始。如果要取整个列表,开始是0,结束是-1。
6、llen key:得到指定列表的长度。
7、lindex key index:通过索引获取列表中的元素。
127.0.0.1:6379> lpush a 2 3 4 5 (integer) 4 127.0.0.1:6379> rpush a 1 (integer) 5 127.0.0.1:6379> lrange a 0 -1 1) "5" 2) "4" 3) "3" 4) "2" 5) "1" 127.0.0.1:6379> lpop a "5" 127.0.0.1:6379> rpop a "1" 127.0.0.1:6379> llen a (integer) 3 127.0.0.1:6379> lindex a 1 "3"Sets
在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我们也可以在该类型的数据值上执行添加、删除或判断某一元素是否存在等操作。Set可包含的最大元素数量是40亿,和List类型不同的是,Set集合中不允许出现重复的元素。
常用命令1、sadd key value1 [value2 …]:向set集合中添加1个或多个元素。
2、smembers key:查询指定的集合中所有的元素。
3、sismember key value:判断指定的元素是否在某个集合中,如果存在返回1,否则返回0。
4、srem key value1 [value2 …]:删除指定的一个或多个元素。
5、sunion key1 key2:返回给定集合的并集。不存在的集合 key 被视为空集。
127.0.0.1:6379> sadd a 1 2 3 (integer) 3 127.0.0.1:6379> smembers a 1) "1" 2) "2" 3) "3" 127.0.0.1:6379> sismember a 2 (integer) 1 127.0.0.1:6379> srem a 2 (integer) 1 127.0.0.1:6379> smembers a 1) "1" 2) "3" 127.0.0.1:6379> del b (integer) 1 127.0.0.1:6379> sadd b 4 5 6 (integer) 3 127.0.0.1:6379> sunion a b 1) "1" 2) "3" 3) "4" 4) "5" 5) "6"Sorted Sets
Redis 有序集合和集合一样也是无序不可以重复。不同的是每个元素都会关联一个分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复,每个集合可存储40多亿个成员。
常用命令1、zadd key score1 value1 [score2 value2 …]:向有序集合添加一个或多个成员。
2、zrange key start stop:通过索引区间返回有序集合中指定区间内的成员。
3、zrem key value1 [value2 …]:移除有序集合中的一个或多个成员。
4、zrank key value:返回有序集合中指定成员的索引。
5、zcard key:获取有序集合的成员数。
6、zscore key value:得到指定成员的分数。
127.0.0.1:6379> zadd set 10 a 20 b 30 c (integer) 3 127.0.0.1:6379> zrange set 0 2 1) "a" 2) "b" 3) "c" 127.0.0.1:6379> zrem set a c (integer) 2 127.0.0.1:6379> zrank set b (integer) 0 127.0.0.1:6379> zcard set (integer) 1 127.0.0.1:6379> zscore set b "20"