Loading... ### 一、概念: **redis是一款高性能的NOSQL系列的非关系型数据库,主要的数据类型有String(字符串类型)、Hash(哈希类型)、List(链式列表类型)、Set(集合类型)、SortedSet(有序集合类型)** ### 二、Redis的基本操作 * ##### help命令查询 ``` help @string # 查询string类型命令 help @hash # 查询hash命令 help @list # 查询list命令 help @set # 查询set命令 help @zset # 查询zset命令 help @cluster # 查询集群命令 help @generic # 查询通用命令 #......等等其他命令,可以使用Table键提示 ``` * ##### 服务器相关命令 ``` # 1、启动 Redis(需要配置环境变量,否则要切换到安装目录下的 bin 目录执行) #(1)方法一、前台启动 redis-server #(2)方法二、后台启动(需要修改 redis.conf 里的 daemonize 的值为 yes) redis-server redis.conf # 2、查看是否启动 #(1)方法一、ping 一下,返回 pong 则启动成功 redis-cli ping #(2)方法二、查看端口 ps -ef | grep -i redis # 3、启动客户端 redis-cli #(中文会乱码) redis-cli --raw #(中文不乱吗) #4、停止 Redis redis-cli shutdown ``` * #### keys键操作 ** 示例所有Key名都为xiaochen为示例** ``` # 选择指定数据库 select 1 # 选择 1 号数据库 # 返回所有满足给定 pattern 的 key keys * # 返回所有的 key keys my* # 返回 my 开头的 key # 判断某个Key是否存在 (存在返回 1,不存在返回 0) exists <key> exists xiaochen # 查询某个Key的类型 type <key> type xiaochen # 删除某个Key,返回一条影响行数,1表示true,删除成功 del <key> del xiaochen del xiaochen1 xiaochen2# 删除两个键值对 # 修改一个 key 的名称 rename <key> <key> rename name username# 将 key 为 name 改成 username # 给Key设置超时时间,单位秒,返回一表示true,设置成功 expire <key> <seconds> expire xiaochen 30# xiaochen 这个 key 将在 100 秒后被删除 # 查询Key过期时间,返回秒数正数为超时时间,,-1表示永不过期,-2表示已过期 ttl <key> ttl xiaochen # 查看当前数据库的key的数量(单个库) dbsize # 将 key 移到指定数据库 move <key> <key> move xiaochen xc# 将 xiaochen 从当前数据库移到 xc # 清空当前库 Flushdb # 清空所有库 Flushall ``` 1. #### 字符串(String)的操作 ``` help @string # 查询string类型命令 ``` ``` # 查询Key对应键值 get <key> get xiaochen # 设置值,添加键值对,给xiaochen赋值为123,没有则创建xiaochen set <key> <value> set xiaochen 123 # 批量设置键值对 mset <key1> <value1> <key2> <value2> mset xiaochen1 1 xiaochen2 2 # 批量获得值 mget <key1> <key2> mget xiaochen1 xiaochen2 # 同时设置一个或多个 key-value 对,如果不存在则设置,如果其中一个条件不满足则都失败 msetnx <key1> <value1> <key2> <value2> msetnx xiaochen4 1 xiaochen5 2 xiaochen6 3 # 追加,给xiaochen追加456 append <key> <value> append xiaochen 456 # 查询Key长度,这个key的长度也就是length strlen <key> strlen xiaochen # 设置值,如果不存在则设置一个值,如果存在则设置失败 setnx <key> <value> setnx xiaochen 123 # 给Key值增加1,类似于i++操作,如果是字符串将无返回,必须为数据,返回值为修改后的Value incr <key> incr xiaochen # 给Key值减少1,类似于i--操作,如果是字符串将无返回,必须为数据,返回值为修改后的Value decr <key> decr xiaochen # 指定Key添加或者减少一定的数量,给xiaochen这个key的Value添加100,然后再减少100,返回值为修改后的Value incrby / decrby <key> <步长> incrby xiaochen 100 decrby xiaochen 100 # 截取范围,获得值的范围,类似java中的substring,起始下标为0,只返回到结尾,超出正常返回 getrange <key> <起始位置> <结束位置> getrange xiaochen 0 10 # 插入值,从指定位置插入字符串,返回字符串长度 setrange <key> <起始位置> <value> setrange xiaochen 0 big # 设置键值的同时,设置过期时间,单位秒 setex <key> <过期时间> <value> # 获取以前的值写入新的值 getset <key> <value> getset xiaochen 123 ``` 2. #### 哈希(Hash)的操作 **Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。** ``` help @hash # 查询hash类型命令 ``` ``` # 设置Hash值,Hash类似以Java中的Map,Hash的Key存在返回0,不存在返回1,如果是String则报错,设置name 为 xchen,age为 18 hset <key> <field> <value> hset xiaochen name xchen # 从Hash中取出某个属性的Value值 hget <key> <field> hget xiaochen name # 批量设置Hash的值 hmset <key> <field1> <value1> <field2> <value2> hmset xiaochen name xchen age 18 # 批量获取值 hmget <key> <field1> <field2> hmget xiaochen name age # 获得一个哈希表的所有字段和值 hgetall <key> hgetall xiaochen # 删除一个哈希表里的字段 hdel <key> <field> ... hdel xiaochen name# 删除 myhash 里的一个字段 hdel xiaochen age sex# 删除多个字段 #删除整个哈希表 del <key> del xiaochen # 判断field是否存在,返回0 OR 1,对应True,False hexists <key> <field> hexists xiaochen name # 列出一个哈希表中字段数量 hlen <key> hlen xiaochen # 列出某个key的所有field hkeys <key> hkeys xiaochen # 列出某个key的所有Value hvals <key> hvals xiaochen # 为哈希表 key 中的域 field 的值加上增量 increment hincrby <key> <field> <increment> hincrby xiaochen age 1 # 将哈希表 key 中的域 field 的值设置为 value ,不存在时进行设置,存在不设置 hsetnx <key> <field> <value> hsetnx xiaochen name xchen ``` 3. #### 字符串链表(list)的操作 **List 是一个有序的集合,一般常用的有以下两种实现** ** 一个是 ArrayList,基于数组的,随机访问和查找快;** ** 一个是 LinkedList,基于链表的,插入和删除较快。** ``` help @list # 查询list类型命令 ``` ``` # 从左边/右边插入一个或多个值 lpush/rpush <key> <value1> <value2> <value3> # 左边插入 lpush xiaochen 1 2 3 # 右边插入 rpush xiaochen 4 5 6 # 向已存在的列表从左侧添加元素(列表不存在返回0) lpushx xiaochen e f g # 向已存在的列表从右侧添加元素(列表不存在返回0) rpushx xiaochen e f g # 按照起始位置结束位置范围获得元素(从左到右),索引从0开始 lrange <key> <start> <stop> lrange xiaochen 0 3 # 从左边/右边吐出一个值(删除后返回) lpop/rpop key # 从左边吐出 lpop xiaochen # 从右边吐出 rpop xiaochen # 从一个列表右边吐出一个值,插到另一个列表左边 rpoplpush <key1> <key2> rpoplpush xiaochen bigkang1 # 按照索引下标获得元素(从左到右),索引从0开始 lindex <key> <index> lindex xiaochen 2 # 获得列表长度 llen <key> llen xiaochen # 根据Key找到某个值,并且在他前面/后面插入一个值 linsert <key> AFTER/BEFORE <value> <newvalue> # 在xiaochen这个key的值为1的前面插入0.9 linsert xiaochen AFTER 1 0.9 # 在xiaochen这个key的值为1的后面插入1.1 linsert xiaochen BEFORE 1 1.1 # 从根据某个Key,找到Value,删除这个Value几个个数 lrem <key> <n> <value> # 在xiaochen中,从左边开始查询,删除1这个元素,删除两个(可能元素List中有多个1) lrem xiaochen 2 1 # 设置指定坐标的值(替换已存在的元素,但下标不能越界) lset xiaochen 3 mm 设置下标为3的元素为 mm ``` 4. #### 字符串集合(set)的操作 ``` help @set # 查询set类型命令 ``` ``` # 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略,插入成功返回1,插入失败表示0已经存在 sadd <key> <value1> <value2> ..... sadd xiaochen 1 2 3 # 取出该集合的所有值 smembers <key> smembers xiaochen # 返回该集合的元素个数 scard <key> scard xiaochen # 判断集合<key>是否为含有该<value>值,有返回1,没有返回0 sismember <key> <value> sismember xiaochen 1 # 删除集合中的某个元素 srem <key> <value1> <value2> .... srem xiaochen 1 2 3 # 随机从该集合中吐出一个值,会将原来的值删除 spop <key> spop xiaochen # 随机从该集合中取出n个值。 不会从集合中删除 srandmember <key> <n> srandmember xiaochen 3 # 返回两个集合的交集元素,如xiaochen有1,xiaochen2也有1,则返回1,所有相同的都会返回 sinter <key1> <key2> sinter xiaochen xiaochen2 # 返回两个集合的并集元素,例如xiaochen为 1 2 3,xiaochen2 为 3 4 5 ,则返回1 2 3 4 5 sunion <key1> <key2> sunion xiaochen xiaochen2 # 返回两个集合的差集元素,例如xiaochen为 1 2 3,xiaochen2 为 3 4 5 ,则返回1 2 4 5 sdiff <key1> <key2> sdiff xiaochen xiaochen2 # 将两个集合的交集放到一个新的集合里 sadd set a b c d sadd set2 c d e f sinterstore newset set set2 # 最终 newset 结果为 c d # 将两个集合的并集放到一个新的集合里 sadd set a b c d sadd set2 c d e f sunionstore newset set set2 # 最终 newset 结果为 a b c d e f # 将两个集合的差集放到一个新的集合里 sadd set a b c d sadd set2 c d e f sdiffstore newset set set2 # 最终 newset 结果为 a b ``` 5. #### 有序字符串集合(zset)的操作 **Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。** ** 不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。** ** 有序集合的成员是唯一的,但分数(score)却可以重复。** ** 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。** ``` help @sorted_set # 查询zset类型命令 ``` ``` # 将一个或多个 member 元素及其 score 值加入到有序集 key 当中,zset会根据score排序 zadd <key> <score1> <value1> <score2> <value2>... zadd bigkang 1 A 2 B 3 C # 查询指定元素的分数 zscore <key> <value> zscore mysort 言曌 # 查询集合的元素个数 zcard <key> zcard mysort # 返回有序集 key 中,下标在<start> <stop>之间的元素,带WITHSCORES,可以让分数一起和值返回到结果集,索引从0开始,0 1 会包含0 和 1 zrange <key> <start> <stop> [WITHSCORES] # 带分数返回0 到 2 三个值,并且返回分数,从小到大 zrange bigkang 0 2 WITHSCORES # 不返回分数 zrange bigkang 0 2 # 同上,顺序相反,从大到小 zrevrange bigkang 0 2 # -1表示返回所有 zrevrange bigkang 0 -1 # 返回有序集 key 中,分数在min到max中的值(包含),有序集成员按 score 值递增(从小到大)次序排列 zrangebyscore key min max [withscores][limit offset count] zrangebyscore bigkang 1 2.5 WITHSCORES # 同上,改为从大到小排列,max min相反 zrevrangebyscore key max min [withscores][limit offset count] zrevrangebyscore bigkang 2.5 1 WITHSCORES # 为元素的score加上增量 zincrby <key> <increment> <value> zincrby bigkang 3 A # 删除该集合下,指定值的元素 zrem <key> <value> zrem bigkang A # 按照排名删除 zremrangebyrank<key> <start> <stop> zremrangebyrank mysort 0 2 # 删除排名前三的(从小到大的顺序) # 按照分数范围删除 zremrangebyscore <key> <start> <stop> zremrangebyscore mysort 80 100 #删除 0-60 分的元素 # 统计该集合,分数区间内的元素个数 zcount <key> <min> <max> zcount bigkang 1 20 # 返回该值在集合中的排名,从0开始,返回索引下标,从小到大 zrank <key> <value> zrank bigkang B ``` 最后修改:2022 年 05 月 22 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 12 如果觉得我的文章对你有用,请随意赞赏
7 条评论
中秋节快乐啊
中秋节快乐吖~
开始学习数据库了
很久没开课了
快回来啦,一段糟心的恋爱结束了,谢谢你还记得我~
很详细
新知识