redis(5.0.3)常⽤命令整理(建议收藏)redis(5.0.3) 常⽤命令整理
数据结构互通redis五种数据结构
字符串可以直接输⼊,也可以⽤’'或者""括起来
基本操作
> CLEAR      # 清屏
> KEYS *    # 获取当前数据库所有的key
> EXISTS key    # 查看key是否存在,存在返回1、失败返回0
> config set requirepass 123456# 设置密码为123456
> auth 123456# 使⽤123456登录,登录成功后可以正常执⾏命令
五⼤数据类型
String
> SET key value    # 设置key-value,若存在则覆盖
> GET key    # 获取key对应的value
> APPEND key value    # 追加value,返回追加后的长度,key不存在则相当于SET
> STRLEN key    # 查看key长度
> GETRANGE key 0 -1  # 截取[0,-1]的字符串(闭区间)
> SETRANGE key 2 abc  # 从下标2开始的字符串依次替换为abc
> INCR key    # ⾃增1
> DECR key    # ⾃减1
> INCRBY key 10# ⾃增10
> DECRBY key 10# ⾃减10
> setex key 10 value  # 设置value 10s后过期
> setnx key value  # 设置成功返回1、失败返回0
> MSET k1 v1 k2 v2  # 批量SET
> MGET k1 k2 k3 k4  # 批量GET
> MSETNX k1 v1 k2 v2  # 批量SETNX,有⼀个key存在即失败,其他k-v设置均⽆效
> SET user:1:name jack  # 对象设计模式例⼦
> SET user:1:age 21
> GETSET key kv value  # 先get再set,返回先get的值
List
# 类似栈数据结构,操作为进栈出栈
> LPUSH list v1 v2 v3  # 依次从列表list左边插⼊⼀个或多个值
> LPOP  list    # 依次从列表list左边移除第⼀个值,返回这个值
> RPUSH list v1 v2 v3  # 依次从列表list右边插⼊⼀个或多个值
> RPOP  list    # 依次从列表list右边移除第⼀个值,返回这个值
> LLEN list    # 返回列表list长度
> LINDEX list 2# 通过下标索引列表list中的某个值
> LRANGE list 0 -1  # 查看列表list的[0,-1]的value
> LREM list 2 v1  # 删除列表list中的两个值v1(列表元素可以重复)
> LTRIM list 24# 截取列表list下标[2,4]部分,并保存在list中
> RPOPLPUSH list list2  # 移除列表list中最右边的元素,并将其添加到列表list2最左边
> LSET list 0 v2  # 将列表list下标为0的元素内容更新为v2,下标元素需存在
> LINSERT list BEFORE v1 v2 # 在列表list中的最左边的v1前⾯插⼊v2
> LINSERT list AFTER v1 v2 # 在列表list中的最左边的v1后⾯插⼊v2
Set
# 添加、查看、删除
> SADD myset value  # 给集合myset添加新元素value,集合不存在则创建
> SMEMBERS myset  # 查看集合myset中的元素
> SRANDMEMBER myset  # 随机返回集合中的⼀个元素
> SISMEMBERS myset v1  # 判断集合myset中是否存在元素v1,存在返回1,否则返回0
> SCARD myset    # 查看集合myset长度
> SREM myset v2    # 移除集合myset中的v2元素,成功返回1,失败返回0
> SMOVE myset1 myset2 value # 把集合myset1中的value元素移动到集合myset2中
> SDIFF A1 A2    # 对于集合A1、A2,返回A1-(A1∩A2)
> SINTER mset1 mset2  # 返回集合mset1和集合mset2的交集
> SUNION mset1 mset2  # 返回集合mset1和集合mset2的并集
Hash
Map 集合,key-map,和 String 类型⼀样,只是套了⼀层娃。
> HSET myhash key1 value1 # 创建⼀个map集合myhash,后⾯跟key-value 存在myhash中> HGET myhash key1  # 获取myhash中的key1对应的值
> HKEYS myhash    # 获取myhash中所有的key
> HDEL myhash k1 k2  # 删除myhash中的k1 k2
> HLEN myhash    # 返回myhash中key的数量
> HEXISTS myhash key1  # 判断myhash中key1是否存在,存在返回1,失败返回0
> HMSET myhash k1 v1 k2 v2 # ⼀次性在myhash中创建多组key-value (HSET也可以)
> HMGET myhash k1 k2 k3  # ⼀次获取myhash中多个key对应的value
> HGETALL myhash  # 获取myhash中的全部key-value
......
# String中有的⽅法 Hash 中都可以⽤,在String的命令前⾯加个H即可。
Zset
在集合Set类型上添加⼀个值score作为索引,使其可以有序。
> ZADD myzset 1 v1 2 v2    # 在集合myzset中添加两个元素1、2为score
> ZREM myzset v1 v2    # 删除有序集合myzset中的v1、v2元素
> ZRANGE myzset 0 -1    # 按下标查看myzset中的元素
> ZCARD myzset      # 获取有序集合myzset元素个数
> ZCOUNT myzset 13# 返回索引在[1,3]中的元素的数量
> ZRANGEBYSCORE mzs -inf +inf  # 按score正序排序
> ZREVRANGEBYSCORE mzs +inf -inf # 按score逆序排序
.
.....
# 同样集合Set的命令在有序集合Zset中也适⽤,需将命令开头的S换为Z
三种特殊数据类型
geospatial 地理位置
底层为Zset类型,可使⽤Zset类型对应命令
# 给key添加⼀个成员value1以及它的经纬度
> GEOADD key [Longitude](经度)[Latitude](纬度) value1 ...
# 返回key中value1、value2成员的经纬度
> GEOPOS key value1 value2 ...
# 返回成员value1与value2之间的距离,后⾯跟单位参数
> GEODIST key value1 value2 km(m/km/ft/mi)
# 将key中value1成员的[⼆维]经纬度信息转化为11个字符的[⼀维]Geohash字符串
> GEOHASH key value1 ...
# 返回经纬度(117,39)为中⼼,返回半径1000km内的成员
> GEORADIUS 117391000 km()
# 返回key中value1成员⽅圆1000km以内的所有成员(包括⾃⼰)
> GEORADIUSBYMEMBER key value1 1000 km
GEOHASH 的算法(⼀维数据 ⽅便⽐较)
1、将经纬度转化为⼆进制
2、经度占偶数位,纬度占奇数位,经纬度合并
3、使⽤Base32进⾏编码
Hyperloglog
⽤来统计基数数量,有微⼩误差
基数:⼀个集合中不重复元素的数量
> PFADD key1 a b c d e c  # 创建⼀组元素key1
> PFCOUNT key1    # 返回key1元素中基数数量
> PFMERGE key3 key1 key2  # 将合并集合key1、key2到key3中
Bitmap
位图,位存储、⼆进制存储,多⽤于两个状态的数据,通过操作⼆进制来记录数据。
打卡、未打卡,可以记录为:0 1 0 0 1 1 1 0 1 1 0 1
# 模拟记录打卡,周⼀⾄周五,周三周四未打卡如下所⽰
> SETBIT sign 01
> SETBIT sign 11
> SETBIT sign 20
> SETBIT sign 30
> SETBIT sign 41
> GETBIT sign 0# 查看周⼀的值
> BITCOUNT sign    # 统计sign中有多少个1
事务(Transactions)
ACID特性:事务具有4个特征,分别是
原⼦性(atomicity)
⼀致性(consistency)
隔离性(isolation)
持久性(durability)
Redis单个命令有原⼦性,但redis的事务不保证原⼦性
Redis事务本质:⼀组命令的集合,⼀个事务中的所有命令都会被序列化,在事务执⾏过程中,会按照顺序执⾏(类似队列),所有的事务只有在发起执⾏命令的时候才会执⾏。
⼀次性、顺序性、排他性
Redis事务
> MULTI    # 开启事务
# 命令⼊队
>set k1 v1
>set k2 v2
> get k2
>set k2 v22
> get k2
> EXEC    # 执⾏事务,命令执⾏后⼀次性执⾏完⼊队的命令
> DISCARD    # 放弃事务,所有⼊队的命令全部⽆效
两种异常情况
语法错误异常
对于语法错误的异常,redis事务处理将会保留原⼦性,有⼀个命令出错,所有命令全部⽆效
逻辑错误异常
对于逻辑错误的异常,如对⼀个空值加⼀,redis事务不保留原⼦性,错误的命令抛出异常,⽆误命令的正常执⾏
监控锁机制
乐观锁
感觉⼀直没问题,做啥都不加锁,更新数据的时候会去判断数据是否被修改
> WATCH key1    # 监视key1(监控key1的值),如果事务执⾏期间,数据没有改动,则事务正常执⾏,否则事务执⾏失败
> UNWATCH    # 解除监视,如果事务⽆论是否正常结束都会⾃动解锁,unwatch为⼿动解锁
悲观锁
感觉随时会有问题,⼲啥都会加锁如setnx
发布订阅
> SUBSCRIBE Gssl    # 订阅Gssl频道,执⾏后开始监听
> PUBLISH Gssl "Hello World"# 想Gssl频道发送消息"Hello World"
> PUBSUB CHANNELS    # 查看活跃的订阅列表
> PUBSUB NUMPAT Gssl  # 查看频道Gssl的订阅个数
> UNSUBSCRIBE Gssl    # 退订Gssl频道
> PUNSUBSCRIBE Gs*sl  # 退订指定模式的频道(可以⽤通配符)
> PSUBSCRIBE Gs*sl    # 指定模式订阅,订阅Gs开头sl结尾的频道,通过通配符实现?、*、[(⼀些字符)]主从复制
192.168.31.111:6379> info replication # 查看信息
# Replication
role:master    # 主机
connected_slaves:0
master_replid:ad307af8d700c4372d730b57d577ef43934120c6
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
从机需要修改配置⽂件:port、pidfile、logfile、dbfilename
192.168.31.111:6381> SLAVEOF 192.168.31.111 6379# 设置主机
OK
192.168.31.111:6381> info replication
# Replication
role:slave  # 从机
master_host:192.168.31.111
master_port:6379
master_link_status:up
master_last_io_seconds_ago:4
master_sync_in_progress:0
slave_repl_offset:0
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:53f77b52129d0dce6f262283a3ca415c031fdef0
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:0

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。