五大数据类型
官方文档
我们现在所有的命令一定要全部记住
Redis-Key
keys * # 查看所有key
set name zhangsan # set key
EXISTS name # 判断当前key是否存在
move name 1 # 移除当前的key
EXPIRE name 10 # 设置key的过期时间,单位是秒
ttl name # 查看当前key的过期时间
type name # 查看当前key的类型
String(字符串)
APPEND name “hello” # 字符串拼接,返回字符串长度,若当前key不存在,就相当于set key
STRLEN name # 获取字符串的长度
#############################################
set views 0
incr views # +1
decr views # -1
INCRBY views 10 # +10 指定增量
DECRBY views 10 # -10 指定减量
##############################################
GETRANGE key 0 3 # 截取字符串0到3
GETRANGE key 0 -1 # 获取全部的字符串 和get key是一样的
SETRANK key 1 xx # 替换指定位置开始的字符串
##############################################
setex (set with expire) # 设置过期时间
setex key3 30 "hello" # 设置key3的值为hello,30秒后过期
setnx (set if not exist) # 不存在再设置(在分布式锁中常常使用!)
setnx mykey "redis" # 如果mykey不存在,创建mykey,返回 1
setnx mykey "mongDB" # 如果mykey存在,则创建失败,返回 0
###############################################
mset k1 v1 k2 v2 k3 v3 # 批量设置
mget k1 k2 k3 # 同时获取多个值
msetnx k1 v1 k4 v1 # msetnx 是一个原子性的操作,要么一起成功,要么一起失败
# 对象
set user:1 {name:zhangsan,age:3} #设置一个对象user:1,值为json字符串来保存一个对象!
# 这里的key是一个巧妙的设计:user:{id}:{filed},如此设计在Redis中是完全OK的
################################################
getset db redis # 如果不存在值,则返回nil
# 如果存在存在值,获取原来的值,并设置新的值
List(列表)
所有的list命令都是 l 来头的
##########################################
LPUSH list one # 讲一个值放在列表的头部(左)
LPUSH list two
LPUSH list three
LRANGE list 0 -1 # 通过区间获取具体的值
RPUSH list right # 将一个值或多个值,插入到列表的右边
Lpop list # 移除列表的第一个元素(最左边)
Rpop list # 移除列表的最后一个元素(最右边)
Lindex list 1 # 通过下标获取list中某个元素
Llen list # 返回列表的长度
##########################################
lrem list 1 one # 移除list集合中指定个数的value,精确匹配
# 移除list中1个“one”
##########################################
ltrim list 1 2 # 通过下表截取指定的长度,这个list已经被改变了,只剩下截取的部分
rpoplpush list newlist # 移除列表最后一个元素,将他移到另一个列表
小结
- 他实际上是一个链表,bdfore Node after, left ,right 都可插入
- 如果key不存在,创建新饿链表
- 如果key存在,新增内容
- 如果移除了所有值,空链表,也代表不存在
- 在两边插入或者改动值,效率最高!中间元素,相对来说效率会低一点
消息排队!消息队列(Lpush Rpop),栈(Lpush Lpop)
set(集合)
set中的值不能重复
Sadd myset "hello" # set集合中添加元素
成功:1,失败:0(值重复了)
Smembers myset # 查看指定set的所有值
Sismember myset hello # 判断某一值是否在set集合中
存在:1,不存在:0
#################################################
Scard myset # 获取set集合中的元素个数
Srem myset hello # 移除set集合中的某个元素
set无序不重复集合
Srandmember myset # 随机抽取set集合中的一个元素
##################################################
Spop myset # 随机移出一个值
Smove myset myset2 "hello" # 将一个指定的值,移动到另一个set集合
微博,B站,有一些共同关注(并集)
Sdiff myset1 myset2 # myset1和myset2的差集
Sinter myset1 myset2 # 交集
Sunion myset1 myset2 # 并集
微博,A用户将多有关注的人放在一个set集合中!将他的粉丝也放在一个集合中!共同关注,共同好友,二度好友,推荐好友(六度分割理论)
Hash(哈希)
Map 集合,key-map 这时候这个值就是一个map集合!本质和String没有太大的区别,还是一个简单的key-value
hset myhash key1 value1 # set一个具体的 key - value
hget myhash key1 # 获取一个字段
hmset myhash key1 value1 key2 value2 # set多个key-value
hmget myhash key1 key2 # 获取多个字段
hgetall myhash # 获取全部数据
######################################################
hdel myhash key1 # 删除hash指定的key,对应的value值也就消失了
######################################################
hlen myhash # 获取hash中的长度
hexists myhash key1 # 判断hash中指定字段key是否存在
hkeys myhash # 获取素有的key
hvals myhash # 获取所有的value
hash变更的数据user name age,尤其是用户信息之类的,经常变动的信息! hash更适合于对象的存储,String更适合字符串的存储
Zset(有序集合)
在set的基础上,增加了一个值
zadd myset 1 one # 添加一个值
zadd myset 2 two 3 three
zadd salary 2500 xiaohong
zadd salary 5000 zhangsan
zadd salary 500 lisi
Zrangebyscore salary -inf +inf # 从正无穷到负无穷(最小值到最大值)
Zrangebyscore salary -inf +inf withscores # 附带成绩
########################################################
zrem salary xiaohong # 移除有序集合中的指定元素
zcard salary 0 -1 # 获取指定区间元素