String | |
---|---|
set key value | 存值 |
get key | 取值 |
select db | 选择数据库(16个) |
DBSIZE | 查看当前数据库的大小 |
FLUSHALL | 清空全部数据库 |
flushdb | 清空当前数据库 |
keys * | 查看所有的key |
EXISTS key | 判断key是否存在 |
move key 当前数据库 | 从当前数据库移除key |
EXPIRE key time | 设置key的存在时间,单位为秒 |
ttl key | 查看这个key的存活时间 |
type key | 查看key的数据类型 |
APPEND key value | 先key后面追加值,如果不存在,就相当于set key 值 |
STRLEN key | 获取key的字符串的长度 |
incr key | 每执行一次,key加一,自增一 |
decr key | 每执行一次,key减一,自减一 |
inceby key num | 每执行一次,key加num |
decrby key num | 每执行一次,key减num |
GETRANGE key num1 num2 | 获取key值的第num1到num2的值,截取字符串 |
GETRANGE key 0 -1 | 查看key全部的字符串,等同与get key |
SETRANGE key num value | 修改key的值,从num(起始位为0)开始,将后面的替换为后面输入的值 |
setex key time value | 设置key的值且设置多少时间后过期 |
setnx key value | 如果key不存在,则创建并赋值,如果key存在,创建失败 |
mset k1 v1 k2 v2 k3 v3... | 同时设置多个值 |
mget k1 k2 k3 .... | 同时取多个值 |
metnx k1 v1 k4 v4 | k1已经存在,k4不存在,但是返回0,操作失败,即这是一个原子性操作 |
mset user:1:name lzx user:1:age 21 | 设置一个user:1对象,并有name和age两个key,且为其赋值(可以实现key(name,age)的复用) |
mget user:1:name user:1:age | 取出user:1对象中name和age的值 |
getset key value | 先get这个key,如果是空值则返回nil,,如果存在值,则返回这个值,随后为其赋值 |
LIST | L开头 |
lpush key value1 | 向key这个list集合里赋值 |
lrange key num1 num2 | 在key这个list集合中,取出num1到num2的值,通过区间取值 |
lpush | 先进后出,头插法 |
rpush | 先进先出,尾插法 |
lpop | 移除集合的第一个元素 |
rpop | 移除集合的最后一个元素 |
lindex key num | 获取集合的第num个值(起始下标为0) |
llen key | 获取集合的长度 |
lrem key num value | 移除集合中值为value的值,并指定移num个(从下标0开始) |
ltrim key num1 num2 | 截取集合中下标从num1到num2的值(集合只剩下截取的值) |
rpoplpush key1 key2 | 移除key1中的最后一个元素,并将其放到key2中 |
lset key num value | 将key集合中下标为num的值更新为value,不存在报错 |
linsert key before/after value1 value2 | 向key集合中的value1元素的before/after插入value2 |
Set(不能重复,无序) | S开头 |
sadd key value | 向set集合中添加值(不能插入重复的) |
smembers key | 查看set集合所有的值 |
sismember key value | 判断key集合中是否含有value这个值 |
scard key | 获取set集合key中元素的个数 |
srem key value | 移除set集合key中值为value的元素 |
srandmember key count | 获取set集合key中随机count个值,不加count默认为1 |
spop key count | 随机移除key中的元素,count表示要移除的个数,默认为1 |
smove key1 key2 value | 将key1中的元素value移动到key2中 |
sdiff key1 key2... | (差集)比较key1中,key2集合没有的值,并将其返回,顺序互换,返回的值比一定相同(可以比较多个集合) |
sinter key1 key2... | (交集)返回两个集合中中共同拥有的元素,可以交换顺序,(可以比较多个集合) |
sunion key1 key2... | (并集)返回两个集合的并集(可以合并多个) |
Hash Map集合 | key-map(key-<k v>),存的是map集合(k不能重复) |
hset key map<k v> | 设置一个key键,里面存储一个map集合,即在一个key键中,可以存储任意对map集合,前提是k不能重复 |
hget key k | 取出key键中,k对应map集合的值v |
hmset key <k v> <k1 v>... | 存储多个值,可以覆盖 |
hmget key k k1 k2... | 获取多个值 |
hgetall key | 获取key中的所有键值对 |
hdel key k | 删除hash指定的k键值对 |
hlen key | 获取hash集合中key里面的键值对数量 |
hexists key k | 判断hash集合key中k这个键值对是否存在 |
hkeys key | 显示hash集合中key的所有map集合的k值 |
hvals keyh | 显示hash集合中key的所有map集合的v值 |
hincrby key k num | 对hash集合中key里面的k对应的键值对的值v进行加法,加num |
hdecrby key k num | 对hash集合中key里面的k对应的键值对的值v进行减法,减num |
hsetnx key k v | 如果hash集合中key存在kv这个键值对,则创建失败,否则创建一个(k对应即可) |
Zset(有序集合) | |
zadd key 序列 value | 添加一个元素(添加相同序列的值时,往那个序列后添加,后面的值向后移) |
zrange key num1 num2 | 查看set集合key中区间的值 |
zrangebyscore key -inf +inf | 从小到大排序(默认zrange key 0 -1就已经排好序了) |
zrangebtscore key -inf +inf withscores | 带值从小到大进行排序 |
zrangebyscore key -inf num withscores | 将num以下的元素带值从小到大排序 |
zrevrange key 0 -1 withscores | 带值从大到小进行排序 |
zrevrangebyscore key +inf num withscores | 将num以上的元素带值从大到小排序 |
zrem key value | 移除元素 |
zcard key | 查询有序集合中key的元素个数 |
zcount key num1 num2 | 获取值在num1到num2之间的元素的数量 |
geospatial地理位置 | 底层的实现原理就是Zset,可以使用Zset的命令来操作geo |
geoadd key value(纬度,经度,名称) | 添加一个值 |
geopos key value | 查找 |
geodist key value1 value2 (km) | 两个value之间的距离,单位为米,后面可以追加单位 |
georadius key 自身位置 半径 whihdist withcoord count | 获得周围的人的数量,限定数量count |
georadiusbymember value 半径 | 查询以value为中心一定半径内的成员 |
geohash key value | 将二维的经纬度转换为一维的字符串 |
Hyperloglog | 基数(不重复的值)统计的算法,有容错 |
pfadd key value1 value2... | 存值 |
pfcount key | 计算key 中不重复的值的个数 |
pfmerge key key1 key2 | 将key1和key2合并成key |
Bitmaps (位储存) | 适用于(活跃,不活跃)(登录,未登录)(打卡,未打卡)两个状态的(只有0和1)都可以使用Bitmaps |
setbit key value 0/1 | 给key中的value设置0或1状态 |
getbit key value | 查看key中value的状态 |
bitcount key | 统计key中状态为1的数量 |
事务 | 单条命令保证原子性,但是事务不保证原子性 |
multi | 开启事务 |
exec | 执行事务 |
discard | 取消事务 |
监控 | watch 乐观锁 |
悲观锁 | 很悲观,什么时候都能会出问题,无论做什么都要加锁 |
乐观锁 | 很乐观,认为什么时候都能会出问题,所以不会上锁,更新数据的时候判断一下,在此期间是否有人修改过数据,比较version |
测试:1,对一个数据进行监控watch value | 2,开启事务,对value进行修改操作 |
3,再开启体格客户端,模拟多线程操作 | 4,在新的客户端中修改value的值 |
5,在将原来的客户端的事务执行 | 6,返回inil,操作失败 |
unwatch | 放弃监视,然后在重新监视 |
Redis所有类型的常用命令
最新推荐文章于 2024-08-16 21:46:31 发布