五大数据类型
Redis-Key
set [key] [value] # 向数据库添加一个键值对
keys * # 查看当前数据库所有的键值
EXISTS [key] # 查看key是否存在在当前数据库中,存在返回1,不存在返回0
move [key] [index] # 将key移动到编号为index的数据库,移动完之后当前数据库的key就被移除了
del [key] # 删除这个key
get [key] # 获取key对应的value值
expire [key] [seconds] # 设置key过了seconds秒后过期
ttl [key] # 查看key还剩几秒过期, 如果是长期有效的,则返回值为-1,如果过期了,返回-2
type [key] # 查看key对应value的类型
不会的命令还可以在redis官网查看文档。
String ( 字符串 )
append 指令,strlen指令
append对应的key值如果不存在,则命令效果相当于set命令
incr和decr指令
incrby和decrby :可以指定步长
getrange :根据起止位置截取字符串,包含起止位置的字符,-1代表最后一个字符的下标
setrange :替换指定位置开始的字符串
setex和setnx :set with expire和set if not exists
mset和mget :批量添加获取值
msetnx和上面的setnx类似,但是这个是原子操作,当且仅当所有的key值都不存在的时候,才会执行。
设置对象
set user:1 {name:zhangshan,age:3} # 设置一个user:1对象,值为json字符串来保存对象
也可以通过设计key来通过多个键值对来保存对象。
像上图这样采用了 user:{id}:{field}
的格式来设计key。
getset
组合命令,有点像后缀自增。
List(列表)
基本的数据类型,列表
在redis里面,我们可以吧list用作栈,队列
lpush向队列头添加一个元素,rpush 向队列尾添加一个元素。lrange和上面range的用法一样。
lpop和rpop就是从队列中弹出元素的命令
lindex 是获取下标对应的元素,下标从0开始。
llen 获取列表长度
lrem 从列表中移除元素,从list中移除指定个value
ltrim命令,修剪操作,保留list的一部分。通过下标截取指定长度。
rpoplpush,组合命令。取出栈顶的元素,放到另外一个list里面。
lset,改变列表指定下标元素的值,这个命令不能创建新的列表,也不能给原本没有元素的下标赋值。
linsert
如果列表里有多个相同的值,则只会最靠前的进行操作。
小结
可以把这个列表想象成双向链表来理解这些操作。
Set (集合)
和其他语言里面的set一样,这里的set也不能存放重复的值。
基本操作
sadd,向set中添加元素,添加重复的元素会返回0,代表添加失败;
smembers,查看set中所有元素;
sismember,查看set中有没有指定元素。
scard,获取set中元素的个数
srem,从set中移除指定元素
srandmember,从set中随机获取n个值
spop,从set中随机移除一个元素
smove,将某个元素从一个集合移动到另一个集合
集合交并补
sdiff,返回多个集合的差集
sinter,返回多个集合的交集
sunion,返回多个集合的并集
Hash (散列表)
在redis中相当于 key - map,原本的value里放了一个map
hset,hget存取值
hmset,可以放多个值,但是hset也能达到相同的效果
hmget,可以同时取出多个值
hgetall,获取所有字段的值
hdel,删除指定字段
hlen,获取有多少个键值对
hexists,判断指定字段是否存在
hkeys/hvals,只获取hash里面的key/value值
hincrby,自增命令;这里没有自减的命令,把自增的步长设置为负数即可实现
hsetnx,如果不存在就创建,和setnx用法相同。
hash存取数据效率很高,适合存放经常变动的数据。
Zset(有序集合)
在set的基础上,增加了一个权重值。
基本添加查找
zadd key score value
zadd也支持添加多个值
排序
zrangebyscore 按照zadd时给定的score排序,可以指定score的范围
也可以添加符号来选择开区间
zrevrange,逆序排列
移除元素
zrem,删除元素
获取个数
zcard,获取集合中的个数
zcount,获取指定区间的元素个数