Redis操作str、list、hash、set、sortedset、bitmap

通用操作

切换库(number的值在0-15之间,db0 ~ db15)
select number
查看键
keys 表达式 :如 keys *
数据类型
type key
键是否存在
exists key
删除键
del key
键重命名
rename key newkey
清除当前库中所有数据(慎用)
flushdb
清除所有库中所有数据(慎用)
flushall

一,字符串类型(string)

  • 特点

1、字符串、数字,都会转为字符串来存储
2、以二进制的方式存储在内存中

  • 常用命令

    • 字符串操作

    set key value:设置一个key-value
    set key value nx:设置一个key-value,当key不存在时生效
    get key:获取key的值
    mset key1 value1 key2 value2:一次性设置多个key-value
    mget key1 key2 key3:一次性获取多个key对应的值
    set key value ex seconds:设置key-value时添加过期时间,单位秒
    strlen key:获取指定key对应的值的长度
    getset key value:返回旧值并设置新值,如果键不存在,就创建并赋值

    • 数字操作

    incrby key 步长:给key的值增加指定步长
    decrby key 步长:给key的值减少指定步长
    incr key:给key的值增加1
    decr key:给key的值减少1
    incrbyfloat key number:给key的值增加指定浮点数(正数/负数)

    • 过期时间

    方式一
    set key value ex seconds
    方式二
    set key value
    expire key 5:单位秒
    pexpire key 5:单位毫秒
    ttl key:查看指定key剩余过期时间
    persist key:删除过期时间,使其不过期

  • 示例

    1、查看 db0 库中所有的键
    select 0
    keys *
    2、设置键 trill:username 对应的值为 user001,并查看
    set trill:username user001
    3、获取 trill:username 值的长度
    strlen trill:username
    4、一次性设置 trill:password 、trill:gender、trill:fansnumber 并查看
    mset trill:password 123 trill:gender M trill:fansnumber 500
    5、查看键 trill:score 是否存在
    exists trill:score
    6、增加10个粉丝
    incrby trill:fansnumber 10
    7、增加2个粉丝(一个一个加)
    incr trill:fansnumber
    incr trill:fansnumber
    8、有3个粉丝取消关注你了
    decrby trill:fansnumber 3
    9、又有1个粉丝取消关注你了
    decr trill:fansnumber
    10、思考、思考、思考…,清除当前库
    flushdb
    11、一万个思考之后,清除所有库
    flushall

二,列表数据类型(List)

  • 特点

1、元素是字符串类型
2、列表头尾增删快,中间增删慢,增删元素是常态
3、元素可重复
4、最多可包含2^32 -1个元素
5、索引同python列表

  • 列表常用命令


1、从列表头部压入元素
LPUSH key value1 value2
2、从列表尾部压入元素
RPUSH key value1 value2
3、从列表src尾部弹出1个元素,压入到列表dst的头部
RPOPLPUSH src dst
4、在列表指定元素后/前插入元素
LINSERT key after|before value newvalue


5、查看列表中元素
LRANGE key startindex stopindex
6、获取列表长度
LLEN key


7、从列表头部弹出1个元素
LPOP key
8、从列表尾部弹出1个元素
RPOP key
9、列表头部,阻塞弹出,列表为空时阻塞,超时时间设置为0,就是永久阻塞,直到有数据弹出为止,遵循先到先出原则
BLPOP key timeout
10、列表尾部,阻塞弹出,规则同上
BRPOP key timeout
11、删除指定元素
LREM key count value
count>0:表示从头部开始向表尾搜索,移除与value相等的元素,数量为count
count<0:表示从尾部开始向表头搜索,移除与value相等的元素,数量为count
count=0:移除表中所有与value相等的值
12、删除指定范围以外的元素,保留指定范围内的元素
LTRIM key start stop


13、修改指定下标的元素
LSET key index newvalue

  • 示例

