redis4数据类型.更新HyperLogLog类型

使用客户端

常用命令

 

1通用操作

@设置时间

expire key 3600 设置时间

@清除

flushall   //如何清空所有缓存

@显示

keys pattern:获取所有与pattern匹配的key,返回所有与该key匹配的keys。*表示任意一个或多个字符,?表示任意字符,[abc]表示方括号中任意一个字母

keys *查看所有键值

keys aa*

keys aa?

keys aa[abc]

@删除

del key[key1、key2…]:删除指定的key

@存在

 exists key:判断该key是否存在,1代表存在,0代表不存在

@改名

 rename key newkey:为当前的key重命名

@剩余时间

ttl key:获取该key所剩的超时时间,如果不存在或没有超时设置,返回-1

ttl  key//查看缓存剩余时间  -1是永久,-2是过期,正数是具体时间

@类型

type key:获取指定key的类型。该命令将以字符串的格式返回。返回的字符串为string、list、set、hash和zset,如果key不存在返回none。

 

 

 

2存储string


set key  value设置键key的值为value

get key 查看键key的值

getset key value:先获取该key的值,然后在设置该key的值

incr key:将指定的key的value原子性的递增1.如果该key不存在,其初始值为0,在incr之后其值为1。如果value的值不能转成整型,如hello,该操作将执行失败并返回相应的错误信息。

decr key:将指定的key的value原子性的递减1.如果该key不存在,其初始值为0,在incr之后其值为-1。如果value的值不能转成整型,如hello,该操作将执行失败并返回相应的错误信息

append key  value2 在键key的值后面加上value2   //如果该key存在,则在原有的value后追加该值;如果该key不存在,则重新创建一个key/value

 

3— 存储list//按照插入顺序排序的字符串链表,和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素。在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除

从元素插入和删除的效率视角来看,如果我们是在链表的两头插入或删除元素,这将会是非常高效的操作

如果元素插入或删除操作是作用于链表中间,那将会是非常低效的

ArrayList使用数组方式存储数据,所以根据索引查询数据速度快,而新增或者删除元素时需要设计到位移操作,所以比较慢。

 LinkedList使用双向链接方式存储数据,每个元素都记录前后元素的指针,所以插入、删除数据时只是更改前后元素的指针指向即可,速度非常快,然后通过下标查询元素时需要从头开始索引,所以比较慢

 

@添加再向该链表的头部

lpush key values[value1 value2…]:在指定的key所关联的list的头部插入所有的values,如果该key不存在,该命令在插入的之前创建一个与该key关联的空链表,之后再向该链表的头部插入数据。插入成功,返回元素的个数

@添加 在该list的尾部添加元素

rpush key values[value1、value2…]:在该list的尾部添加元素

@添加

l lpushx key value:仅当参数中指定的key存在时(如果与key管理的list中没有值时,则该key是不存在的)在指定的key所关联的list的头部插入value。

@添加不存在失败

 rpushx key value’:在该list的尾部添加元素

@通过脚标单个值

 lset key index value:设置链表中的index的脚标的元素值,0代表链表的头元素,-1代表链表的尾元素。操作链表的脚标则放回错误信息。。。//就是第几个

@通过前后设置值

linsert key before|after pivot value:在pivot元素前或者后插入value这个元素

 

 

@显示

 lrange key start end:获取链表中从start到end的元素的值,start、end可为负数,若为-1则表示链表尾部的元素,-2则表示倒数第二个,依次类推

lrange aa 0 -1//从头到尾

 

@弹出

 lpop key:返回并弹出指定的key关联的链表中的第一个元素,即头部元素。如果该key不存在,返回nil;若key存在,则返回链表的头部元素

@弹出

rpop key:从尾部弹出元素。

@弹出并到前面

 rpoplpush resource资源 destination目的地:将链表中的尾部元素弹出并添加到头部。[循环操作]//rpoplpush aa  aa

@删除

lrem key count value:删除count个值为value的元素,如果count大于0,从头向尾遍历并删除count个值为value的元素,如果count小于0,则从尾向头遍历并删除。如果count等于0,则删除链表中所有等于value的元素。

使用场景

rpoplpush的使用场景:

Redis链表经常会被用于消息队列的服务,以完成多程序之间的消息交换。假设一个应用程序正在执行LPUSH操作向链表中添加新的元素,我们通常将这样的程序称之为"生产者(Producer)",而另外一个应用程序正在执行RPOP操作从链表中取出元素,我们称这样的程序为"消费者(Consumer)"。如果此时,消费者程序在取出消息元素后立刻崩溃,由于该消息已经被取出且没有被正常处理,那么我们就可以认为该消息已经丢失,由此可能会导致业务数据丢失,或业务状态的不一致等现象的发生。然而通过使用RPOPLPUSH命令,消费者程序在从主消息队列中取出消息之后再将其插入到备份队列中,直到消费者程序完成正常的处理逻辑后再将该消息从备份队列中删除。同时我们还可以提供一个守护进程,当发现备份队列中的消息过期时,可以重新将其再放回到主消息队列中,以便其它的消费者程序继续处理。

