redis的List列表和hash散列

一、List列表

基于Linked List实现
元素是字符串类型
列表头尾增删快,中间增删慢,增删元素是常态
元素可以重复出现
最多包含2^32-1元素

列表的索引
从左至右,从0开始
从右至左,从-1开始

相关命令

B block 块,阻塞
L left 左
R right 右
X exist 存在

1.左右压入和弹出元素

左右或者头尾压入元素
LPUSH key value [value ...]
LPUSHX key value
RPUSH key value [value ...]
RPUSHX key value
左右或者头尾弹出元素
LPOP key
RPOP key
从一个列表尾部弹出元素压入到另一个列表的头部
RPOPLPUSH source destination

2.返回指定范围、指定位置元素和值

返回列表中指定范围元素
LRANGE key start stop
LRANGE key 0 -1 表示返回所有元素
获取指定位置的元素
LINDEX key index
设置指定位置元素的值
LSET key index value
列表长度,元素个数
LLEN key

3.从列表头部开始删除值等于value的元素count次

LREM key count value
count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count
count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值
count = 0 : 移除表中所有与 value 相等的值
举例:
RPUSH listkey c abc c ab 123 ab bj ab redis list
LREM listkey 2 ab
LRANGE listkey 0 -1

4.去处指定范围外元素

LTRIM key start stop
举例
RPUSH listkey c abc c ab 123 ab bj ab redis list
LTRIM listkey 0 -1
LTRIM listkey 1 -1
LTRIM listkey 1 10000
微博的评论最后500条
LTRIM u1234:forumid:comments 0 499

5.在列表中某个存在的值(pivot)前或后插入元素

LINSERT key BEFORE|AFTER pivot value
key和pivot不存在,不进行任何操作
举例
RPUSH lst Clojure C Lua
LINSERT lst AFTER  C Python
LINSERT lst BEFORE C Ruby

6.阻塞

如果弹出的列表不存在或者为空,就会阻塞
超时时间设置为0,就是永久阻塞,直到有数据可以弹出
如果多个客户端阻塞在同一个列表上,使用First In First Service原则,先到先服务
左右或者头尾阻塞弹出元素
BLPOP key [key ...] timeout
BRPOP key [key ...] timeout
从一个列表尾部阻塞弹出元素压入到另一个列表的头部
BRPOPLPUSH source destination timeout

二、Hash散列

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

在这里插入图片描述

相关命令

1.字段设置

1.1设置单个字段
HSET key field value
HSETNX key field value
key的filed不存在的情况下执行,key不存在直接创建

1.2设置多个字段
HMSET key field value [field value ...]

1.3返回字段个数
HLEN key

1.4判断字段是否存在
HEXISTS key field
key或者field不存在,返回0

1.5返回字段值
HGET key field

1.6返回多个字段值
HMGET key field [field ...]

1.7返回所有的键值对
HGETALL key

1.8返回所有字段名
HKEYS key

1.9返回所有值
HVALS key

1.10在字段对应的值上进行整数的增量计算
HINCRBY key field increment

1.11在字段对应的值上进行浮点数的增量计算
HINCRBYFLOAT key field increment

1.12删除指定的字段
HDEL key field [field ...]

举例:
HINCRBY numbers x 100
HINCRBY numbers x -50
HINCRBYFLOAT numbers x 3.14
HDEL numbers x

2.Hash用途

2.1节约内存空间
每创建一个键,它都会为这个键储存一些附加的管理信息(比如这个键的类型,这个键最后一次被访问的时间等等)
所以数据库里面的键越多,redis数据库服务器在储存附加管理信息方面耗费的内存就越多,花在管理数据库键上的CPU也会越多在字段对应的值上进行浮点数的增量计算。

2.2不适合hash的情况
使用二进制位操作命令:因为Redis目前支持对字符串键进行SETBIT、GETBIT、BITOP等操作,如果你想使用这些操作,那么只能使用字符串键,虽然散列也能保存二进制数据
使用过期键功能:Redis的键过期功能目前只能对键进行过期操作,而不能对散列的字段进行过期操作,因此如果你要对键值对数据使用过期功能的话,那么只能把键值对储存在字符串里面

:
微博的好友关注
用户ID为key,Field为好友ID,Value为关注时间
user:1000 user:606 20150808
用户维度统计
统计数包括:关注数、粉丝数、喜欢商品数、发帖数
用户为Key,不同维度为FieldValue为统计数
比如关注了5人
HSET user:100000 follow 5
HINCRBY user:100000 follow 1
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值