redis5种数据类型的常用命令
注意:http://redisdoc.com/ 如果想要了解redis各个数据类型具体的用法,可以参考此地址
也可以参考如下地址:https://www.runoob.com/redis/redis-sets.html
下面这个图是对redis五种基本数据类型的基本操作进行的总结,参考文章链接在本文最后
通用方法总结:
1. redis默认一共有16个库,编号分别为0-15 默认为0号库,可以通过select来切换,语句为:select 1(意思是切换到1号库)
2. del key1 key2:单个/多个删除key(key存在)。
3. expire key second:为给定key设置过期时间,单位为秒。
4. ttl key:以秒为单位,返回给定key的剩余生存时间(TTL , time to live),不存在key返回-2,无过期时间的key返回-1。pttl key为毫秒。
5. persist key:移除key的过期时间,key将持久保存。
6. type key:返回key所存储的值的类型,不存在的key返回none。
7. exists key:检查给定的key是否存在。
8. dbsize:查找当前数据库的key的数量。
9. keys pattern:查找所有符合给定模式(pattern)的key。
10. rename key newkey:给key重命名。
11. randomkey:从当前数据库中随机返回一个key。
String--字符串
字符串是redis最基本的数据结构,他将以一个键和一个值存储于redis内部,类似于java里的map。redis可以通过键去找到值。
1. set key value:写入命令。
2. get key:读取命令,通过键获取值。
3. del key:删除命令,通过key删除键值对,返回删除数(通用命令--其他数据结构也可以使用这个命令)。
4. strlen key:取key指向字符串的长度,返回长度值。
5. getset key value:修改原来key的对应值,并将旧值返回,如果原来值为空,则返回空,并设置新值。
6. getrange key start end:获取子串,start和end代表角标,redis是从0开始计算的。
7. append key value:在原来串的最后添加上新的value,返回key指向新字符串的长度。
Hash--哈希
redis中的哈希结构就如同java的map一样,一个对象中有很多键值对,他是特别适合存储对象的,如果内存足够大,那么一个redis的hash结构可以存储232-1键值对(40多亿)。在redis中,hash是一个string类型的field和value的映射表,因此我们存储的数据实际在redis内存中都是一个个字符串而已。比如一个角色有三个字段,编号(id),姓名(name),年龄(age),那么它的角色hash结构如图
1. role_1:意思是key,通过它就可以找到这个hash结构
2. field和value:hash结构由一系列的field和value组成
常用的命令
1. hmset key field1 value1 fileld2 value2...:在hash结构中设置多个键值对。
2. hset key field value:在hash结构中设置单个键值对。返回长度
3. hgetall key:获取所有hash结构中的键值。返回键和值。
4. hmget key field1 field2...:获取指定的键值对的值。
5. hdel key field1 field2...:删除hash结构中指定的字段。
6. hsetnx key field value:当hash结构中不存在对应的键,才设置值。
7. hlen key:获取hash结构中键值对的熟练
8. hkeys key:获取所有hsh结构中的键
9. hvals key:获取hash结构中所有的值。
10. hexists key field:判断hash结构中是否存在field字段。存在返回1,否则返回0.
11. hincrby key field increment:指定给hash结构中的某一个字段加上一个整数,要求该字段也是整数字符串。
12. hincrbyfloat key field increment:指定给hash结构中的某一个字段加上一个浮点数,要求该字段是数字型字符串。
linked-list---链表
redis的链表结构可以存储多个字符串,并且它是有序的,可以存储232-1个节点(超过40亿),redis链表是双向的,因此可以从左到右,也可以从右到左遍历它存储的节点。链表结构的优势在于插入和删除,因为链表的数据节点是分配在不同的内存区域的,并不连续,只是根据上一个节点保存下一个节点的顺序来索引而已,无需移动元素,劣势在于查找。因为是双向的,所以redis链表命令分为左操作和右操作两种命令,左操作意味着从左到右,右操作意味着从右到左。
其中命令以 ‘l’ 开头的代表左操作,以 ‘r’ 开头的代表右操作。
1. lpush key node1 node2...:把节点加入到链表最左边,如图最后链表的从左到右顺序应该为node3--node2--node1
2. rpush key node1 node2...:把节点加入到链表的最右边,如图最后链表的从左到右的顺序应该为node1--node2--node3
3. lindex key index:读取下标为index的节点,返回节点字符串,从0开始算。
4. llen key:求链表的长度。返回链表节点数。
5. lpop key:删除左边第一个节点,并将其返回。
6. rpop key:删除右边第一个节点,并将其返回。
7. linsert key before|after pivot node:插入一个节点node,并且可以指定在值为pivot的节点的前面或者后面,如果list不存在,则报错,如果没有值为对应pivot的,也会插入失败返回-1
8. lpushx list node:如果存在key为list的链表,则插入节点node,并且作为从左到右的第一个节点。如果不存在,则失败。
9. rpushx list node:如果存在key为list的链表,则插入节点node,并且作为从左到右的最后一个节点。如果不存在,则失败。
10. lrange list start end:获取链表list从start下标到end下标的节点值。包含两边的。
11. lrem list count value:如果count为0,则删除所有值等于value的节点,如果count不为0,则先对count取绝对值,假设记为abs,然后从左到右删除不大于abs个等于value的节点,注意:count为整数,如果为负数,则redis会先求取其绝对值,然后传递到后台操作。
12. lset key index node:设置列表下标为index的节点的值为node
13. ltrim key start stop:修剪链表,只保留从start到stop的区间的节点,其余的都删除掉,包含start和end的节点会留下。
另外提供几个链表的阻塞命令
1. blpop key timeout:移出并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止,相对于lpop命令,它的操作是进程安全的。
2. brpop key timeout:移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。相对于rpop命令,它的操作是进程安全的。
3. rpoplpush key src dest:按从左到右的顺序,将一个链表的最后一个元素移除,并插入到目标链表最左边。不能设置超时时间。
4. brpoplpush key src dest timeout:按从左到右的顺序,将一个链表的最后一个元素移除,并插入到目标链表最左边,并可以设置超时时间。
set---集合
redis的集合不是一个线性结构,而是一个哈希表结构,他的内部会根据hash分子来存储和查找数据。要注意:
1. 集合是无序的。
2. 对于集合而言,它的每一个元素都是不能重复的,当插入相同记录的时候都会失败。
3. 集合的每一个元素都是string数据结构类型。
4. redis的集合可以对于不同的集合进行操作,比如求出两个或者以上集合的交集,差集和并集等。
5. 通过这些操作我们可以实现sns中的好友推荐和bolog的tag功能。
集合命令如下:
1. sadd key value:添加set集合 可以多添加
2. smembers key:查看元素
3. srem key value:删除元素,可以多个删除,删除的时候需要指定key和value值
4. spop key [count]:随机删除1个/n个值 其中count不写就是默认一个值,count写就是删除对应熟练的值。被移除的随机元素。 当集合不存在或是空集时,返回 nil 。
5. sdiff key1 key2:取两个集合的差集,以前面的那个集合为主
6. sinter key1 key2:取两个集合的交集
7. sinterstore newkey key1 key2:取两个集合(set1 set2)的交集,之后存入新的集合中(set3)
8. sunion key1 key2:取两个集合(set1 set2)的并集
9. sunionstore newkey key1 key2:取两个集合(key1 key2)的并集并将结果存入新key中(newkey)
10.scard key:获取元素的个数。
11. sismember key value:判断某个值是否存在于对应的key中,存在返回1,不存在返回0。
12. srandmember key:随机返回一个元素。
13. smove key1 key2 value:将key1 中的某个元素value移除,并添加到第二个key2中。
Sorted Set---有序集合
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
1. 不同的是每个元素都会关联一个double类型的分数。
2. redis正是通过分数来为集合中的成员进行从小到大的排序。
3. 有序集合的成员是唯一的,但分数(score)却可以重复。
4. 分数可以为负数。
有序集合命令如下:
1. zadd key score value:插入一个/多个元素,其中score可以重复,但是value不能重复
2. zcard key:返回元素个数。
3. zcount key minScore maxScore :查询score分数在count1和count2区间的值的个数(包括minScore maxScore 和maxScore )
4. zrevrange key count1 count2:用于返回指定分数区间内的成员。其中成员的位置按分数值递减(从大到小)来排序。(这里的1和4是角标,从0开始算的)
5. zrem key value:删除
参考:https://www.cnblogs.com/epipremnum-aureum/p/8619092.html
持续更新!!!