redis 常用命令

 看 https://space.bilibili.com/95256449 视频一些笔记

keys *
# 查看所有的key

select (数据库)
# 切换数据库 redis有16个数据库,值从0-15

set (key) (value)

get (key)

flushdb
# 清空当前数据库

flushall
# 清空全部数据库

exists (key)
# 判断key是否存在 返回1表示存在 返回0表示不存在

move (key) (数据库)
# 移除键

expire (key) (时间:秒)
# 设置过期时间

ttl (key)
# 查看key剩余过期时间

type (key)
# 查看key的类型
string:
技巧:
set user:{id}:{filed}

append (key) (要追加的字符)
# 在指定的key的值里,追加字符,如果key不存在,就相当于 set 一个 key

strlen (key)
# 返回指定的key的长度

incr (key)
# 执行原子的加1操作.如果key不存在,则会先设置成0,然后再加1,最后为1.如果key有一个错误类型的value或者是一个不能表示成数字的字符串,就返回错误。

incrby (key) (需要加的整数值)
# 加 整数值 操作.如果key不存在,则会先设置成0,然后再加 整数值,最后为 整数值.如果key有一个错误类型的value或者是一个不能表示成数字的字符串,就返回错误。

decr (key)
# 减1操作.如果key不存在,则会先设置成0,然后再减1,最后为-1.如果key有一个错误类型的value或者是一个不能表示成数字的字符串,就返回错误。

decrby (key) (需要减的整数值)
# 减 整数值 操作.如果key不存在,则会先设置成0,然后再减 整数值,最后为 整数值.如果key有一个错误类型的value或者是一个不能表示成数字的字符串,就返回错误。

getrange (key) (开始下标) (结束下标)
# 返回指定的字符串长度

setname (key) (开始下标) (替换的值)
# 指定从开始的下标替换值

setex (key) (过期时间:秒)(value)
# 设置key同时设置过期时间

setnx (key) (value)
# 如果当前key不存在,则设置,存在不进行设置

mget (key) (value) (key1) (value1) (key2) (value2) ...
# 批量设置key

mget (key) (key1) (key2) ...
# 批量获取key

msetnx (key) (value) (key1) (value1) (key2) (value2) ...
# 如果当前key不存在,则设置,存在不进行设置,注意:msetnx 是原子性操作,只要其中一个key存在,就会全部失败。要么一起成功,要么一起失败

getset {key} {value}
# 自动将key对应到value并且返回原来key对应的value。如果key存在但是对应的value不是字符串,就返错 
# 误。如果key不存在,则返回null,并且创建值
# 设计模式
# GETSET可以和INCR一起使用实现支持重置的计数功能。举个例子:每当有事件发生的时候,一段程序都会调# 用INCR给key mycounter加1,但是有时我们需要获取计数器的值,并且自动将其重置为0。这可以通GETSET # mycounter “0”

 

list:

lpush (key) (value) (value1) ...
# 将所有指定的值插入到存于 key 的列表的头部。如果 key 不存在,那么在进行 push 操作前会创建一个空列表。

rpush (key) (value) (value1) ...
# 向存于 key 的列表的尾部插入所有指定的值。如果 key 不存在,那么会创建一个空的列表然后再进行 push 操作。

lpop (key)
# 移除并返回存于 key 的 list 的第一个元素

rpop (key)
# 移除并返回存于 key 的 list 的最后一个元素

lrange (key) (开始下标) (结束下标)
# 返回存储在 key 的列表里指定范围内的元素。 开始下标 和 结束下标 偏移量都是基于0的下标,即list的第一个元素下标是0(list的表头),第二个元素下标是1,以此类推

llen (key)
# 返回存储在 key 里的list的长度。 如果 key 不存在,那么就被看作是空list,并且返回长度为 0。

