高等院校网站建设方案,临沂展厅设计公司,justhost wordpress,大连公司目录
一、字符串命令#xff1a;
二、列表命令#xff1a;
三、集合命令#xff1a;
四、散列命令#xff1a;
五、有序集合命令#xff1a;
六、redis发布与订阅命令#xff1a;
七、事务命令 八、其他命令
1、排序#xff1a;SORT
2、键的过期时间#xff…目录
一、字符串命令
二、列表命令
三、集合命令
四、散列命令
五、有序集合命令
六、redis发布与订阅命令
七、事务命令 八、其他命令
1、排序SORT
2、键的过期时间
九、地理位置查询 命令官网Commands | Redis
一、字符串命令
1、字符串基本操作
1SET执行成功时返回OK
2GET获取value值
3DEL返回被成功删除的值的数量 4strlen,exists,,,setexexpire key 60ttl key 【设置过期时间查看指定key的过期时间】 等等;
2、自增自减 如果一个值可以被解释为十进制整数或者浮点数redis允许用户对这个字符串进行INCR*、DECR*操作。
1INCR key将键存储的值的值加1。
2DECR key将键存储的值减1。
3INCRBY key increment将键存储的值加上整数 increment。
4DECRBY key decrement将键存储的值减去整数 decrement。
5INCRBYFLOAT key decrement将键存储的值加上浮点数decrement。这个命令在redis2.6及以上可以使用。
127.0.0.1:6379 set age 1
OK
127.0.0.1:6379 INCR age
(integer) 2
127.0.0.1:6379 get age
2
127.0.0.1:6379 DECR age
(integer) 1
127.0.0.1:6379 get age
1
127.0.0.1:6379 INCRBY age 3
(integer) 4
127.0.0.1:6379 get age
4
127.0.0.1:6379 DECRBY age 1
(integer) 3
127.0.0.1:6379
3、处理子串和二进制位
1APPEND
2GETRANGE
3SETRANGE
4GETBIT
5SETBIT
6BITCOUNT
7BITOP
二、列表命令
1、基础命令
1LPUSH 命令在 列表 的左侧添加元素成功返回当前列表的长度。
127.0.0.1:6379 lpush key java
(integer) 1 LPUSH 一次可以给 key 添加多个 value
127.0.0.1:6379 lpush key python php c
(integer) 4 2RPUSH 命令将元素推入列表的右端用法和 lpush 相同。
127.0.0.1:6379 rpush key rust
(integer) 6
127.0.0.1:6379 rpush key asm scala
(integer) 8
3LPOP 命令从列表的左端弹出元素
4RPOP命令从列表的右端弹出元素
5llen 命令 返回列表的当前长度
127.0.0.1:6379 llen key
(integer) 8
6LINDEX 命令 获取列表在给定位置上的一个元素
127.0.0.1:6379 lindex key 1
python
7LRANGE 命令 获取列表在给定范围内的所有元素
127.0.0.1:6379 lrange key 0 3
1) c
2) c
3) php
4) python
8ltrim 命令用于截取列表内元素
127.0.0.1:6379 ltrim key 0 5
OK
127.0.0.1:6379 lrange key 0 -1
1) c
2) c
3) php
4) python
5) java
6) rust
2、阻塞式命令这组命令常用于消息传递、任务队列。
1blpop 命令从第一个非空列表中弹出位于最左端的元素或者在timeout秒之内阻塞并等待可弹出的元素出现。
blpop key [key ...] timeout
demo同时开两个 Redis 的客户端然后在客户端一输入如下命令
#在 key1 和 key2 列表中弹出一个值如果两个列表都为空则阻塞 5 秒因为现在 key1 和 key2 都为空因此 blpop 阻塞了 5 秒。
127.0.0.1:6379 blpop key1 key2 5
(nil)
(5.06s)
再次在客户端一输入如下命令
127.0.0.1:6379 blpop key1 key2 20 由于 key1 和 key2 同样什么都没有因此 blpop 命令进入 20 秒的阻塞状态此时我们在客户端二输入如下命令
127.0.0.1:6379 lpush key1 java
(integer) 1
观察客户端一客户端一输出如下
1) key1
2) java
(9.51s)
也就是客户端一的 blpop 阻塞了 9.51 秒 以后 key1 列表弹出一个值 java。
2brpop 命令 从第一个非空列表中弹出位于最右端的元素或者在timeout秒之内阻塞并等待可弹出的元素出现。
3rpoplpush 命令
4brpoplpush 命令
三、集合命令
1、基本命令
1SADD将元素添加到集合
2SREM从集合中移除元素
3SISMEMBER检查一个元素是否存在于集合中
4SCARD
5SMEMBERS获取集合包含的所有元素谨慎使用如果数据量大会很慢
6SRANDMEMBER
7SPOP
8SMOVE 2、用于组合和处理多个集合的redis命令
1SDIFF
2SDIFFSTORE
3SINTER
4SINTERSTORE
5SUNION
6SUNIONSTORE
四、散列命令
1、基本命令
1HSET在散列里面关联起给定的键值对
2HGET获取指定散列键的值
3HGETALL获取散列包含的所有键值对
4HDEL如果给定键存在于散列里面则移除这个键。
5HLEN返回散列包含的键值对数量 2、其他命令
1HMSET同时将多个 field-value (域-值)对设置到哈希表 key 中。此命令会覆盖哈希表中已存在的域。如果 key 不存在一个空哈希表被创建并执行 hmset 操作。如果命令执行成功返回 OK 。当 key 不是哈希表(hash)类型时返回一个错误。
注意在官方文档中关于hmset的描述如下As per Redis 4.0.0, HMSET is considered deprecated. Please use HSET in new code.根据Redis 4.0.0HMSET被视为已弃用。请在新代码中使用HSET。
hmset key field value [field value …]
2 HMGET按照给出顺序返回哈希表 key 中一个或多个域的值。如果给定的域不存在于哈希表那么返回一个 nil 值。因为不存在的 key 被当作一个空哈希表来处理所以对一个不存在的 key 进行 hmget 操作将返回一个只带有 nil 值的表。
hmget key field [field …]
3 HEXISTS查看哈希表 key 中给定域 field 是否存在。如果哈希表含有给定域返回 1 。如果不含有给定域或 key 不存在返回 0 。
hexists key field
4HKEYS与 hvals 返回哈希表 key 中的所有域/值。当 key 不存在时返回一个空表。尽管有HGETALL存在当散列包含的值非常大时可以像遍历HashMap一样先HKEYS取出所有的key再根据key使用HGET一个个获取键值避免一次获取多个大体积的值导致服务器阻塞。
[ hkeys / hvals ] key 5hincrby 与 hincrbyfloat为哈希表 key 中的域 field 的值加上增量 increment 。hincrby 命令只能增加整数值而 hincrbyfloat 可以增加小数值。增量也可以为负数相当于对给定域进行减法操作。如果 key 不存在一个新的哈希表被创建并执行 hincrby 命令。如果域 field 不存在那么在执行命令前域的值被初始化为 0。对一个储存字符串值的域 field 执行 HINCRBY 命令将造成一个错误。
[ hincrby / hincrbyfloat ] key field increment
五、有序集合命令
1、基本命令
1ZADD将一个带有给定分值的成员添加到有序集合里面
2ZREM如果给定成员存在于有序集合则移除这个成员
3zcard获取有序集合包含的成员数量 ZCARD key
4 ZINCRBY 对有序集合中指定成员的分值执行自增操作为其加上指定的增量可以是负数。 ZINCRBY key increment member
5ZCOUNT 统计出有序集合中分值介于指定范围之内的成员数量
ZCOUNT key min max 6ZSCORE 获取与给定成员相关联的分值
ZSCORE key member 2、范围查询、交并集等
1zrank/zrevrank获得成员的升序排列 / 降序排列排名 ZRANK key member
2zrange/zrevrange
zrange sorted_set start end: 获取正序排列排名[start,end]范围内的元素zrevrange sorted_set start end: 获取逆序排列排名[start,end]范围内的元素 ZREVRANGE key start stop [WITHSCORES]
3zrangebyscore / zrevrangebyscore zrangebyscore sorted_set min max: 获取分数在[min,max]内的成员 zrevrangebyscore sorted_set max min: 获取分数在[max,min]内的成员 min参数和max参数分别用于指定用户想要获取的成员的最小分值和最大分值
4ZREMRANGEBYRANK 从升序排列的有序集合中移除位于指定排名范围内的成员然后返回被移除成员的数量 ZREMRANGEBYRANK key start stop
5zremrangebyscore
zremrangebyscore sorted_set min max
从有序集合中移除位于指定分值范围内的成员并在移除操作执行完毕返回被移除成员的数量
6ZINTERSTORE number个有序集合的并集并集存储到destination中。destination的成员为共同的keyscore为各个score的总和\最小\最大默认为总和。
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
127.0.0.1:6379 ZADD dbs 1 bj
(integer) 1
127.0.0.1:6379 ZADD dbs 2 tj
(integer) 1
127.0.0.1:6379 ZADD dbs 3 ah
(integer) 1127.0.0.1:6379 ZADD centers 1 bj
(integer) 1
127.0.0.1:6379 ZADD centers 3 ah1
(integer) 1127.0.0.1:6379 ZINTERSTORE thesame 2 dbs centers
(integer) 1
127.0.0.1:6379 ZRANGE thesame 0 -1 withscores
1) bj
2) 2
127.0.0.1:6379 ZRANGE dbs 0 -1 withscores
1) bj
2) 1
3) tj
4) 2
5) ah
6) 3
127.0.0.1:6379 ZRANGE centers 0 -1 withscores
1) bj
2) 1
3) ah1
4) 3
127.0.0.1:6379 7zunionstorenumber个有序集合的交集交集存储到destination中
六、redis发布与订阅命令
1、SUBSCRIBE 订阅给定的一个或多个频道
SUBSCRIBE channel [channel1 channel2 ······ ]
2、UNSUBSCRIBE Redis 客户端退订指定的一个或多个频道。如果没有频道被指定也就是一个无参数的 UNSUBSCRIBE 命令被执行那么客户端使用 SUBSCRIBE 命令订阅的所有频道都会被退订。
UNSUBSCRIBE channel [channel1 channel2 ······ ]
3、PUBLISH 向给定频道发送消息返回值为接收到该消息的订阅者数量。
PUBLISH channel message
4、PSUBSCRIBE
1功能订阅一个或多个符合给定模式的频道。
PSUBSCRIBE pattern [pattern1 pattern2 ······ ]
2说明这里的模式可以是全局通配符 * 也可以使用选择匹配符 [ ]。例如news.* 模式可以匹配所有以 news 开头的频道像 news.music、news.blog、news.sport 等而 news.[ie]t 模式则可以匹配news.it频道和news.et频道。 3demo
5、PUNSUBSCRIBE
1功能退订一个或多个符合给定模式的频道。
PUNSUBSCRIBE pattern [pattern1 pattern2 ······ ]
2说明这里的模式可以是全局通配符 * 也可以使用选择匹配符 [ ]。如果没有频道被指定其效果与 SUBSCRIBE 命令相同客户端将退订所有订阅的频道。
****************************查看发布与订阅的相关信息*************************
6、PUBSUB CHANNELS列出当前所有的活跃频道。活跃频道指的是那些至少有一个订阅者的频道。pattern 参数是可选的。如果不给出 pattern 参数将会列出订阅/发布系统中的所有活跃频道。如果给出 pattern 参数那么只列出和给定模式 pattern 相匹配的那些活跃频道。
PUBSUB CHANNELS [pattern]
7、PUBSUB NUMSUB 返回给定频道的订阅者数量。不给定任何频道则返回一个空列表。
PUBSUB NUMSUB [channel1 channel2 ······ ]
8、PUBSUB NUMPAT 查询当前 Redis 所有客户端订阅的所有频道模式的数量总和。
七、事务命令
1、介绍 Redis事务的本质是一组命令的集合一个事务中所有命令会按照顺序串行化执行队列中的命令其他客户端提交的命令请求不会插入到事务执行命令序列中。Redis有5个命令可以让用户在不被打断的情况下对多个键执行操作。事务执行的三个阶段
1) 以 MULTI 开始一个事务2)入队将多个命令入队到事务中接到这些命令并不会立即执行而是放到等待执行的事务队列里面3)执行由 EXEC 命令触发事务。
2、命令
命令描述MULTI开启事务redis会将后续的命令逐个放入队列中然后使用EXEC命令来原子化执行这个命令系列EXEC执行事务中的所有操作命令DISCARD取消事务放弃执行事务块中的所有命令WATCH监视一个或多个key,如果事务在执行前这个key(或多个key)被其他命令修改则事务被中断不会执行事务中的任何命令上乐观锁UNWATCH取消WATCH对所有key的监视但是需要注意的是每次提交执行EXEC后都会自动释放锁不管是否成功所以UNWATCH无需在EXEC后执行
# 标准事务执行
127.0.0.1:6379 MULTI # 开启事务
OK
127.0.0.1:6379 set k1 hello # 命令入队
QUEUED
127.0.0.1:6379 set k2 redis # 命令入队
QUEUED
127.0.0.1:6379 EXEC # 执行事务
1) OK
2) OK
127.0.0.1:6379 get k1 # 验证是否执行
hello
127.0.0.1:6379 get k2
redis# 事务取消
127.0.0.1:6379 MULTI # 开始事务
OK
127.0.0.1:6379 set k3 test1
QUEUED
127.0.0.1:6379 set k4 test2
QUEUED
127.0.0.1:6379 DISCARD # 取消事务
OK
127.0.0.1:6379 EXEC # 因为事务被取消了所以执行报错
(error) ERR EXEC without MULTI# 事务出现从错误处理
# 1、语法错误编译器错误
# 语法错误会使得事务提交失败数据恢复原样
127.0.0.1:6379 MULTI # 开启事务
OK
127.0.0.1:6379 set k1 11
QUEUED
127.0.0.1:6379 set k2 22
QUEUED
127.0.0.1:6379 error k3 33 # 执行一条错误的命令
(error) ERR unknown command error, with args beginning with: k3, 33,
127.0.0.1:6379 exec # 执行事务报错命令皆未执行
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379 get k1 # 验证是否执行
hello # 值未变
127.0.0.1:6379 get k2
redis# 2、类型错误运行时错误
# 触发运行时错误时事务将会跳过错误的命令继续执行其他正常的命令可以被执行成功
# 此处可以说明Redis单条指令保证原子性但是Redis事务不能保证原子性
127.0.0.1:6379 MULTI # 开启事务
OK
127.0.0.1:6379 set k1 11
QUEUED
127.0.0.1:6379 INCR k2 # 类型错误对string类型进行自增操作
QUEUED
127.0.0.1:6379 get k2
QUEUED
127.0.0.1:6379 EXEC # 执行事务可以发现虽然第二条命令报错了但是其他的命令正常执行了
1) OK
2) (error) ERR value is not an integer or out of range
3) redis
127.0.0.1:6379 get k1 # 获取k1的值为事务中修改后的值
11
3、Watch监控使用watch key监控指定数据相当于乐观锁加锁其执行流程如下 # 正常执行
127.0.0.1:6379 set money 100 # 设置初始金额
OK
127.0.0.1:6379 set use 0 # 设置已消费金额
OK
127.0.0.1:6379 WATCH money # 监控money相当于给money上锁
OK
127.0.0.1:6379 MULTI # 开启事务
OK
127.0.0.1:6379 DECRBY money 20 # 消费20初始金额-20
QUEUED
127.0.0.1:6379 INCRBY use 20 # 消费金额20
QUEUED
127.0.0.1:6379 EXEC # 执行事务正常无报错
1) (integer) 80
2) (integer) 20# 模拟多线程修改值
# 开启两个Xshell客户端连接同一个redis
# 在第一个客户端1开始操作
127.0.0.1:6379 WATCH money
OK
127.0.0.1:6379 MULTI
OK
127.0.0.1:6379 DECRBY money 20
QUEUED
127.0.0.1:6379 INCRBY use 20
QUEUED
127.0.0.1:6379 # 执行到此处停止操作模拟另一个线程修改数据切换到另一个客户端2127.0.0.1:6379 INCRBY money 500 # 操作money改变其值500
(integer) 580
127.0.0.1:6379 # 无需再操作切回客户端1执行事务127.0.0.1:6379 EXEC # 发现事务执行返回空即所有命令都未执行
(nil)
127.0.0.1:6379 get money # 查询money发现和客户端2增加后的值一致说明客户端1后来的事务并未执行
580
127.0.0.1:6379 get use # 同理
20 八、其他命令
1、排序SORT
1介绍是Redis中唯一一个可以同时处理3种不同类型结构的命令当然Redis事务也可以在一连串不间断执行的命令里操作不同类型的数据。
2功能 可以实现以下功能
根据降序而不是默认的升序来排列元素
将元素看做是数字、或者将元素看做是二进制字符串来排序
使用被排序元素之外的其他值作为权重来排序还可以从输入的列表、集合、有序集合以外的其他地方进行取值。
返回或保存给定列表、集合、有序集合key中经过排序的元素。 排序默认以数字作为对象值被解释为双精度浮点数然后进行比较。 SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination]
2、键的过期时间
1EXPIRE 设置键的过期时间 EXPIRE key seconds
注意对于列表、集合、散列、有序集合这样的容器只能为整个键设置过期时间无法为键里面某个元素设置过期时间可以通过存储时间戳的有序集合来实现针对单个元素的过期操作。
作用为缓存清理key降低内存占用原子性操作。
2TTL
3PTTL这个命令在Redis2.6或以上版本可用
4PERSIST
5EXPIREAT
EXPIREAT key timestamp
6PEXPIRE 这个命令在Redis2.6或以上版本可用 PEXPIRE key milliseconds
7PEXPIREAT 这个命令在Redis2.6或以上版本可用 PEXPIREAT key milliseconds-timestamp
九、地理位置查询
1、介绍Redis的GEO操作是一种基于地理位置信息进行操作的功能。它使用经度和纬度坐标来表示地理位置支持存储地理位置信息用来实现诸如附近位置、摇一摇这类依赖于地理位置信息的功能。
2、应用场景
1地理围栏通过设置地理位置的经纬度信息可以将用户或者车辆等实体绑定在地理围栏内当实体进出围栏时可以触发相应的事件。
2附近的人在类似于约会、社交、旅游等场景下可以通过Redis GEO快速查询周围的人员或景点。
3配送服务通过获取配送地址的经纬度信息可以找到距离最近的配送员或仓库并对订单进行分配。
4地址查找在地图应用中可以通过Redis GEO快速查询某个地址周围的商家或服务设施。
动态信息在滴滴、Uber等打车应用中可以实时更新车辆的位置信息以提供更加准确的车辆推荐和路线规划服务
2、命令
1GEOADD添加位置信息将一个或多个指定的地理位置经度、纬度、名称添加到指定的键中。GEOADD命令对于经纬度是有要求的
有效的经度从-180度到180度 有效的纬度从-85.05112878度到85.05112878度
GEOADD key longitude latitude member [longitude latitude member ...]如
GEOADD cities 116.4074 39.9042 Beijing 121.4737 31.2304 Shanghai 113.2644 23.1291 Guangzhou2GEODIST查询距离返回两个位置之间的距离。可以选择以米或千米为单位。
GEODIST key member1 member2 [unit]可选参数unit用于指定计算距离时的单位
m 表示单位为米
km 表示单位为千米
mi 表示单位为英里
ft 表示单位为英尺查询北京和上海之间的距离单位为千米
GEODIST cities Beijing Shanghai km3GEOHASH获取指定位置的Geohash值返回一个或多个位置的Geohash值该值用于对地理位置进行更快速的范围查找。
GEOHASH key member [member ...]如 获取北京的Geohash值
GEOHASH cities Beijing4GEOPOS查询地理位置坐标返回一个或多个位置的经度和纬度。
GEOPOS key member [member ...]如 查询广州的经纬度
GEOPOS cities Guangzhou5GEORADIUS查找指定范围内的元素查询给定坐标范围内的所有元素。可以通过设置排序选项来获取按距离排序的结果。
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [ASC|DESC] [COUNT count]如 查找距离北京1000公里以内的城市并按距离升序排列
GEORADIUS cities 116.4074 39.9042 1000 km ASC6GEORADIUSBYMEMBER查询给定成员周围的所有元素查询给定成员周围的所有元素。可以通过设置排序选项来获取按距离排序的结果。
GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [ASC|DESC] [COUNT count]如 查找距离上海最近的城市并返回它们的名称和距离
GEORADIUSBYMEMBER cities Shanghai 100 km WITHDIST7ZREM删除成员从指定键中删除一个或多个成员。