修剪(trim)一个已存在的 list,这样 list 就会只包含指定范围的指定元素。start 和 stop 都是由0开始计数的, 这里的 0 是列表里的第一个元素(表头),1 是第二个元素,以此类推。

例如: LTRIM foobar 0 2 将会对存储在 foobar 的列表进行修剪,只保留列表里的前3个元素。

start 和 end 也可以用负数来表示与表尾的偏移量,比如 -1 表示列表里的最后一个元素, -2 表示倒数第二个,等等

 

4— 存储hash、、、、、、、list相当于有序数组,hash相当于有键值对应的一维数组

 常用命令

l hset key field value:为指定的key设定field/value对(键值对)。

l hget key field:返回指定的key中的field的值

l hexists key field:判断指定的key中的filed是否存在

l hlen key:获取key所包含的field的数量

l hincrby key field increment:设置key中filed的值增加increment,如:age增加20

l hmset key fields:设置key中的多个filed/value

l hmget key fileds:获取key中的多个filed的值

 

HMSET myhash field1 "Hello" field2 "World"

hmset aa1 f1 "11" f2 "22

 

hmget dd field field1

1) "a"

2) "a"

 

 

hgetall

HMSET yiibai name "redis tutorial" description "redis basic commands for caching" likes 20 visitors 23000

redis 127.0.0.1:6379> HGETALL yiibai

获取这个hash 所有的

    1. 1) "name"   
    2. 2) "redis tutorial" 
    3. 3) "description" 
    4. 4) "redis basic commands for caching" 
    5. 5) "likes"
    6. 6) "20"
    7. 7) "visitors"
    8. 8) "23000"

 

4存储set//感觉像无序的不能重复的数组

List类型不同的是,Set集合中不允许出现重复的元素,换句话说,如果多次添加相同元素,Set中将仅保留该元素的一份拷贝。和List类型相比,Set类型在功能上还存在着一个非常重要的特性,即在服务器端完成多个Sets之间的聚合计算操作,如unions、intersections和differences。由于这些操作均在服务端完成,因此效率极高,而且也节省了大量的网络IO开销

@添加

sadd  key value1,value2,vaule3:向set中添加数据,如果该key的值已有则不会重复添加
@获取

l smembers key:获取set中所有的成员

l scard key:获取set中成员的数量

@判断存在

l sismember key member:判断参数中指定的成员是否在该set中,1表示存在,0表示不存在或者该key本身就不存在

@删除

l srem key members[member1、member2…]:删除set中指定的成员

@随机

l srandmember key:随机返回set中的一个成员

@取差值

l sdiff key[sdiff key1 key2…]:返回key1与key2中相差的成员,而且与key的顺序有关。即返回差集。

l sdiffstore destination key[key1、key2…]:将key1、key2相差的成员存储在destination

@取交集

l sinter key[key1,key2…]:返回交集。

l sinterstore destination key[key…]:将返回的交集存储在destination
@取合集

l sunion key[key1、key2…]:返回并集。

l sunionstore destination key[key…]:将返回的并集存储在destination

 使用场景

1、可以使用Redis的Set数据类型跟踪一些唯一性数据,比如访问某一博客的唯一IP地址信息。对于此场景,我们仅需在每次访问该博客时将访问者的IP存入Redis中,Set数据类型会自动保证IP地址的唯一性。

2、充分利用Set类型的服务端聚合操作方便、高效的特性,可以用于维护数据对象之间的关联关系。比如所有购买某一电子设备的客户ID被存储在一个指定的Set中,而购买另外一种电子产品的客户ID被存储在另外一个Set中,如果此时我们想获取有哪些客户同时购买了这两种商品时,Set的intersections命令就可以充分发挥它的方便和效率的优势了。

 

 

 

5类型Redis - HyperLogLog//用来算数量

redis 127.0.0.1:6379> PFADD tutorials "redis"

1) (integer) 1

redis 127.0.0.1:6379> PFADD tutorials "mongodb"

1) (integer) 1

redis 127.0.0.1:6379> PFADD tutorials "mysql"

1) (integer) 1

redis 127.0.0.1:6379> PFCOUNT tutorials

(integer) 3

 

posted @ 2017-11-21 23:40  克维拉  阅读(187)  评论(0编辑  收藏  举报