string 操作
String举例:
添加/修改一个 string:
127.0.0.1:6379> set test 123
重新赋值:
127.0.0.1:6379>set test 456
查询一个string:
127.0.0.1:6379>get test
append追加一个string:
127.0.0.1:6379> append test 456
注:(integer) 6(返回字符串的长度)
删除一个key:
127.0.0.1:6379>del test
返回字符串长度
127.0.0.1:6379>strlen test
hash 操作
hash是一个string类型的field和value的映射表,可以看做是一个Map表结构容器。
添加一个 hash:
127.0.0.1:6379>HMSET hashtest name xiaoming age 12
返回整个 hash:
127.0.0.1:6379>HGETALL hashtest
1)"name"
2)"xiaoming"
3)"age"
4)"12"
返回hash中的一个字段:
127.0.0.1:6379>hget hashtest name
"xiaoming"
返回hash中的多个个字段:
127.0.0.1:6379>HMGET hashtest name age
1)"xiaoming"
2)"12"
删除一个hash中的字段:
127.0.0.1:6379>HDEL hashtest age
127.0.0.1:6379>HGETALL hashtest
1)"name"
2)"xiaoming"
添加/修改hash中的字段:
127.0.0.1:6379> HSET hashtest name xiaoxin
(integer) 0
127.0.0.1:6379> HGETALL hashtest
1) "name"
2) "xiaoxin"
查看指定键是否存在:
127.0.0.1:6379> HEXISTS hashtest age
(integer) 0
注:返回整数1或0。
1表示哈希包含该字段。
0 表示哈希不包含该字段,或key不存在。
补:
查看所有存在的键:
127.0.0.1:6379> KEYS *
清空所有数据库数据:
127.0.0.1:6379> FLUSHALL
清空当前数据库数据:
127.0.0.1:6379> FLUSHDB
list操作
添加元素到列表头:
127.0.0.1:6379>LPUSH listtest a b c
(integer)4
获取列表指定范围内的元素,LRANGElist_name index_start index_end 如:
127.0.0.1:6379> LRANGE listtest 0 2
1)"c"
2)"b"
3)"a"
添加元素到列表尾:
127.0.0.1:6379>RPUSH listtest 1 2 3
(integer)6
查看key对应的value类型:
127.0.0.1:6379>TYPE listtest
list
通过索引获取列表中的值:
127.0.0.1:6379>LINDEX listtest 3
"1"
获取列表长度:
127.0.0.1:6379>LLEN listtest
(integer)6
移除元素:
lremlisttest count value
count > 0 : 从表头开始向表尾搜索,移除与value 相等的元素,数量为 count 。
count < 0 : 从表尾开始向表头搜索,移除与 value相等的元素,数量为 count 的绝对值。
count = 0 : 移除表中所有与 value 相等的值。
例子:
127.0.0.1:6379>LRANGE list 0 2
1)"3"
2)"3"
3)"1"
127.0.0.1:6379>LREM list 1 3
(integer)1
127.0.0.1:6379>LRANGE list 0 2
1)"3"
2)"1"
删除其中某条记录(示例):
127.0.0.1:6379>LPUSH list qq ww ee qq qq tt
(integer)6
127.0.0.1:6379>LRANGE list 0 5
1)"tt"
2)"qq"
3)"qq"
4)"ee"
5)"ww"
6)"qq"
127.0.0.1:6379>LSET list 3 flag
OK
127.0.0.1:6379>LRANGE list 0 5
1)"tt"
2)"qq"
3)"qq"
4)"flag"
5)"ww"
6)"qq"
127.0.0.1:6379>LREM list 0 flag
(integer)1
127.0.0.1:6379>
set操作
set是string类型的无序集合。集合成员是唯一的,不允许重复
添加数据到集合:
127.0.0.1:6379> SADD settest 1 2 3 4 5
(integer) 5
返回集合数据:
127.0.0.1:6379> SMEMBERS settest
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
获取集合数量:
127.0.0.1:6379> SCARD settest
(integer) 5
移除集合中的值:
127.0.0.1:6379> SREM settest 5
(integer) 1
sorted set操作
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
有序集合特点:
1.有序集合中每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
2.有序集合的成员是唯一的,但分数(score)却可以重复。
3.有序集合和集合一样也是string类型元素的集合,且不允许重复的成员
添加元素到集合:
127.0.0.1:6379> ZADD sortset 1 a
(integer) 1
注:如果value(a)存在,更新分数,否则添加新value,分数可以相同。
返回指定元素的分数:
127.0.0.1:6379> ZSCORE sortset a
"1"
查询元素,ZRANGE sortset start_index end_index:
127.0.0.1:6379> ZRANGE sortset 0 1
1) "a"
移除集合中的元素:
127.0.0.1:6379> ZREM sortset a
根据分数区间查询元素
127.0.0.1:6379> ZCOUNT zset 1 10
3.6 有序集合与列表(EXT):
有序集合类型在某些方面和列表类型有些相似:
(1)二者都是有序的。
(2)二者都可以获得某一范围的元素。
但是二者有着很大的区别,这使得它们的应用场景也是不同的:
(1)列表类型是通过链表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问中间数据的速度会较慢,所以它更加适合实现如“新鲜事”或“日志”这样很少访问中间元素的应用。
(2)有序集合类型是使用散列表和跳跃表(Skip list)实现的,所以即使读取位于中间部分的数据速度也很快。
(3)列表中不能简单地调整某个元素的位置,但是有序集合可以。
(4)有序集合要比列表类型更耗费内存。有序集合类型算得上是 Redis的5种数据类型中最高级的类型。