lrem (key) (count) (value)
# 从存于 key 的列表里移除前 count 次出现的值为 value 的元素。 这个 count 参数通过下面几种方式影# 响这个操作:
# count > 0: 从头往尾移除值为 value 的元素。
# count < 0: 从尾往头移除值为 value 的元素。
# count = 0: 移除所有值为 value 的元素。
# 比如, LREM list -2 “hello” 会从存于 list 的列表里移除最后两个出现的 “hello”。
# 需要注意的是,如果list里没有存在key就会被当作空list处理,所以当 key 不存在的时候,这个命令会返# 回 0。

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

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

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

# 超过范围的下标并不会产生错误:如果 start 超过列表尾部,或者 start > end,结果会是列表变成空表# (即该 key 会被移除)。 如果 end 超过列表尾部,Redis 会将其当作列表的最后一个元素。

# LTRIM 的一个常见用法是和 LPUSH / RPUSH 一起使用。 例如:

# LPUSH mylist someelement
# LTRIM mylist 0 99
# 这一对命令会将一个新的元素 push 进列表里,并保证该列表不会增长到超过100个元素。这个是很有用的,# 比如当用 Redis 来存储日志。 需要特别注意的是,当用这种方式来使用 LTRIM 的时候,操作的复杂度是 # O(1) , 因为平均情况下,每次只有一个元素会被移除。

RPOPLPUSH (移除key) (存储key)
# 原子性地返回并移除存储在 source 的列表的最后一个元素(列表尾部元素), 并把该元素放入存储在destination 的列表的第一个元素位置(列表头部)。

# 例如:假设 source 存储着列表 a,b,c, destination存储着列表 x,y,z。 执行 RPOPLPUSH 得到的结果是 source 保存着列表 a,b ,而 destination 保存着列表 c,x,y,z。

# 如果 source 不存在,那么会返回 nil 值,并且不会执行任何操作。 如果 source 和 destination 是同样的,那么这个操作等同于移除列表最后一个元素并且把该元素放在列表头部, 所以这个命令也可以当作是一个旋转列表的命令。

LSET (key) (index下标) (value)
# 设置 index 位置的list元素的值为 value,当 key 位置的值不是一个列表的时候,会返回一个error。

LINDEX key (index下标)
# 返回列表里的元素的索引 index 存储在 key 里面。 下标是从0开始索引的,所以 0 是表示第一个元素,1 # 表示第二个元素,并以此类推。 负数索引用于指定从列表尾部开始索引的元素。在这种方法下,-1 表示最后一个元素,-2 表示倒数第二个元素,并以此往前推。
# 当 key 位置的值不是一个列表的时候,会返回一个error。

LINSERT (key) (BEFORE前面|AFTER后面) (pivot要插入在什么value的前面或者后面) (value要插入的值)
# 把 value 插入存于 key 的列表中在基准值 pivot 的前面或后面。
# 当 key 不存在时,这个list会被看作是空list,任何操作都不会发生。
# 当 key 存在,但保存的不是一个list的时候,会返回error。
set(集合)set中的值不能重复,无序不重复 集合里的member就是value

sadd (key) (member) (member1) (member2) ...
# 添加一个或多个指定的member元素到集合的 key中.指定的一个或者多个元素member 如果已经在集合key中存在则忽略.如果集合key 不存在,则新建集合key,并添加member元素到集合key中.
# 如果key 的类型不是集合则返回错误.

smembers (key)
# 返回key集合所有的元素.

sismeber (key) (member)
# 返回成员 member 是否是存储的集合 key的成员.
# 如果member元素是集合key的成员,则返回1,如果member元素不是key的成员,或者集合key不存在,则返回0

scard (key)
# 返回集合存储的key的基数 (集合元素的数量).如果key不存在,则返回 0.

srem (key) (member) (member1) (member2) ...
# 在key集合中移除指定的元素. 如果指定的元素不是key集合中的元素则忽略 如果key集合不存在则被视为一个空的集合,该命令返回0.
# 如果key的类型不是一个集合,则返回错误.返回 集合中移除元素的个数,不包括不存在的成员.

