redis命令

最后更新于:2022-04-01 21:49:58

## Redis命令 ### redis数据结构 – strings ``` set mystr "hello world!" //设置字符串类型 get mystr //读取字符串类型 ``` >字符串类型的用法就是这么简单,因为是二进制安全的,所以你完全可以把一个图片文件的内容作为字符串来存储。 另外,我们还可以通过字符串类型进行数值操作: ``` 127.0.0.1:6379> set mynum "2" OK 127.0.0.1:6379> get mynum "2" 127.0.0.1:6379> incr mynum (integer) 3 127.0.0.1:6379> get mynum "3" ``` > 在遇到数值操作时,redis会将字符串类型转换成数值。 利用redis的INCR、INCRBY、DECR、DECRBY等指令来实现原子计数的效果. ### redis数据结构 – lists * redis中的lists在底层实现上并不是数组,而是链表,链表型lists的元素定位会比较慢。 * lists的常用操作包括LPUSH、RPUSH、LRANGE等。我们可以用LPUSH在lists的左侧插入一个新元素,用RPUSH在lists的右侧插入一个新元素,用LRANGE命令从lists中指定一个范围来提取元素。 ``` //新建一个list叫做mylist,并在列表头部插入元素"1" 127.0.0.1:6379> lpush mylist "1" (integer) 1 //返回当前mylist中的元素个数 127.0.0.1:6379> rpush mylist "2" //在mylist右侧插入元素"2" (integer) 2 127.0.0.1:6379> lpush mylist "0" //在mylist左侧插入元素"0" (integer) 3 127.0.0.1:6379> lrange mylist 0 1 //列出mylist中从编号0到编号1的元素 1) "0" 2) "1" 127.0.0.1:6379> lrange mylist 0 -1 //列出mylist中从编号0到倒数第一个元素 1) "0" 2) "1" 3) "2" ``` >lists的应用相当广泛,随便举几个例子: 1.我们可以利用lists来实现一个消息队列,而且可以确保先后顺序,不必像MySQL那样还需要通过ORDER BY来进行排序。 2.利用LRANGE还可以很方便的实现分页的功能。 3.在博客系统中,每片博文的评论也可以存入一个单独的list中。 ### redis数据结构 – 集合Set * redis的集合,是一种无序的集合,集合中的元素没有先后顺序。 * 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 * 集合相关的操作也很丰富,如添加新元素、删除已有元素、取交集、取并集、取差集等。 ``` 127.0.0.1:6379> sadd myset "one" //向集合myset中加入一个新元素"one" (integer) 1 127.0.0.1:6379> sadd myset "two" (integer) 1 127.0.0.1:6379> smembers myset //列出集合myset中的所有元素 1) "one" 2) "two" 127.0.0.1:6379> sismember myset "one" //判断元素1是否在集合myset中,返回1表示存在 (integer) 1 127.0.0.1:6379> sismember myset "three" //判断元素3是否在集合myset中,返回0表示不存在 (integer) 0 127.0.0.1:6379> sadd yourset "1" //新建一个新的集合yourset (integer) 1 127.0.0.1:6379> sadd yourset "2" (integer) 1 127.0.0.1:6379> smembers yourset 1) "1" 2) "2" 127.0.0.1:6379> sunion myset yourset //对两个集合求并集 1) "1" 2) "one" 3) "2" 4) "two" ``` 对于集合的使用,也有一些常见的方式,比如,QQ有一个社交功能叫做“好友标签”,大家可以给你的好友贴标签,比如“大美女”、“土豪”、“欧巴”等等,这时就可以使用redis的集合来实现,把每一个用户的标签都存储在一个集合之中。 ### redis数据结构 – 有序集合 * redis不但提供了无序集合(sets),还很体贴的提供了有序集合(sorted sets)。 * 有序集合中的每个元素都关联一个序号(score),这便是排序的依据。 * 很多时候,我们都将redis中的有序集合叫做zsets,这是因为在redis中,有序集合相关的操作指令都是以z开头的,比如zrange、zadd、zrevrange、zrangebyscore等等 ``` //新增一个有序集合myzset,并加入一个元素baidu.com,给它赋予的序号是1: 复制代码代码如下: 127.0.0.1:6379> zadd myzset 1 baidu.com (integer) 1 //向myzset中新增一个元素360.com,赋予它的序号是3 127.0.0.1:6379> zadd myzset 3 360.com (integer) 1 //向myzset中新增一个元素google.com,赋予它的序号是2 127.0.0.1:6379> zadd myzset 2 google.com (integer) 1 //列出myzset的所有元素,同时列出其序号,可以看出myzset已经是有序的了。 127.0.0.1:6379> zrange myzset 0 -1 with scores 1) "baidu.com" 2) "1" 3) "google.com" 4) "2" 5) "360.com" 6) "3" //只列出myzset的元素 127.0.0.1:6379> zrange myzset 0 -1 1) "baidu.com" 2) "google.com" 3) "360.com" ``` ### redis数据结构 – 哈希 最后要给大家介绍的是hashes,即哈希。哈希是从redis-2.0.0版本之后才有的数据结构。 hashes存的是字符串和字符串值之间的映射,比如一个用户要存储其全名、姓氏、年龄等等,就很适合使用哈希。 ``` //建立哈希,并赋值 127.0.0.1:6379> HMSET user:001 username antirez password P1pp0 age 34 OK //列出哈希的内容 127.0.0.1:6379> HGETALL user:001 1) "username" 2) "antirez" 3) "password" 4) "P1pp0" 5) "age" 6) "34" //更改哈希中的某一个值 127.0.0.1:6379> HSET user:001 password 12345 (integer) 0 //再次列出哈希的内容 127.0.0.1:6379> HGETALL user:001 1) "username" 2) "antirez" 3) "password" 4) "12345" 5) "age" 6) "34" ```
';