1、查看所有的键
keys *
2、向列表 spider:urls 中以RPUSH放入如下几个元素:01_baidu.com、02_taobao.com、03_sina.com、04_jd.com、05_xxx.com
RPUSH spider:urls 01_baidu.com 02_taobao.com 03_sina.com 04_jd.com 05_pb.com
3、查看列表中所有元素
LRANGE spider:urls 0 -1
4、查看列表长度
LLEN spider:urls
5、将列表中01_baidu.com 改为 01_tmall.com
LSET spider:urls 0 01_tmall.com
6、在列表中04_jd.com之后再加1个元素 02_taobao.com
LINSERT spider:urls after 04_jd.com 02_taobao.com
7、弹出列表中的最后一个元素
RPOP spider:urls
8、删除列表中所有的 02_taobao.com
LREM spider:urls 0 02_taobao.com
9、剔除列表中的其他元素,只剩前3条
LTRIM spider:urls 0 2

三,Hash散列数据类型

  • 定义

1、由field和关联的value组成的键值对
2、field和value是字符串类型
3、一个hash中最多包含2^32-1个键值对

  • 优点

节约内存空间
1、每创建一个键,它都会为这个键储存一些附加的管理信息(比如这个键的类型,这个键最后一次被访问的时间等)
2、键越多,redis数据库在储存附件管理信息方面耗费内存越多,花在管理数据库键上的CPU也会越多

  • 缺点(不适合hash情况)

1、使用二进制位操作命令:SETBIT、GETBIT、BITCOUNT等,如果想使用这些操作,只能用字符串键
2、使用过期键功能:键过期功能只能对键进行过期操作,而不能对散列的字段进行过期操作

  • 哈希常用命令

1、设置单个字段
HSET key field value
HSETNX key field value
2、设置多个字段
HMSET key field value field value
3、返回字段个数
HLEN key
4、判断字段是否存在(不存在返回0)
HEXISTS key field
5、返回字段值
HGET key field
6、返回多个字段值
HMGET key field filed
7、返回所有的键值对
HGETALL key
8、返回所有字段名
HKEYS key
9、返回所有值
HVALS key
10、删除指定字段
HDEL key field
11、在字段对应值上进行整数增量运算
HINCRBY key filed increment
12、在字段对应值上进行浮点数增量运算
HINCRBYFLOAT key field increment

  • 示例

1,添加一个key为user001的用户,username为teenjeen
HSET user001 username teenjeen
2,给user001添加额外的字段
HMSET user001 age 30 height 182
3,查看user001是否有weight字段
HEXISTS user001 weight
3,查看user001的age的值
HGET user001 age
4,给age添加10岁
HINCRBY user001 age 10
5,查看有哪些字段,以及字段数量
HKEYS user001
HLEN user001
6,删除age字段
HDEL user001 age

四,集合数据类型(set)

  • 特点

1、无序、去重
2、元素是字符串类型
3、最多包含2^32-1个元素

  • 集合常用命令

1、增加一个或者多个元素,自动去重
SADD key member1 member2
2、查看集合中所有元素
SMEMBERS key
3、删除一个或者多个元素,元素不存在自动忽略
SREM key member1 member2
4、元素是否存在
SISMEMBER key member
5、随机返回集合中指定个数的元素,默认为1个
SRANDMEMBER key [count]
6、弹出成员
SPOP key [count]
7、返回集合中元素的个数,不会遍历整个集合,只是存储在键当中了
SCARD key
8、把元素从源集合移动到目标集合
SMOVE source destination member
9、差集(number1 1 2 3 number2 1 2 4 结果为3)
SDIFF key1 key2
10、差集保存到另一个集合中
SDIFFSTORE destination key1 key2
11、交集
SINTER key1 key2
SINTERSTORE destination key1 key2结果保存在新集合中
11、并集
SUNION key1 key2
SUNIONSTORE destination key1 key2 结果保存在新集合中

  • 示例

1,用户001关注了peiqi,qiaozhi,danni
SADD user001 peiqi qiaozhi danni
2,用户002关注了peiqi,qiaozhi,suxi
SADD user002 peiqi qiaozhi suxi
3,找出用户001和用户002 的共同关注
SINTER user001 user002