SRANDMEMBER (key) (count)
# 仅提供key参数,那么随机返回key集合中的一个元素.
# Redis 2.6开始,可以接受 count 参数,如果count是整数且小于元素的个数,返回含有 count 个不同的元素的数组,如果count是个整数且大于集合中元素的个数时,仅返回整个集合的所有元素,当count是负数,则会返回一个包含count的绝对值的个数元素的数组,如果count的绝对值大于元素的个数,则返回的结果集里会出现一个元素出现多次的情况.
# 仅提供key参数时,该命令作用类似于SPOP命令,不同的是SPOP命令会将被选择的随机元素从集合中移除,而SRANDMEMBER仅仅是返回该随记元素,而不做任何操作.
# bulk-string-reply: 不使用count 参数的情况下该命令返回随机的元素,如果key不存在则返回nil。
# array-reply: 使用count参数,则返回一个随机的元素数组,如果key不存在则返回一个空的数组。

spop (key) (cout)
# 从存储在key的集合中移除并返回一个或多个随机元素。key不存在返回nil

smov (source需要移动的key) (destination目标key,移动到此key上) (member)
# 将member从source集合移动到destination集合中. 对于其他的客户端,在特定的时间元素将会作为source或者destination集合的成员出现.
# 如果source 集合不存在或者不包含指定的元素,这smove命令不执行任何操作并且返回0.否则对象将会从source集合中移除,并添加到destination集合中去,如果destination集合已经存在该元素,则smove命令仅将该元素充source集合中移除. 如果source 和destination不是集合类型,则返回错误.

SDIFF (key) (key1) (key2) ...
# 返回一个集合与给定集合的差集的元素.key 与 key1 key2 ...对比. 举例:
# key1 = {a,b,c,d}
# key2 = {c}
# key3 = {a,c,e}
# SDIFF key1 key2 key3 = {b,d}

sinter (key) (key1) (key2) ...
# 返回指定所有的集合的成员的交集.key 与 key1 key2 ...对比. 举例:
# key1 = {a,b,c,d}
# key2 = {c}
# key3 = {a,c,e}
# SINTER key1 key2 key3 = {c}
# 如果key不存在则被认为是一个空的集合,当给定的集合为空的时候,结果也为空.(一个集合为空,结果一直为空).

sunion (key) (key1) (key2) ...
# 返回给定的多个集合的并集中的所有成员.举例:
# key1 = {a,b,c,d}
# key2 = {c}
# key3 = {a,c,e}
# SUNION key1 key2 key3 = {a,b,c,d,e}
# 不存在的key可以认为是空的集合.
hash(哈希) key->map 也就是 key->(key->value)

HSET (key) (field) (value)
# 设置 key 指定的哈希集中指定字段的值。
# 如果 key 指定的哈希集不存在,会创建一个新的哈希集并与 key 关联。
# 如果字段在哈希集中存在,它将被重写。

HGET (key) (field)
# 返回 key 指定的哈希集中该字段所关联的值,当字段不存在或者 key 不存在时返回nil。

HMSET (key) (field) (value) (field1) (value1) (field2) (value2) ...
# 设置 key 指定的哈希集中指定字段的值。该命令将重写所有在哈希集中存在的字段。如果 key 指定的哈希集不存在,会创建一个新的哈希集并与 key 关联

HMGET (key) (field) (field1) (field2) ...
# 返回 key 指定的哈希集中指定字段的值。
# 对于哈希集中不存在的每个字段,返回 nil 值。因为不存在的keys被认为是一个空的哈希集,对一个不存在的 key 执行 HMGET 将返回一个只含有 nil 值的列表
# 返回 含有给定字段及其值的列表,并保持与请求相同的顺序。示例:
127.0.0.1:6379> hmset hash1 test1 ming test2 kai test3 ning
OK
127.0.0.1:6379> hmget hash1 test2 test1 test1
1) "kai"
2) "ming"
3) "ming"
127.0.0.1:6379> hmget hash1 test2 test1 test3
1) "kai"
2) "ming"
3) "ning"
127.0.0.1:6379> hmget hash1 test2 test3 test1
1) "kai"
2) "ning"
3) "ming"

HGETALL (key)
# 返回 key 指定的哈希集中所有的字段和值。返回值中,每个字段名的下一个是它的值,所以返回值的长度是哈希集大小的两倍

