Redis五:数据结构和操作命令
Redis数据结构介绍
- KEYS:查看符合模板的所有key(不建议在生产环境设备上使用)
- DEL:删除一个指定的key
- EXISTS:判断key是否存在
- EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除
- TTL:查看一个KEY的剩余有效期
key的结构
- user相关的key:ln:user:1
- product相关的key:ln:product:1
key操作命令
1:获取所有键(*)
语法:keys pattern
查找所有符合给定模式pattern(正则表达式)的 key ,时间复杂度为O(N),N为数据库里面key的数量。
keys *
支持的正则表达模式:
h?llo 匹配 hello,hallo 和 hxllo
h*llo 匹配 hllo 和 heeeello
h[ae]llo 匹配 hello 和 hallo, 但是不匹配 hillo
h[^e]llo 匹配 hallo, hbllo, … 但是不匹配 hello
h[a-b]llo 匹配 hallo 和 hbllo
2:获取键的总数
dbsize
获取键总数时不会遍历所有的键,直接获取内部变量,时间复杂度O(1)。
3:查询键是否存在
exists key [key...]
查询查询多个,返回存在的个数。
4:删除键:
del key [key...]
可以删除多个,返回删除成功的个数。
5:查询键的类型
type key
6:移动键到其他的仓库
move key db
7:查询键的声明周期(秒)
秒语法:ttl key
毫秒语法:pttl key
"-1" 永不过期。
8:设置过期时间
秒语法:expire key seconds
毫秒语法:pexpire key millisconds
9:设置永不过期
persist key
10:更改键名称
rename key newkey
字符串String操作命令
- string:普通字符串
- int:整数类型,可以做自增、自减操作
- float:浮点类型,可以做自增、自减操作
1:存放键值
set key value [EX seconds][PX milliseconds][NX|XX]
nx:如果key不存在则建立,xx:如果key存在则修改其值,也可以直接使用 setnx/setex 命令。
2:获取键值
get key
3:值递增/递减
如果字符串中的值是数字类型的,可以使用 incr 命令每次递增,不是数字类型则报错。
incr key
一次想递增N用 incrby 命令,如果是浮点型数据可以用 incrbyfloat 命令递增。
同样,递减使用 decr、decrby 命令。
4:批量存放键值
mset key value [key value...]
5:批量获取键值
mget key [key...]
Redis接收的是UTF-8的编码,如果是中文一个汉字将占3位返回。
6:获取值长度
strlen key
7:追加内容
append key value
向键值尾部添加,如上命令执行后由1变成123
8:获取部分字符
getrange key strat end
集合操作命令
集合类型和列表类型相似,只不过是集合是无序且不可重复的。
集合Set
- 无序
- 元素不可重复
- 查找快
- 支持交集、并集、差集等功能
利用Set 结构可以实现以下场景:
例如:
- 计算张三的好友有几人
- 计算张三和李四有哪些共同好友
- 查询哪些人是张三的好友却不是李四的好友
- 查询张三和李四的好友总共有哪些人
- 判断李四是否是张三的好友
- 判断张三是否是李四的好友
- 将李四从张三的好友列表中移除
1:存储值
sadd key member [member...]
这里有八个值,其中有两个java,会去重只保存七个
2:获取元素
获取所有元素语法:smembers key
随机获取元素语法:srandmember langs count
3:判断集合是否存在元素
sismember key member
4:获取集合元素个数
scard key
5:删除集合元素
srem key member [member...]
6:弹出元素
spop key [count]
有序集合ZSet(sorted set)
- 可排序
- 元素不重复
- 查询速度快
和列表的区别:
- 列表使用链表实现,两头快,中间慢。有序集合是散列表和跳跃表实现的,即使读取中间的元素也比较快。
- 列表不能调整元素位置,有序集合能。
- 有序集合比列表更占内存。
- 删除Tom同学
- 获取Amy同学的分数
- 获取Rose同学的排名
- 查询80分以下有几个学生
- 给Amy同学加2分
- 查出成绩前3名的同学
- 查出成绩80分以下的所有同学
1:存储值
zadd key [NX|XX] [CH] [INCR] score member [score member …]
2:获取元素分数
语法:zscore key member
获取排名范围排名语法:zrange key start stop [WITHSCORES]
获取所有,没有分数。
获取所有,以及分数。
获取指定分数范围排名语法:zrangebyscore key min max [WITHSCORES] [LIMIT offset count]
3:增加指定元素分数
语法:zincrby key increment member
4:获取集合元素个数
语法:zcard key
5:获取指定范围分数元素个数
语法:zcount key min max
6:删除指定元素
语法:zrem key member [member …]
7:获取元素排名
语法:zrank key member
列表List操作命令
- 有序
- 元素可以重复
- 插入和删除快
- 查询速度一般
列表类型是一个有序的字段串列表,内部是使用双向链表实现,所有可以向两端操作元素,获取两端的数据速度快,通过索引到具体的行数比较慢。
列表类型的元素是有序且可以重复的。
可以利用List 结构模拟 栈、队列、阻塞队列
- 栈:入库和出口在同一边
- 队列:入库和出口在不同边
- 阻塞队列:入库和出口在不同边,出队时采用BLPOP或BRPOP
1:存储值
左端存值语法:lpush key value [value …]
右端存值语法:rpush key value [value …]
索引存值语法:lset key index value
2:弹出元素
左端弹出语法:lpop key
右端弹出语法:rpop key
3:获取元素个数
语法:llen key
4:获取列表元素
两边获取语法:lrange key start stop
获取所有
从右端索引
索引获取语法:lindex key index
从右端获取
5:删除元素
根据值删除语法:lrem key count value
删除所有对应值
从左端删除前count个
从右端删除前count个
范围删除语法:ltrim key start stop
散列Hash操作命令
Redis字符串类型键和值是字典结构形式,这里的散列类型其值也可以是字典结构。
1:存放键值
单个语法:hset key field value
多个语法:hmset key field value [field value …]
不存在时语法:hsetnx key field value
2:获取字段值
单个语法:hget key field
多个语法:hmget key field [field …]
获取所有键与值语法:hgetall key
获取所有字段语法:hkeys key
获取所有值语法:hvals key
3:判断字段是否存在
语法:hexists key field
4:获取字段数量
语法:hlen key
5:递增/减
语法:hincrby key field increment
6:删除字段
语法:hdel key field [field …]
时间仓促,如有错误欢迎指出,欢迎在评论区讨论,如对您有帮助还请点个推荐、关注支持一下
作者:博客园 - 凉年技术
出处:http://www.cnblogs.com/xxhxs-21/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。
若内容有侵犯您权益的地方,请公告栏处联系本人,本人定积极配合处理解决。