Redis是一个开源的key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集等,而且这些操作都是原子性的。在此基础上,Redis支持各种不同方式的排序,与memcahed一样,为了保证效率,数据库都是缓存在内存中。区别是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加记录文件,并且在此基础上实现了master-slave(主从)同步。
1.Redis可保存数据类型
字符串、列表、有序集合、哈希表、集合
2.常规操作
KEYS * 查看KEY (键) 支持通配符
DEL删除给定的一个或多个key
EXISTS检查是否存在
EXPIRE设定生存时间
TTL以秒未单位返回过期时间
DUMP RESTORE 序列化与反序列化
PEXIRE PTTL PERSIST以毫秒为单位
RENAME变更KEY名
SORT键值排序,有非数字时报错
TYPE返回键所存储值的类型
3.字符串
SET name “zhangsan”
GET name
一个键最大能存储512MB
127.0.0.1:6380> set lisi 26
OK
127.0.0.1:6380> get lisi
"26"
127.0.0.1:6380> type lisi
string
append将value追加到key原来的值的末尾
127.0.0.1:6380> append lisi ss
(integer) 5
127.0.0.1:6380> get lisi
"123ss"
mget mset同时设置一个或多个键值对
127.0.0.1:6380> mset lisi 123 wangwu 22
OK
127.0.0.1:6380> mget lisi wangwu
1) "123"
2) "22"
STRLEN返回字符串长度
127.0.0.1:6380> strlen lisi
(integer) 5
INCR DECR将值增或减1 (必须是整数)
127.0.0.1:6380> decr age
(integer) 33
127.0.0.1:6380> decr age
(integer) 32
127.0.0.1:6380> decr age
(integer) 31
127.0.0.1:6380> incr age
(integer) 32
127.0.0.1:6380> incr age
(integer) 33
127.0.0.1:6380> incr age
(integer) 34
INCRBY DECRBY减去指定量 (必须是整数)
127.0.0.1:6380> incrby age 100
(integer) 120
127.0.0.1:6380> decrby age 100
(integer) 20
127.0.0.1:6380> get age
"20"
4.Hash(哈希)
Redis hash是一个键值对集合。
Redis hash是一个string类型的field和value的映射表
hash特别适合用于存储对象。
每个hash可以存储2^32-1键值对
hset hget 设置返回单个值
127.0.0.1:6380> hset user1 name zhangsan
(integer) 0
127.0.0.1:6380> type user1
hash
127.0.0.1:6380> hget user1 age
"22"
127.0.0.1:6380> hget user1 name
"zhangsan"
hmset hmget设置返回多个值
127.0.0.1:6380> hmset user2 id 1 name zhangsan age 22
OK
127.0.0.1:6380> hmget user2 id name age
1) "1"
2) "zhangsan"
3) "22"
hgetall 返回KEY的所有键值
127.0.0.1:6380> hgetall user1
1) "name"
2) "zhangsan"
3) "age"
4) "22"
5) "sex"
6) "man"
hexsits hlen
hkeys hvals获取所有字段或值
hdel删除key 中的一个或多个指定域
127.0.0.1:6380> del user1 //删除整个数据
(integer) 1
127.0.0.1:6380> hdel user2 age //删除其中的一个或多个key和value
(integer) 1
127.0.0.1:6380> hgetall user2
1) "id"
2) "1"
3) "name"
4) "zhangsan"
5、LIST列表
Redis列表是简单的字符串列表
按照插入顺序排序每个
LIST可以存储2^32-1键值对
lpush 将一个或多个值插入到列表头部
127.0.0.1:6380> lpush list1 bmw toyota honda 123
(integer) 4
127.0.0.1:6380> type list
none
127.0.0.1:6380> type list1
list
127.0.0.1:6380> lrange list1 0 10
1) "123"
2) "honda"
3) "toyota"
4) "bmw"
rpush 将一个或多个值插入到列表尾部
127.0.0.1:6380> rpush list1 BYD
(integer) 6
127.0.0.1:6380> lrange list1 0 10
1) "volvo"
2) "123"
3) "honda"
4) "toyota"
5) "bmw"
6) "BYD"
127.0.0.1:6380> rpush list1 bao1
(integer) 5
127.0.0.1:6380> rpush list1 bao2
(integer) 6
lpop rpop 移除表头/尾的元素
127.0.0.1:6380> lpop list1
"volvo"
127.0.0.1:6380> lrange list1 0 10
1) "123"
2) "honda"
3) "toyota"
4) "bmw"
5) "BYD"
127.0.0.1:6380> rpop list1
"BYD"
127.0.0.1:6380> lrange list1 0 10
1) "123"
2) "honda"
3) "toyota"
4) "bmw"
llen返回列表长度
127.0.0.1:6380> llen list1
(integer) 4
lrange返回指定的元素
127.0.0.1:6380> lrange list1 0 1
1) "123"
2) "honda"
lrem list2 2 morning 删除前两个morning
127.0.0.1:6380> lrange list2 0 10
1) "hello"
2) "you"
3) "hello"
4) "morning"
5) "lisi"
6) "zhangsan"
7) "2"
8) "1"
9) "morning"
10) "morning"
127.0.0.1:6380> lrem list2 2 morning
(integer) 2
127.0.0.1:6380> lrange list2 0 10
1) "hello"
2) "you"
3) "hello"
4) "lisi"
5) "zhangsan"
6) "2"
7) "1"
8) "morning"
lrem list2 -1 morning 删除最后一个morning
lrem list2 0 hello 删除所有hello
127.0.0.1:6380> lrange list2 0 10
1) "you"
2) "lisi"
3) "zhangsan"
4) "2"
5) "1"
lindex 返回列表key中下标为index的元素
127.0.0.1:6380> lindex list1 0
"bao1111"
127.0.0.1:6380> lrange list1 0 10
1) "bao1111"
2) "honda"
3) "toyota"
4) "bmw"
5) "bao1"
6) "bao2"
7) "bao3"
lset key index value 将列表key下标为index的元素的值设置为value
127.0.0.1:6380> lset list1 0 bao1111
OK
127.0.0.1:6380> lrange list1 0 10
1) "bao1111"
2) "honda"
3) "toyota"
linsert 插入数据位于某元素之前或之后
linsert key befor|after pivot value
127.0.0.1:6380> linsert list1 before toyota test!
(integer) 9
127.0.0.1:6380>
127.0.0.1:6380> lrange list1 0 10
1) "bao1111"
2) "honda"
3) "test!"
4) "toyota"
5) "bmw"
6) "baozi0"
7) "bao1"
8) "bao2"
9) "bao3"
127.0.0.1:6380> linsert list1 after bmw baozi0
(integer) 8
127.0.0.1:6380> lrange list1 0 10
1) "bao1111"
2) "honda"
3) "toyota"
4) "bmw"
5) "baozi0"
6) "bao1"
7) "bao2"
8) "bao3"
6.SortedSet(有序集合)
redis有序集合和集合一样,也是string类型元素的集合,且不允许重复的成员。
每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序
有序集合的成员是唯一的,但分数(score)却可以重复
zadd key score member
zcard返回有序集key的基数
zcount key min max
127.0.0.1:6380>zcount salary 2000 5000 //计算2000到5000之间的数
zscore key member 返回值
zincrby key increment member //为score值加上增量increment,负数为减法
zincrby salary 2000 tom
zrange key start stop 返回指定区间成员
zrange salary 0 -1 withscores 显示所有
zrangebyscore 有序集成员按score值递增(从小到大)次序排列
127.0.0.1:6380>zrangebyscore salary -inf +inf whithscores
zrank key member显示排名
zrange salary 0-1 withscores
zrang salary tom
zrem key member移动一个或多个成员
zremrangebyrank zremrangebyscore移除
zrevrange key start stop [withscores] 递减返回值