数据类型

字符串(String)

  • 二进制安全的,存入和获取的数据相同
  • Value最多可以容纳的数据长度是512M

常用操作

1
2
3
4
5
6
7
8
9
10
set name jack	//"ok"	设置一个key为name 值为jack
get name //"jack" 获取key为name的值
getset name rose //"jack" 获取name的值并设置name的值为rose
del name //(integer)1 删除name这个key 返回删除结果个数
incr num //(integer)1 给num的值+1,如果之前没有设置,初始化值为0,如果num之前不为数字,则报错
decr num2 //(integer)-1 给num2值-1,因为没设置过值,直接0-1=-1
incrby num 5 //(integer)6 给num +5,之前为1,+5后结果为6
decrby num3 5 //(integer)-5 给num3 -5,之前没有设置过num3,初始为0,-5=-5
append num 0 //(integer)2 在num后面接上0,返回长度
get num //"60"

哈希(hash)

  • String Key和String Value的map容器
  • 经常用于存对象

常用操作

1
2
3
4
5
6
7
8
9
10
11
12
13
hset user username jack	//(integer)1	设置一个user的map,里面有key为username值为jack的一条数据
hset user age 25 //(integer)1 给users添加一条数据
hmset user2 username rose age 21 //OK 一次添加多条数据
hget user username //"jack" 获取user里username的值
hmget user username age //"jack" "25" 一次获取多条数据
hgetall user2 //"username" "rose" "age" "21" 获取所有信息
hdel user username age //(integer)2 删除map中的age这条数据
del user2 //(integet)1 删除map
hincrby user age 5 //(integer)30 给user中的age+5
hexists user username //(integer)1 判断user中是否有username字段 没有返回0
hlen user //(integer)2 返回user长度
hkeys user //返回所有key
hvals user //返回所有值

字符串列表(list)

  • ArrayList
  • LinkedList

常用操作

1
2
3
4
5
6
7
8
9
10
11
12
lpush list1 a b c //(integer)3 在list1左侧添加a b c 返回添加后的长度 如果list1没有定义就创建一个空的
rpush list1 1 2 3 //(integer)6 在list1右侧添加数据
lrange list1 0 5 //"c b a 1 2 3" 读取list1 0-5的数据 位置可以为负数 从列表尾部读取
lpop list1 //"c" 从list1左侧弹出 返回弹出的数据 rpop从右边弹出
llen list1 //(integer)5 长度
lpushx list1 a //(integer)6 当list1存在的时候插入a 此时list1为“a b a 1 2 3"
lrem list1 2 a //(integer)2 删除list1从左边开始2个a 此时list1为”b 1 2 3"
lrem list1 -2 a //从尾部开始删除2个a
lrem list1 0 a //删除所有a
lset list1 3 mm //在list1的第三个位置插入mm 如果有了就替换
linsert list1 before b 11 //在list1的"b"前插入"11" after为后
rpoplpush list1 list2 //把list1的尾部弹出添加到list2的头部 使用场景:消息队列,防止丢失

字符串集合(set)

  • 不允许重复元素
  • 跟踪一些唯一性数据
  • 用于维护数据对象之间的关联关系

常用操作

1
2
3
4
5
6
7
8
9
10
sadd set1 a b c//(integer)3 在set1添加元素
srem set1 a b //(integer)2 删除元素
smembers set1 //获取全部元素
sismember set1 c //判断是否存在于
sdiff set1 set2 //获取两个set不同的部分
sinter set1 set2 //获取两个set的交集
sunion set1 set2 //并集
scard set1 //获取长度
srandmember set1 //随机获取set中的一个元素
sdiffstore set0 set1 set2 //把set1和set2相差的元素存入set0 还有sunionstore/sinterstire

有序字符串集合(sorted set)

  • 有序
  • 使用场景:排名,热点
1
2
3
4
5
6
7
8
9
10
11
12
zadd set1 20 zhans 30 lisi 40 wangwu//(integer)3 传入数据的分值来排序 返回添加的个数
zscore set1 zhans //"20"获取zhans的分值
zcard set1 //(integer)3 获取set长度
zrem set1 zhans //(integer)2 删除元素
zrange set1 0 -1 //显示set的所有元素 从小到大
zrange set1 0 -1 withscores //显示所有元素和分值
zreverange set1 0 -1 //从大到小显示
zremrangebyrank set1 0 4 //删除排名0到4的元素
zremrangebyscore set1 20 40 //删除分值20-40的元素
zrangebyscore set1 0 100 withscore limit 0 2 //显示分值0-100的前2个元素和分值
zincrby set1 3 lisi //给lisi加3分值
zcount set 20 40 //显示20到40分值的元素的个数

keys的操作

1
2
3
4
5
6
7
keys *  //显示所有的key
keys my? //显示my开头的key
del my1 my2 //删除my1,my2
exists my3 //判断是否存在
rename my1 my2 //把my1重命名为my2
expire my1 1000 //给my1设置超时时间(秒)
type my1 //显示my1的类型

特性

多数据库:0-15共16个数据库

1
2
select 0	//选择0号数据库
move user1 1 //移动key到其他数据库

支持事务

1
2
3
multi	//开始事务
exec //提交事务
discard //回滚

持久化

RDB持久化

在指定的间隔,把内存中的数据写入到磁盘

AOF持久化

已日志的方式,记录操作,启动的时候根据日志来恢复