1 String(字符串)
String类型使用场景:value除了是我们的字符串还可以是我们的数字,redis会自动帮我们辨别转化
计数器
统计多单位的数量
粉丝数,关注数,浏览量
对象缓存存储
String类型常用方法
1 append append (key 给哪个键 string 追加什么内容)追加字符串,追加成功后返回当期这个key的长度, 如果当前追加的这个key不存在就新创建一个key
2 strlen strlen (key) 查看某个key的长度
3 incr incr(key)自增 默认自增1
场景:浏览量,当前观看人数,都是它实现的,相当于java的i++
4 decr decr(key)自减,默认每次减少1,可以为负数
5 incrby incrby (key) (numb)让某个键一次性步长几个长度
6 decrby decrby (key) (numb)让某个键一次性步减几个长度
7 range range (key) (index从哪里开始,长度也是从0开始的) (截取几位)查看区间指定的值,类似substring截取,如果截取的这个参数为-1显示全部的字符串,其实和get key是一样的作业
8 setrange setrange(key)(index)(value)把key按照指定的下表替换成指定的值
其实就是java中的replace替换
9 setex settex(set with expire) 设置过期时间 setex(key) (time,存活时间,一般都是秒s)(key的value)
11 setnx settex(set if not exist) 不存在设置 (在分布式锁中经常使用) setnx (key) (key 的value)成功的话返回1(一般成功就创建一个新的key,或者把key的value改变),不成功返回0,不成功因为设置那个key已经存在了
12 mset mset (k1 v1)( k2 v2) (k3 v3)一次性设置多个键值对
13 mget mget (k1 k2 k3)一次性获取多个key的值
14 msetnx msetnx(key value)
msetnx是一个原子性操作(要么全部成功,要么全部失败)
15 msetnx 扩展
开发场景:一般创建对象 set user:1{name:"张三",age:10}设置一个user:1对象.它的值为一个json字符串来保存一个对象
这里的key是一个巧妙的设计 user:{id}:{filed}如此设计在redis中是完全可以的
16 getset getset(key)(value) 先get再set,如果不存在值则返回null,如果存在值则获取原来的值并且设置新的值
2 Hash(哈希)
map集合,key-map,这时候这个值是一个map集合
hash的命令都是以"h"开头的
hash本质和string没有多大区别,还是一个简单的
hash的应用场景:
1 存储变更的对象,尤其是用户信息的保存,经常变动的信息.更适合对象的存储,String更加适合字符串的存储
1 hset(hash)(key)(value)存键值对的hash数据
2 hget(hash)(key)(value)根据key取对应的hash里面的元素
3 hgetall(hash)获取hash的全部属性
4 hmset(hash)(key1)(value1)(key2)(value2)一次性set多个key value
5 hmget(hash)(key1)(key2)一次性根据key取好几个值
6 hdel(hash)(key)根据key删除hash中的属性,对应的value值也就没有了
7 hlen(hash)查看这个hash中有多个属性(键值对)
8 hexists (hash)(key)判断hash中是否存在这个key,返回1说明存在,返回0说明不存在
9 hkeys (hash)查看全部的key
10 hvals(hash)查看全部的key
11 hincrby (hash)(key)(count)给hash指定key对应的值自增(指定增减量)key是正数也可以是负数,负数的话就是减
12 hsetnx (hash)(key)(value)添加hash元素, 如果这个hash存在就添加不了别的元素, 如果这个hash不存在就可以添加别的元素
13 hvals(hash)查看全部的key
14 hvals(hash)查看全部的key
15 hvals(hash)查看全部的key
3 List(列表)
list使用场景:可以把它用作成栈(lpush rpop左边进去 右边出来),队列,阻塞队列 ,消息排队,消息队列(lpush rpop)
所以的list命令都是以"l(L)"开头的
1 lpush lpush (list) (v1)(v2)(v3) 从左边一次性或者多次插入.也就是头部
2 lrange Lrange key (index)(index) 获取指定区间的值,去如果是0,-1的话就是查看全部的 想要得到第一个元素使用0 0
3 rpush r(right)push (list)(v1)(v2)(v3)从右边一次性或者多次插入.也就是尾部
4 lpop lpop(list)从左边删除一个值
5 rpop rpop(list)从右边删除一个值
6 lindex index(list)(index) 通过下标获取值,注意,下标也是从0开始的
7 llen llen(list) 查看元素的长度
8 lrem
lrem(list)(count)(value)移除几个什么样的元素(精确匹配)
9 ltrim ltrim(list)(index)(index)在java中是修剪,在redis是截取的意思,通过下标截取某一段key的元素,但是会改变这个list,只剩下我们要截取的元素
10 rpoplpush rpoplpush(list1)(list2) 移出列表的最后一个元素,将它移动到新的列表
11 exists exists(list) 判断list是否存在 存在返回1 不存在返回0
12 lset lset(list)(index)(value) 相当于修改替换replace 将列表中指定下标的值替换成另外一个值,如果不存在会报错,存在会替换当前值
13 linsert linsert(key)(before前或者after后)(value)(value) 将某个具体的value插入列表中某个元素的前面或者后面,在list里面之前value位置(之前或者之后)插入另外一个value的元素
list小结
1 list实际上是一个链表,before node after,left,right都可以插入值
2 如果插入的这个key不存在,需要创建一个新的链表
3 如果key存在,就在它的基础上新增内容
4 如果移出了key,所有的value都消失了,如果移除了所有值,空链表,也代表不存在
5 在两边插入或者改动值,效率最高,如果执行对中间元素的处理,效率会比较低
4 Set(集合)
set中的值是不能重复的,set是无序的
set中的命令都是以"S"开头的
1 sadd (set) (value) 给set添加元素
2 smembers (set)查看set里面的元素
3 sismember (value)判断set里面有没有这个元素,有的话返回1,没有的话返回0
4 scard(set)查看set里面的元素的个数
5 srem(set)(value)从set中删除指定的元素
6 smembers (set)(count)随机冲set取出几个(count)个元素
场景:随机数
7 spop (set)(count)随机移出几个元素
8 smove(需要移出的set)(移出到哪的set)(需要移出的元素)把一个set中具体的元素移到另外一个set中
9 sdiff(set11)(set2) sinter(set11)(set2) sunion (set11)(set2) 求连个set的差集 交集 并集,那个set在前面就是以哪个set作为参照物
使用场景:
以下场景都是可以通过交集实现的
1 共同关注(A和B共同关注点人)
2 共同好友(我们之间的共同好友 )
3微博,A用户把所有关注点人放在一个set里,将它的粉丝也放在一个集合中 共同关注,共同好友,共同爱好,二度好友,推荐好友
数字集合类:
1 差集 sdiff(两个集合相差的元素)
2 交集 sinte (两个集合都有的元素)
3 并集 sunion (两个集合一共的元素)
5 Zset(有序集合) 在set基础上增加了一个值可以进行排序
zet语法:set k1 v1
zset语法:zset k1 score v1
zset的命令都是z开头的
zset的使用场景:
1 排序,存储一组表,表排序
2 普通消息,1,重要消息,2普通消息
3 排行榜应用 Top N
1 zadd(zset)(k1)(v1) (k2)(v2)给zset添加多个元素
2 zrange(zset)(index)(index)#查看zset中的元素 如果是0 -1这种区级的话就是查询全部的意思
3 zrangebyscore(zset)(min)(max)(withscore显示信息)用来进行正序或者倒叙排序并追加显示信息
-inf +inf就是负无穷到正无穷