hdel (key) (field) (field1) (field2) ...
# 从 key 指定的哈希集中移除指定的域。在哈希集中不存在的域将被忽略。
# 如果 key 指定的哈希集不存在,它将被认为是一个空的哈希集,该命令将返回0。

hlen (key)
# 返回 key 指定的哈希集包含的字段的数量。

hexists (key)
# 返回hash里面field是否存在
# 返回值 1 hash里面包含该field。0 hash里面不包含该field或者key不存在。

HKEYS (key)
# 返回 key 指定的哈希集中所有字段的名字。

HVALS (key)
# 返回 key 指定的哈希集中所有字段的值。

hincrby (key) (field) (需要增长的值)
# 增加 key 指定的哈希集中指定字段的数值。如果 key 不存在,会创建一个新的哈希集并与 key 关联。如果字段不存在,则字段的值在该操作执行前被设置为 0
# HINCRBY 支持的值的范围限定在 64位 有符号整数

hsetnx (key) (field) (value)
# 只在 key 指定的哈希集中不存在指定的字段时,设置字段的值。如果 key 指定的哈希集不存在,会创建一个新的哈希集并与 key 关联。如果字段已存在,该操作无效果。
zset(有序集合)

ZADD key [NX|XX] [CH] [INCR] score member [score member ...]
# 将所有指定成员添加到键为key有序集合(sorted set)里面。 添加时可以指定多个分数/成员(score/member)对。 如果指定添加的成员已经是有序集合里面的成员,则会更新改成员的分数(scrore)并更新到正确的排序位置。
# 如果key不存在,将会创建一个新的有序集合(sorted set)并将分数/成员(score/member)对添加到有序集合,就像原来存在一个空的有序集合一样。如果key存在,但是类型不是有序集合,将会返回一个错误应答。
# 分数值是一个双精度的浮点型数字字符串。+inf和-inf都是有效值。
# ZADD 参数(options) (>= Redis 3.0.2)
# ZADD 命令在key后面分数/成员(score/member)对前面支持一些参数,他们是:
# XX: 仅仅更新存在的成员,不添加新成员。
# NX: 不更新存在的成员。只添加新成员。
# CH: 修改返回值为发生变化的成员总数,原始是返回新添加成员的总数 (CH 是 changed 的意思)。更改的元素是新添加的成员,已经存在的成员更新分数。 所以在命令中指定的成员有相同的分数将不被计算在内。注:在通常情况下,ZADD返回值只计算新添加成员的数量。
# INCR: 当ZADD指定这个选项时,成员的操作就等同ZINCRBY命令,对成员的分数进行递增操作。

ZRANGE key start stop [WITHSCORES]
# 给定范围内的元素列表(如果指定了WITHSCORES选项,将同时返回它们的得分)

ZRANGEBYSCORE (key) (min) (max) [WITHSCORES] [LIMIT offset count]
# 返回有序集合中指定分数区间内的成员,分数由低到高排序

ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
# 返回有序集合中指定分数区间内的成员,分数由高到低排序

ZREM (key) (member) (member1) (member2) ...
# 删除有序集合中的值

ZCARD (key)
# 返回key的有序集元素个数。

ZCOUNT key min max
返回有序集key中,score值在min和max之间(默认包括score值等于min或max)的成员数量。
geospatial(地理位置)

GEOADD (key) (longitude经度) (latitude纬度) (member名称) (longitude1经度) (latitude1纬度) (member1名称) (longitude2经度) (latitude2纬度) (member2名称) ...
# 将指定的地理空间位置(纬度、经度、名称)添加到指定的key中
# 有效的经度从-180度到180度。有效的纬度从-85.05112878度到85.05112878度。

GEODIST (key) (member1) (member2) (unit)
# 返回两个给定位置之间的距离。如果两个位置之间的其中一个不存在, 那么命令返回空值。
# unit 参数 必须是以下单位的其中一个
# m 表示单位为米。
# km 表示单位为千米。
# mi 表示单位为英里。
# ft 表示单位为英尺。

