Redis五大数据类型
Redis-Key基本命令
set key name -- 设置一个基本的键值对
keys * -- 查看所有的键
exists key -- 查看对应的key是否存在
move key 对应数据库的编号 -- 将这个key对应的数据移动到别的数据库
expire key 过期时间(单位秒) -- 设置这个数据多久之后过期
ttl key -- 查看该数据还有多久过期
-- 这里-1 表示是没有过期时间
-- -2表示是已经过期了
type key -- 查看当前的key对应的数据是什么类型
String - 字符串
- 这个就是字符串类型了
- 一般我们使用set命令添加的key和name都是字符串类型的
字符串相关命令
- 拼接字符串
append key 要添加的字符串
- 如果当前的字符串不存在就会自动创建对应的键值对
- 获取字符串长度
strlen key
通过key来获取字符串长度
- i++操作
- 就是一个自动帮我们给计数器加1的操作
incr key
- 想一些基本的网站的浏览量呀,播放量之类的可以用redis来实现
decr key
- 这个就是对应的i–操作了
incrby key 数值
- 这个就是增加对应的数值了
decrby key 数值
- 减操作
- 获取字符串范围操作
getrange key 起始 结束
- 字符串替换操作
setrange key 要开始替换的字符串下标 替换完成的字符
- 关于过期时间的操作
setex key 过期时间 value
- 这个就是设定对应的过期时间
setnx key values
- 这个是在没有对应的key的时候才设置value
- 注意这个指令在分布式的锁中会经常使用
- 批量设置键值对
mset key1 value1 key2 value2 ...
-- 注意这里也是可以使用msetnx的,就只有值不存在才创建
-- 而且这个是原子性操作,就是只有所有的值都能创建才能成功
-- 只要有一个没有成功创建就会失败
mget k1 k2 k3
- 这个就是批量获取了
- 创建一个对象
set user:1 {name:wan,age:18}
- 一般都是这样设置为一个json字符串来保存对象
set user:1:name wan
set user:1:age 18
- 不过更多推荐这样来设计
- 这里就是 对象名 : 编号 : 字段
- 先查看后设置命令
getset key value
- 这个就是先去查看这个key对应的值
- 然后将对应的值变为你新设置的value
List - 列表
- 先记住所有的list命令都是使用 l 开头的
- 创建一个List集合
lpush 集合名 值
- 要添加值继续使用这个指令即可
- 获取全部的值
lrange 集合名 0 -1
- 注意这里的获取顺序是反着来的
- 添加数据到开头
rpush 集合名 值
- 要理解的话就是r和l分别对应右左
- 获取值
r/lpop key
- 就选择从左右方向去获取值
lindex list 下标
- 这个就是获取对应下标的值而已
- 获取list集合的长度
llen list
- 移除指定的值
lrem 集合名称 要移除的数量 对应的value
ltrim 集合名称 要保留的范围
rpoplpush 集合1 集合2
- 这个就是将集合1最右边的元素添加到集合2最左边
- 一些插入操作
exists 集合名
lset 集合名 对应位置 要修改的元素名
-- 这个就是如果对应的位置不存在就会报错,存在就会修改为现在的值
linsert 集合名 before 对应的值 要添加的值
-- 这个就是在对应的值前面添加要添加的值
-- 如果换成after就是在对应的值后面去添加值
Set - 集合
- 这种集合的属性和java里面的是一样的,就是值不能重复
- 还是先记住所有的set命令都是以s开头的
- 创建一个set集合
sadd 集合名 值名称
- 查看集合元素
smembers 集合名
- 判断某个值是否存在
sismember 集合名 对应值名
- 查看现在集合有多少元素
scard 集合名称
- 移除某个元素
srem 集合名 元素名
- 随机获取元素
srandmember 集合名
spop 集合名
-- 这个比较离谱,随机删除集合中的元素
- 移动元素到另外的集合中
smove 集合1 集合2 元素
-- 这个就是将集合1中的元素移动到集合2中
- 一些数学上的操作
- 这个就有一些数学上的操作了
- 比如交并集,差集等等
sdiff 集合1 集合2
-- 这个就是求集合1对比集合2中没有的元素
sinter 集合1 集合2
-- 这个就是求并集了
sunion 集合1 集合2
-- 这个就是求集合1和集合2的并集了
- 这里也侧面验证了在set中的元素顺序是混乱的
用处
可以用来做共同关注功能
直接用set的并集就出来了
Hash - 哈希
- 这个可以当作map集合来看
- 就是里面存放的是 key - map这样的
- 通过key可以再提取出一个map
- 也就是键值对存放的是一个集合
- 记得所有的hash命令都是以h开头的
- 创建一个hash集合
hset 集合名 key value
- 这里一样是可以使用mget和mset的
- 获取值
hgetall hash集合名
- 删除
hdel hash集合名 key名
- 这个就是删除指定的key和对应的value了
- 获取长度
hlen 集合名称
hkeys myhash
-- 这个就是获取hash的所有key
- 其他操作
- 还记得之前那些操作吗?
- 就是String里面的增加和减少
- hash里面也有
hincrby hash集合名 key名 增加的数值
- 就连setnx也是存在的
hsetnx hash集合名 key名 values名
用处
这个就是对比前面的使用 对象名 : id : 字段名 这种方式好很多了
Zset - 有序集合
- 这个就是对比set多了个排序而已
- 才怪,妈耶还多了很多东西的好吧
- 创建一个zset集合
zadd 集合名 key value
其实就和之前的set是一样的
- 排序的实现
zrangebyscore 要排序的集合名 -inf +inf
后面的 -inf和+inf是代表从负无穷到正无穷的意思
- 这里的范围其实也可以具体指定
- 如果我把这个+inf修改为2000,这个lin就不会显示出来了
zrevrange zset名称 0 -1
- 这个就是从大到小排序了
- 具体可以查下 zrangebyscore指令
- 删除对应集合中的元素
zrem 集合名称 对应的value的值
- 获得对应库中有多少数据
zcard zset名称
zcount zset名称 开始 结束
-- 这个就是表示从开始到结束范围内容有多少条数据
用处
可以存储班级成绩,工资之类
还可以设置数据的权重,就比如 1 代表最重要, 2 次之
还有排行榜之类的