redis 是一种非关系型数据库
默认存在16个数据库,下标从0开始
其中存储的内容是以键值对为元素保存
支持的数据类型包括字符串(strings), 散列(hashes), 列表(lists),
集合(sets), 有序集合(sorted sets)
1、切换数据库
select 0 select 1
2、清空当前数据库
flushdb
3、清除所有库中的数据
flushall
字符串是一种最基本的Redis值类型。Redis字符串是二进制安全的, 这意味着一个Redis字符串能包含任意类型的数据 一个字符串类型的值最多能存储512M字节的内容
1、增加单个键值对(如果重复就覆盖)
SET key value
2、增加多个键值对(如果重复就覆盖)many
MSET key value [key value ...] mest fgh fgh a a b b
3、增加多个键值对(如果重复就创建失败)
MSETNX key value [key value ...]
DEL key [key ...] del fgh a b
1、返回旧值并设置新值(如果键不存在,就创建并赋值)
GETSET key value getset fgh newfgh
2、追加字符串(如果键不存在,就创建并赋值)
APPEND key value append fgh newfgh2
3、覆盖字符串(从指定偏移量 offset,向后覆盖)
SETRANGE key offset value setrange fgh 0 newfgh1
4、键重命名(重名就覆盖,加 nx 表示重名就失败)
RENAME key newkey RENAMENX key newkey renamenx fgh fgh111
5、查找键(可以使用 *、?等正则表达式 pattern)
KEYS pattern keys * 查找所有的 keys f?? 查找f开头,后接两个字符的 key fg[fgh] 查找fg开头,后接一个f、g、h中任意字符的
6、查看键类型
TYPE key type fgh
7、查看键是否存在
EXISTS key
8、获取键对应的值
GET key
9、获取多个键对应的值
MGET key [key ...] mget fgh a b
10、获取字符串长度
STRLEN key
11、获取(截取)子字符串
(索引值从0开始,负数表示从字符串右边向左数起,-1表示最后一个字符)
GETRANGE key start end getranger fgh 0 -1
1、创建键值对时,设置生存时间(ex 代表秒,px 代表毫秒)
SET key value [EX seconds] [PX milliseconds] [NX|XX] set fgh fgh ex 20 set fgh fgh px 20000 20000ms=20s
2、已存在的键值对,设置生存时间
EXPIRE key seconds PEXPIRE key milliseconds expire fgh 20 pexpire fgh 20000
3、设置在指定时间戳 Unix 过期
EXPIREAT key timestamp PEXPIREAT key milliseconds-timestamp EXPIREAT fgh 999999999 PEXPIREAT fgh 999999999
4、撤销生存时限设置
PERSIST key
5、查看剩余时间
key存在但没有设置TTL,返回-1 key存在,但还在生存期内,返回剩余的秒或者毫秒 key曾经存在,但已经消亡,返回-2(2.8版本之前返回-1)
TTL key PTTL key
1、按步长增减 1(值需要为 int,否则报错)
INCR key DECR key
2、按步长增减设定值 decrement(值需要为 int,否则报错)
INCRBY key decrement DECRBY key decrement incrby fgh 50 decrby fgh 50
字符串中的字符一个占一个 byte ,即 8 bit 位图不是真正的数据类型,它是定义在字符串类型中 一个字符串类型的值最多能存储512M字节的内容 位上限:2^32 bit
1、设置某一位上的值
SETBIT key offset value offset偏移量,从0开始 value不写,默认是0 set fgh 0 1
2、获取某一位上的值
GETBIT key offset getbit fgh 0
3、返回0或者1在区间上第一次出现的位置
BITPOS key bit [start] [end] start 和 end 指 bit bittop fgh 0 2
4、统计指定位区间上值为1的个数
BITCOUNT key [start] [end] start 和 end 指 byte 即 8 bit bitcount fgh 0 1
1、对一个或多个 key 求逻辑并,并将结果保存到 destkey
BITOP AND destkey key [key ...] bittop and newfgh fgh1 fgh2
2、对一个或多个 key 求逻辑或,并将结果保存到 destkey
BITOP OR destkey key [key ...] bittop or newfgh fgh1 fgh2
3、对一个或多个 key 求逻辑异或,并将结果保存到 destkey
(有真为真,同真为假)
BITOP XOR destkey key [key ...] bittop xor newfgh fgh1 fgh2
4、对给定 key 求逻辑非,并将结果保存到 destkey
BITOP NOT destkey key bittop not newfgh fgh
1、用户活跃天数统计
以 key 值为用户 id
不同的 bit 位对应时间
通过 bitcount 获得总的天数
基于压缩列表和链表实现 元素是字符串类型 列表头尾增删快,中间增删慢,增删元素是常态 元素可以重复出现 最多包含2^32-1元素
左右或者头尾压入元素
LPUSH key value [value ...] LPUSHX key value 如果LIST存在,就压入元素 RPUSH key value [value ...] RPUSHX key value 如果LIST存在,就压入元素 lpush fgh 1 2 3 4 5 rpush fgh 1 2 3 4 5
1、左右(头尾)弹出元素(死前给你看一眼)
LPOP key RPOP key
2、从一个列表尾部弹出元素压入到另一个列表的头部
RPOPLPUSH source destination rpoplpush fgh aaa fgh 右边最后的元素,左压到 aaa
3、从列表头部开始删除值等于value的元素count次
LREM key count value
count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count
count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值
count = 0 : 移除表中所有与 value 相等的值
lrem fgh 1 a 左起删除一个 a lrem fgh -1 a 右起删除一个 a lrem fgh 0 a 删除全部的 a
4、去处指定范围外元素
LTRIM key start stop lrtim fgh 0 -1 全删了 lrtim fgh 1 -1 保留第一个元素
1、设置指定位置元素的值
LSET key index value lset fgh 0 a
2、在列表中某个存在的值(pivot)前或后插入元素
LINSERT key BEFORE|AFTER pivot value key 和 pivot 不存在,不进行任何操作 选择第一个匹配的元素
lpush fgh 1 2 3 3 3 3 4 5 linsert fgh before 3 2.5 linsert fgh after 3 4.5
1、返回列表中指定范围元素
LRANGE key start stop LRANGE key 0 -1 表示返回所有元素 lrange fgh 0 3
2、获取指定位置的元素
LINDEX key index lindex fgh 0
3、列表长度(元素个数)
LLEN key llen fgh
如果弹出的列表不存在或者为空,就会阻塞 超时时间设置为0,就是永久阻塞,直到有数据可以弹出 如果多个客户端阻塞在同一个列表上,使用First In First Service原则,先到先服务
1、左右或者头尾阻塞弹出元素
BLPOP key [key ...] timeout BRPOP key [key ...] timeout blpop fgh 20 左弹出,阻塞(等待)20秒
2、从一个列表尾部阻塞弹出元素压入到另一个列表的头部
BRPOPLPUSH source destination timeout
key :map 由field和关联的value组成的map键值对 field和value是字符串类型 一个hash中最多包含2^32-1键值对
1、设置单个字段(key :(key :value))
HSET key field value HSETNX key field value key的filed不存在的情况下执行,key不存在直接创建 hset fgh id 1001
2、设置多个字段(key :(key :value)、(key :value)…)
HMSET key field value [field value ...] hmset play01 id 1001 name fgh level 30
删除指定的字段
HDEL key field [field ...]
1、在字段对应的值上进行整数的增量计算(必须要 int 类型)
HINCRBY key field increment hincrby play01 level 50
2、在字段对应的值上进行浮点数的增量计算(必须要 int 类型)
HINCRBYFLOAT key field increment hincrbyfloat play01 id 20.5
1、返回字段个数
HLEN key
2、判断字段是否存在
HEXISTS key field key或者field不存在,返回0
3、返回字段值
HGET key field
4、返回多个字段值
HMGET key field [field ...]
5、返回所有的键值对
HGETALL key
6、返回所有字段名
HKEYS key
7、返回所有值
HVALS key
节约内存空间
每创建一个键,它都会为这个键储存一些附加的管理信息
(比如这个键的类型,这个键最后一次被访问的时间等等)
所以数据库里面的键越多,redis数据库服务器在储存附加管理信息方面耗费的内存就越多,
花在管理数据库键上的CPU也会越多在字段对应的值上进行浮点数的增量计算
微博用户的详细统计
1、nil = null
2、set * & get * 是将 * 作为字符串,而不是全部