五,有序集合(sortedset)

  • 特点

1、有序、去重
2、元素是字符串类型
3、每个元素都关联着一个浮点数分值(score),并按照分值从小到大的顺序排列集合中的元素(分值可以相同)
4、最多包含2^32-1元素

  • 示例
    一个保存了水果价格的有序集合
分值 2.0 4.0 6.0 8.0 10.0
元素 西瓜 葡萄 芒果 香蕉 苹果

一个保存了员工薪水的有序集合

分值 6000 8000 10000 12000
元素 lucy tom jim jack

一个保存了正在阅读某些技术书的人数

分值 300 400 555 666 777
元素 核心编程 阿凡提 本拉登 阿姆斯特朗 比尔盖茨
  • 有序集合常用命令

1、在有序集合中添加一个成员
zadd key score member
2、查看指定索引区间元素(升序)
zrange key start stop [withscores]
withscores:显示具体数值
3、查看指定索引区间元素(降序)
ZREVRANGE key start stop [withscores]
4、查看指定元素的分值
ZSCORE key member
5、返回指定分值区间元素
zrangebyscore key min max [withscores] [limit offset count]
offset : 跳过多少个元素
count : 返回几个
小括号 : 开区间
6、删除成员
zrem key member
7、增加或者减少分值
zincrby key increment member
8、返回元素排名
zrank key member
9、返回元素逆序排名
zrevrank key member
10、删除指定分值区间内的元素
zremrangebyscore key min max
11、返回集合中元素个数
zcard key
12、返回指定范围中元素的个数
zcount key min max
13、并集
zunionstore destination numkeys key [weights] [AGGREGATE SUM|MIN|MAX]
如:zunionstore salary3 2 salary salary2 weights 1 0.5 AGGREGATE MAX
其中2:代表集合数量;weights:权重1给salary,权重0.5给salary2。0.5代表取一半的分值,算完权重之后执行聚合AGGREGATE
salary 中有6000分值的Tom,salary2中有8000分值的Tom,那么根据权重算法6000x1+8000x0.5=10000,并集中Tom的新分值为10000
14、交集:和并集类似,只取相同的元素
ZINTERSTORE destination numkeys key1 key2 WEIGHTS weight AGGREGATE SUM(默认)|MIN|MAX

位图操作(bitmap)

  • 定义

1、位图不是真正的数据类型,它是定义在字符串类型
2、一个字符串类型的值最多能存储512M字节的内容,位上限:2^32
1MB = 1024KB
1KB = 1024Byte(字节)
1Byte = 8bit(位)

  • 强势点

可以实时的进行统计,极其节省空间。官方在模拟1亿2千8百万用户的模拟环境下,在一台MacBookPro上,典型的统计如“日用户数”的时间消耗小于50ms, 占用16MB内存

  • 设置某一位上的值(setbit)

设置某一位上的值(offset是偏移量,从0开始)
setbit key offset value
获取某一位上的值
GETBIT key offset
统计键所对应的值中有多少个 1
BITCOUNT key

  • 示例
# 默认扩展位以0填充
127.0.0.1:6379> set mykey ab
OK
127.0.0.1:6379> get mykey
"ab"
127.0.0.1:6379> SETBIT mykey 0 1
(integer) 0
127.0.0.1:6379> SETBIT mykey 1 1
(integer) 0
127.0.0.1:6379> get mykey
"\xe1b"
127.0.0.1:6379> GETBIT mykey 2
(integer) 0
127.0.0.1:6379> GETBIT mykey 0
(integer) 1
127.0.0.1:6379> bitcount mykey
(integer) 2

应用场景案例

# 网站用户的上线次数统计(寻找活跃用户)
	用户名为key,上线的天作为offset,上线设置为1
# 示例
	用户名为 user1:login 的用户,今年第1天上线,第30天上线
	SETBIT user1:login 0 1 
	SETBIT user1:login 29 1
	BITCOUNT user1:login
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章