
用Redis的脚本功能实现Redis中数据简单查询,有需要的朋友可以参考下。 在Redis的设计中,key是一切,对于Redis是可见的,而value对于Redis来说就是一个字节数组,Redis并不知道你的value中存储的是什么
String是redis最基础和最常用的数据结构,其值最大能存储 512MB,可以是简单字符串、复杂的xml/json的字符串、二进制图像或者音频的字符串、以及可以是数字的字符串。String底层使用的是SDS,是Redis的一种基本数据结构,主要是用于存储字符串和整数。
21 set命令 set key value
用于设置给定key的值,如果key存储了其他值,覆盖写入,无视类型。
22 get命令 get key
获取指定key的值,如果key不存在返回nil
23 getset命令 get key [value]
该命令用于获取指定的key的旧值,然后按照新值对key进行赋值。当key中没有旧值的时候返回nil。
24 mget命令 get key1 [key2 keyN]
返回多个key的值,某个key不存在时返回nil
25 decr命令 decr key
对key对应的数字做减1 *** 作。如果key不存在,那么在 *** 作之前,这个key对应的值会被置为0。如果key有一个错误类型的value或者是一个不能表示成数字的字符串,就返回错误。
26 incr命令 incr key
对key对应的数字做减1 *** 作。如果key不存在,那么在 *** 作之前,这个key对应的值会被置为0。如果key有一个错误类型的value或者是一个不能表示成数字的字符串,就返回错误。
27 append命令 append key value
如果 key 已经存在,并且值为字符串,那么这个命令会把 value 追加到原来值(value)的结尾。 如果 key 不存在,那么它将首先创建一个空字符串的key,再执行追加 *** 作,这种情况 APPEND 将类似于 SET *** 作。返回append后字符串值(value)的长度。
31 SDS动态字符串
struct sdshdr {
unsigned int len;
unsigned int free;
char buf[];
}
其中,buf表示数据空间,用于存储字符串;len表示buf中已占用的字节数;free表示空闲的字节数。
32 新的SDS结构
增加了一个flags来标识类型,用一个字节(8位)来存储,前3位表示字符串的类型;剩余5位,存储长度小于32的段字符串。
创建 SDS 的大致流程是这样的:首先根据字符串长度计算得到 type,根据 type 计算头部所需长度,然后动态分配内存空间。
注意:① 创建空字符串时,SDS_TYPE_5 被强制转换为 SDS_TYPE_8(原因是创建空字符串后,内容可能会频繁更新而引发扩容 *** 作,故直接创建为 sdshdr8)
②长度计算有 +1 *** 作,因为结束符 \0 会占用一个长度的空间。
③返回的是指向 buf 的指针 s。
41 session共享
42 计数器(商品浏览记录)
43 访问限速
list类型用来存储多个有序的字符串,列表当中的每一个字符看做一个元素,一个列表当中可以存储有一个或者多个元素,redis的list支持存储2^32次方-1个元素。
Redis可以从两端push和pop元素,支持读取指定范围或者制定下表的元素。list是一种灵活的链式结构,可以充当队列或者栈的角色。
list的元素是有序的,且列表内的元素是可以重复的。
注意:Redis32以前,列表底层的编码是ziplist(压缩列表)和linkedlist(双向列表)实现的,因为双线列表占用的内存比压缩列表多,所以当创建新的列表键时,列表会优先考虑用压缩列表,只有在需要的时候才会转换到双向列表实现。32以后重新引入了一个quicklist,列表底层都是有quicklist实现,quicklist是一个由ziplist组成的双向列表,每个节点使用ziplist来存储数据。
21 Lpush命令 lpush key value
将一个或多个值插入到列表头部。 如果 key 不存在,则创建list,然后再插入数据 *** 作。 当 key 存在但不是列表类型时,返回一个错误。
22 Rpush命令 rpush key value
将一个或多个值从list的尾部插入
23 Blpop命令 blpop key seconds
Blpop是取出列表的第一个元素,如果list中没有元素则会一直等到到超时,或者发现有数据为止,seconds是指定多少秒返回。如没有数据,则返回nil。
同理,Bropo为移除list列表的最后一个元素
24 Linsert命令 linsert key before/after val1 val2
在list列表的某一个元素前或者后插入另外一个元素。当指的的元素不存在时,不执行任何动作。如果列表不存在时,视为空列表,不执行任何动作。
25 Lindex命令 lindex key index
通过链表的下标获取列表中的元素,可以是-1表示链表最后一个元素,-2代表倒数第二个元素,没有返回nil
26 Llen命令 llen key
返回list的长度,如果list不存在,返回0
27 Lrange命令
返回指定list区间内的元素,区间以偏移量start和end决定。其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
51 队列秒杀抢购
list类型的lpop和rpush(或者反过来,lpush和rpop)能实现队列的功能,故而可以用Redis的list类型实现简单的点对点的消息队列。不过不推荐在实战中这么使用,因为现在已经有Kafka、NSQ、RabbitMQ等成熟的消息队列了,它们的功能已经很完善了,除非是为了更深入地理解消息队列,不然没必要去重复造轮子。
52 排行榜
list类型的lrange命令可以分页查看队列中的数据。可将每隔一段时间计算一次的排行榜存储在list类型中。只有定时计算的排行榜才适合使用list类型存储,与定时计算的排行榜相对应的是实时计算的排行榜,list类型不能支持实时计算的排行榜。
我们知道Redis默认有16个数据库,默认是第0个数据库,那么如果在需要对数据库进行切换的时候,我们就可以使用下面这个命令:
使用如下命令进行切换
如果想要清除指定某一个数据库的数据
清除所有数据库的数据
接下来这个命令应该是最常用的了
平常在开发中,我们还需要经常对key进行判断,判断其是否存在
因为我们设置的缓存数据一般都不能是永久的,这个时候就需要我们在存储数据的时候,就为其设置过期时间。
string类型是Redis中五大基本数据类型之一,这也是最常使用到的一个数据类型,所有很多小伙伴们对Redis的认识和 *** 作就仅仅的停留在了对Redis的 *** 作层面,但是你是否知道string类型中的相关命令,还是有非常多实用的
接下来先看一下对string类型进行基本存储和获取的命令。
如果我们存储的string中的内容是数字的话,我们也可以对其进行增或减 *** 作,Redis可以自动的对字符串进行相关的 *** 作。实现的命令如下:
使用msetnx时,同时设置一个或多个 key-value 对,当且仅当所有给定 key都不存在时才成立。
getset命令从字面意思就可以看出来,他的作用是先get再set。
总结string类似的使用场景:
在使用list类型进行存取的时候,有两个命令需要进行区分:
注意:只有pop和push才分左右,其他的l都是list的意思
总结:
总结set集合一般用于元素的不重复的场景,比如抽奖系统,轮播等场景下
在使用hash集合的时候,要注意,hash其实就是一个Map集合,key-map的时候,值是一个map集合的形式进行存储的,也和Java中的hashmap有一个类似。
HVALS获取所有的value,HKEYS获取所有的key,HGETALL获取所有的键值
总结:
hash可以用于存储变更的数据,比如user,name,age等,尤其是用户信息之类的,hash更加适合用于对象的存储,string更加适合用于字符串的存储。
在set集合的基础上增加一个序列号,来进行排序
ZRANGEBYSCORE使用语法
总结
以上是在对五种数据类型进行存取时的一些常用命令 *** 作。关于其他的命令使用,小伙伴们在用到的时候可以直接入官网查看就可以了。
在 Redis 中查看数据可以使用以下命令:
keys pattern 命令可以列出匹配给定模式的所有键名。例如,执行 keys 可以列出所有的键名。
type key 命令可以查看指定键的数据类型。例如,执行 type mykey 可以查看键 mykey 的数据类型。
get key 命令可以获取指定键的值。例如,执行 get mykey 可以获取键 mykey 的值。
hgetall key 命令可以获取指定哈希表的所有键值对。例如,执行 hgetall myhash 可以获取哈希表 myhash 的所有键值对。
lrange key start stop 命令可以获取指定列表的一部分元素。例如,执行 lrange mylist 0 -1 可以获取列表 mylist 的所有元素。
smembers key 命令可以获取指定集合的所有成员。例如,执行 smembers myset 可以获取集合 myset 的所有成员。
zrange key start stop 命令可以获取指定有序集合的一部分成员。例如,执行 zrange myzset 0 -1 可以获取有序集合 myzset 的所有成员。
以上是 Redis 中一些基本的数据查看命令,具体使用取决于你想要查看的数据类型和数据结构。
以上就是关于redis 3.2.6 怎么查询list全部的内容,包括:redis 3.2.6 怎么查询list、Redis数据结构之string类型和list类型、深入了解Redis *** 作五大数据类型常用命令等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)