GEOHASH (key) (member) (member1) (member2) ...
# 返回一个或多个位置元素的 Geohash 表示。该命令将返回11个字符的Geohash字符串

GEOPOS (key) (member) (member1) (member2) ...
# 从key里返回所有给定位置元素的位置(经度和纬度)。
# 当给定的位置元素不存在时, 对应的数组项为空值。

GEORADIUS (key) (longitude经度) (latitude纬度) (radiuss数值) (m|km|ft|mi 单位) [WITHCOORD 经度和维度也显示] [WITHDIST 返回距离] [WITHHASH 返回geohash] [COUNT count 返回数量]
# 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。

GEORADIUSBYMEMBER (key) (member) (radius数值) (m|km|ft|mi) [WITHCOORD 经度和维度也显示] [WITHDIST 返回距离] [WITHHASH 返回geohash] [COUNT count 返回数量]
# 这个命令和 GEORADIUS 命令一样, 都可以找出位于指定范围内的元素, 但是 GEORADIUSBYMEMBER 的中心点是由给定的位置元素决定的, 而不是像 GEORADIUS 那样, 使用输入的经度和纬度来决定中心点
# 指定成员的位置被用作查询的中心。

geospatial 底层的实现原理其实就是 zset , 我们可以使用 zset 来操作 geospatial

 hyperloglogs 基数统计算法

PFADD (key) (element) (element1) (element2) ...
# 将除了第一个参数以外的参数存储到以第一个参数为变量名的HyperLogLog结构中.

PFCOUNT (key) (key1) (key2) ...
# 当参数为一个key时,返回存储在HyperLogLog结构体的该变量的近似基数,如果该变量不存在,则返回0.
# 当参数为多个key时,返回这些HyperLogLog并集的近似基数,这个值是将所给定的所有key的HyperLoglog结构合并到一个临时的HyperLogLog结构中计算而得到的.

PFMERGE (destkey 合并的key) (sourcekey 需要合并的key) (sourcekey1 需要合并的key) (sourcekey2 需要合并的key) ...
# 将多个 HyperLogLog 合并(merge)为一个 HyperLogLog , 合并后的 HyperLogLog 的基数接近于所有输入 HyperLogLog 的可见集合(observed set)的并集.

合并得出的 HyperLogLog 会被储存在目标变量(第一个参数)里面, 如果该键并不存在, 那么命令在执行之前, 会先为该键创建一个空的.
SETBIT key offset value
# 设置或者清空key的value(字符串)在offset处的bit值。value(只能是0或者1)

GETBIT key offset
# 返回key对应的string在offset处的bit值 当offset超出了字符串长度的时候,这个字符串就被假定为由0比特填充的连续空间。当key不存在的时候,它就认为是一个空字符串,所以offset总是超出范围,然后value也被认为是由0比特填充的连续空间。到内存分配。

bitcount key [start end]
# 统计字符串被设置为1的bit数.

redis事务

redis 事务本质:一组命令的集合,一个事务中的所有命令都会被序列化,在事务执行过程中,会按照顺序执行

一次性、顺序性、排他性,执行一些列的命令

------ 队列 set set set 执行 ---------

redis 事务没用隔离级别的概念

所有的命令在事务中,并没有直接被执行,只有发起执行命令的时候才会执行。

redis 单条命令是保证原子性的。但是事务不保证原子性

multi  # 开启事务
.....  # 命令入队
exec   # 执行事务
discard #放弃事务

redis事务,命令有问题时,全部都不会进行执行,如果是语法有问题,则会忽略这条命令继续执行其他的。

命令有问题时,举例,在写 set (key) (value) 命令时,你写错了,写成 sey  (key)  (value) ,根本就没用这个 sey 命令,所以这叫命令错误.

语法有问题,举例,当你使用 LSET (key) (index下标) (value) 命令时,这时候你的 key 不是一个 list 就会报错,这叫语法错误 

redis 乐观锁

watch 加乐观锁
unwatch 解锁

乐观锁的实现,必须基于WATCH,然后利用redis的事务。
WATCH生命周期,只是和事务关联的,一个事务执行完毕,相应的watch的生命周期即结束。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值