当前位置:网站首页>8 Redis 数据库管理
8 Redis 数据库管理
2022-07-20 09:05:00 【linjun20】
1.处理数据库的单个键
type key_name //命令用于返回 key 所储存的值的类型。
del key_name // 命令用于删除已存在的键。不存在的 key 会被忽略。
exists key_name //查看键是否存在于数据库中
rename oldKey newKey //键重命名
renamenx name name1 //重命名失败,只有当name1不存在才能改名
2.对键的值进行排序
redis支持对list,set,sorted set、hash元素(元素可以为数值与字符串)的排序。
sort 排序命令格式:
sort key [BY pattern] [LIMIT start count] [GET pattern] [ASC|DESC] [ALPHA] [STORE dstkey]
1 sort key (list)
这是最简单的情况,没有任何选项对集合自身元素排序并返回排序结果,默认为value升序。
2 sort key [ASC|DESC] [ALPHA] (list)
sort默认的排序方式(asc)是从小到大排的,当然也可以按照逆序或者按字符顺序排。
逆序可以加上desc选项,想按字母顺序排可以加alpha选项,alpha可以和desc一起用。
sort 默认以分数(数值)排序,字母使用默认的sort排序,会报错!
排序的一些问题。
如果有多个redis server的话,不同的key可能存在于不同的server上。比如mimvp_12, mimvp_11,mimvp_13,mimvp_10,很有可能分别在四个不同的server上存贮着,这种情况会对排序性能造成很大的影响。
redis作者在他的blog上提到了这个问题的解决办法,就是通过key tag将需要排序的key都放到同一个server上 。由于具体决定哪个key存在哪个服务器上一般都是在client端hash的办法来做的,我们可以通过只对key的部分进行hash
举个例子:
假如我们 的client如果发现key中包含[],那么只对key中[]包含的内容进行hash,我们将四个name相关的key,都这样命名[name]12 [name]13 [name]11 [name]10,于是client 程序就会把他们都放到同一server上(不知道jredis实现了没)。
还有一个问题也比较严重
如果要sort的集合非常大的话排序就会消耗很长时间。由于redis单线程的,所以长时间的排序操作会阻塞其他client的 请求。解决办法是通过主从复制机制将数据复制到多个slave上。然后我们只在slave上做排序操作,并尽可能的对排序结果缓存。另外就是一个方案是就是采用sorted set对需要按某个顺序访问的集合建立索引。
3.获取数据库包含的键
randomkey //返回随机键
keys 键全量遍历:
keys * //返回所有的键, *匹配任意字符多个字符
keys *y //以结尾的键,
keys n*e //以n开头以e结尾,返回name
keys n?me // ?问号代表只匹配一个字符 返回name,全局匹配
keys n?m* //返回name
keys [j,l]* //返回以j l开头的所有键 keys [j]ames 全量匹配james
考虑到是单线程, 在生产环境不建议使用,如果键多可能会阻塞,如果键少,可以
scan 渐进式遍历
scan 0 match l* count 100 //匹配以n开头的键,取20条,第一次scan 0开始
第二次从游标10开始取20个以n开头的键,相当于一页一页的取,当最后返回0时,键被取完
注:渐进式遍历可有效地解决keys命令可能产生的阻塞问题
除scan字符串外:还有以下
SCAN 命令用于迭代当前数据库中的数据库键。
SSCAN 命令用于迭代集合键中的元素。
HSCAN 命令用于迭代哈希键中的键值对。
ZSCAN 命令用于迭代有序集合中的元素(包括元素成员和元素分值)。
用法和scan一样
4.对数据库本身进行操作
dbsize 查看当前数据库 key 的个数
flushdb 只清空当前数据库的键值对 dbsize 0
select index 切换数据
move key db //把部分数据迁移到另一台redis服务器 reids有16个库, 编号为0-15
flushall 清空所有库的键值对
5 键过期
expire name:lin 30 //键name:03 在30秒后过期
ttl name:lin //查看过期按秒到计时,当返回-2说明已删除
pttl name:lin //查看过期按毫秒到时计
set name:05 james //初始化数据
pexpire name:05 20000 //20000毫秒(20S)后过期
expire name:06 -2 //直接过期,和del一样
设置键在某个时间点过期 使用的是时间戳
expireat name:04 1516971599 //设置在2018/01/27 20:59:59过期
hset user:01 name james //初始化数据
expire user:01 60 //设置60S后过期
ttl user:01 //查看过期剩余时间
persist user:01 //去掉过期
ttl user:1 //返回-1 可以永久查询不失效
注意:对于字符串重设值后,expire无效,
set name james
expire name 50
ttl name
set name james1 //此时expire取消
ttl name //返回-1, 长期有效
边栏推荐
- File文件改名字
- youtube下载及(批量)下载
- PHP generates Sitemap
- Usage of mappartitions in pyspark
- Bardecodefiler split and rename TIF documents
- 在线教育项目整合Swagger
- SPSS kmeans clustering practice
- Tp5.1 controller initialization initialize (inherit public file initialization)
- Calculating definite integral with R language
- PHP match regular fetch URL
猜你喜欢
Cloud foundry development 4 CF command
DLL load failed: 页面文件太小,无法完成操作
Changsha big screen development
Linear table with chained storage structure
【码蹄集新手村 600 题】如何将一个十进制整数的所有二进制的偶数位置上的二进制数值都变为 0
JVM heap memory parsing
Scala variables and data types (01)
Operation methods and skills of CAD perfect transformation to ArcGIS
The development trend of digital twin virtual reality
Unity learning notes conversion between plane pixel coordinates of spherical panorama and coordinates on three-dimensional coordinate system
随机推荐
Online education project integration swagger
Go array slice mapping
What is stack?
Php obtient le Répertoire racine du site Web, plusieurs méthodes PHP obtient le Répertoire racine du site Web
SQL语句问题,不知道是否正确,求指导
文本读取结束判定
php 登录与退出登录逻辑
R语言一页多图
Unity学习笔记 球形全景图平面像素坐标与三维坐标系上的坐标之间的转换
JVM heap memory parsing
LeetCode-152-乘积最大数组
pyspark里mapPartitions的用法
CAD完美转ArcGIS的操作方法技巧
js失去焦点获取值
「接口测试入门课」打卡学习 day06:接口测试平台:工具和框架不可以兼容?
Knowledge points of MySQL (10)
Regular expression matching URL
Network layer protocol -- IP protocol
bgp简介
JS lose focus get value