目录
- key通用命令
- 数据库通用命令
key通用命令
key通用操作
key特征
- key是一个字符串,通过key获取Redis中保存的数据
【提问】key应该设计哪些操作?
- 对于key自身状态的相关操作,例如:删除,判定存在,获取类型等
- 对于key有效性控制相关操作,例如:有效期设定,判断是否有效,有效状态的切换等
- 对于key的查询操作,例如:按指定策略查询key
- …
key基本操作
- 删除指定key
- del key
- 获取key是否存在
- exists key
- 获取key的类型
- type key
模拟一下
- 添加5种数据
- set str str
- hset hash1 hash1 hash1
- lpush list1 list1
- sadd set1 set1
- zadd zset1 1 zset1
- 看看类型
- type zset1 //zset
- type str //string
- type list1 //list
- …
- str是否存在
- exists str // integer 1
- …
- 删除zset1
- del zset1
- 看看在不在:exists zset1 // integer 0
key扩展操作(失效性控制)
- 为指定key设置有效期 (设时间的)
- expire key seconds 秒级
- pexpire key milliseconds 毫秒级
- expireat key timetamp 时间戳
- pexpireat key milliseconds-timestamp
- 获取key的有效时间(还剩多久?)(看状态的)
- ttl key 显示秒级
- pttl key 显示毫秒级
- 切换key从时效性转换为永久性 (改状态的)
- persist key
模拟
-
添加数据
- set str str
- lpush list1 list1
- lpush list2 list2
-
设置有效期
- expire str 3
- 获取str:
- get str
- …
- get str //nil 过期了
-
设置list1的有效期为30秒
- expire list1 30
- 看看list1的有效期
- ttl list1 //21 还剩下21秒
- ttl list1 //-2 代表访问的key已经不存在了(消失了)
-
看看既没有失效又没设置有效期是怎样的呢?
- ttl list2 //-1
- 如果一个key不存在,那么返回值是-2
- 如果一个key存在,不设置有效期,那么返回值是-1(永久性也是-1)
- 如果一个key存在,且设置有效期,那么返回有效期时长
- ttl list2 //-1
-
设置有效期list2
- persist list2 // 0 失败 因为list2没有有效期
- expire list2 60 60秒有效期
- persist list2 永久性转换设置
- ttl list2 //-1 查看剩余多少秒
- persist list2 // 0 失败 因为list2没有有效期
key扩展操作(查询模式)
- 查询key
- keys pattern
- keys pattern
模拟
- 查询所有的key
- keys *
- 查询it开头的key 匹配任意字
- keys it*
- 查询i?hema 匹配一个字
- keys i?hema
- 查询有四个字的key
- keys ???
- 匹配任意字符
- keys nam[abcde]
key其他操作
- 为key改名
- rename key newkey 慎重使用,千万不要把别人的数据给覆盖了
- renamenx key newkey
- 对所有key排序
- sort 必须给一个集合性的数据list或set 从小到大排序
- 其他key通用操作
- help @generic
模拟
-
设置三个数据
- set str str
- set str1 str1
- set str2 str2
-
把str 改为 str3
- rename str str3
-
把str3改为 str2
- rename str3 str2
- 发现居然少了一个,只有str2和str1 str3覆盖了原来的str2
-
如果不存在就改名,存在就不改名(防止覆盖)
- 把str1改名为str2
- renamenx str1 str2 //(integer) 0 此时存在,无法改名
- 把str2改名为str
- renamenx str2 str 这样就成功了
- 把str1改名为str2
-
构建一个数据
- lpush aa 123
- lpush aa 321
- lpush aa 222
-
看一下添加后的顺序是怎样的
- lrange aa 0 -1 // 无序
-
对key中所有元素进行排序(正序)
- sort aa 从小到大排序,仅仅是排了个序,不动原来的数据
- 逆序排序
- sort aa desc
- 逆序排序
- sort aa 从小到大排序,仅仅是排了个序,不动原来的数据
-
查看key全部通用命令
- help @generic tab键,第一个就是deneric
数据库的通用指令
数据库
【疑问】key重复的问题
- key是由程序员定义的
- Redis在使用过程中,伴随着操作数据量的增加,会出现大量的数据以及对应的key
- 数据不区分种类、类别混杂在一起,极易出现重复或冲突
解决方案
- Redis为每个服务提供有16个数据库,编号0-15
- 每个数据库之间的数据相互独立
- 这些数据库公用一块空间
2022/08/07 day04:通用命令 - 并没有说那个存储空间大,那个存储空间小
db基本操作
-
切换数据库
- select index index是索引,编号0-15
- 127.0.0.1:6379> select 1
- OK
- 127.0.0.1:6379[1]> select 15
- OK
- 127.0.0.1:6379[15]> select 0
- OK
- 127.0.0.1:6379> 原来我么一直在0号区操作
-
其他操作
- quit 退出
- ping 测试服务器是否连通(服务器断开后,输出没数据;连通输出文本)
- echo message 输出文本(你输出什么,它输出什么)没什么用
- redis-cli 服务器重启后,客户端开启Redis
-
数据移动
- move key db
- 在默认的0号数据库中添加数据ithema
- set name ithema
- 切换到1号数据库中查看数据
- select 1
- 查看name
- get name //nil 没哟
- 查看name
- select 1
- 数据移动到1号数据库
- 切换到0号数据库操作
- select 0
- 移动数据
- move name 1
- 查看数据
- get name //nil
- 切换到1号数据库
- select 1
- 查看数据:get name //itheima
- 查看数据
- move name 1
- 切换到0号数据库操作
- 在默认的0号数据库中再次添加数据ithema
- set name ithema
- 再次移动数据到1号数据库–>将失败
- 也即是说,移动数据得保证另一方没有,如果有则会移动失败
- 在默认的0号数据库中添加数据ithema
- move key db
-
数据清除
- dbsize 看看你现在这个库里有多少个key
- flushdb 刷掉你现在的数据库中的所有数据key
- flushall 掀桌子,干掉所有数据库所有数据 我不用一条一条的del了
-
让人恐怖的命令 要谨慎操作,可能这辈子都用不了,一般做实验用
——此文档为学习笔记!
-