Redis的五种存储数据结构和常用命令
2018-01-07 16:37
681 查看
菜鸟教程:http://www.runoob.com/redis/redis-tutorial.html
http://www.cnblogs.com/markhe/p/5689356.html
首先打开linux命令窗口,启动redis服务,进入cli命令行客户端
cd /usr/local/redis-3.0.7
bin/redis-server redis.conf
bin/redis-cli
语法:SET key value
127.0.0.1:6379> set test 123
2、取值
语法:GET key
127.0.0.1:6379> get test
"123“
语法:GETSET key value
127.0.0.1:6379> getset s2 222
"111"
127.0.0.1:6379> get s2
"222"
4、设置/获取多个键值
语法:
MSET key value [key value …]
MGET key [key …]
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> mget k1 k3
1) "v1"
2) "v3"
语法:DEL key
127.0.0.1:6379> del test
(integer) 1
递增数字 :当存储的字符串是整数时,Redis提供了一个实用的命令INCR,其作用是让当前键值递增,并返回递增后的值。
语法:INCR key
127.0.0.1:6379> incr num
(integer) 1
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> incr num
(integer) 3
增加指定的整数
语法:INCRBY key increment
127.0.0.1:6379> incrby num 2
(integer) 5
127.0.0.1:6379> incrby num 2
(integer) 7
127.0.0.1:6379> incrby num 2
(integer) 9
递减数值
语法:DECR key
127.0.0.1:6379> decr num
(integer) 9
127.0.0.1:6379> decr num
(integer) 8
减少指定的整数
语法:DECRBY key decrement
127.0.0.1:6379> decrby num 3
(integer)5
127.0.0.1:6379> decrby num 3
(integer)2
APPEND的作用是向键值的末尾追加value。如果键不存在则将该键的值设置为value,即相当于 SET key value。返回值是追加后字符串的总长度。
语法:APPEND key value
127.0.0.1:6379> set str hello
OK
127.0.0.1:6379> append str " world!"
(integer) 12
127.0.0.1:6379> get str
"hello world!"
STRLEN命令返回键值的长度,如果键不存在则返回0。
语法:STRLEN key
127.0.0.1:6379> strlen ss
(integer) 0
127.0.0.1:6379> set ss hello
OK
127.0.0.1:6379> strlen ss
(integer) 5
商品编号、订单号采用string的递增数字特性生成。
定义商品编号
key:items:id
127.0.0.1:6379> INCR items:id
(integer) 1
127.0.0.1:6379> INCR items:id
(integer) 2
微博数、粉丝数、网站访问量统计
秒杀、抢购等可以采用string递减数字特性生成
————————————————————————————————————————————
HashMap
hash叫散列类型,它提供了字段和字段值的映射。
HSET命令不区分插入和更新操作,当执行插入操作时HSET命令返回1,当执行更新操作时返回0。
一次设置一个字段值
语法:HSET key field value
127.0.0.1:6379> hset user username zhangsan
(integer) 1
一次设置多个字段值
语法:HMSET key field value [field value ...]
127.0.0.1:6379> hmset user age 20 username lisi
OK
当字段不存在时赋值,类似HSET,区别在于如果字段存在,该命令不执行任何操作
语法:HSETNX key field value
如果user中没有age字段则设置age值为30,否则不做任何操作
127.0.0.1:6379> hsetnx user age 30
(integer) 0
一次获取一个字段值
语法:HGET key field
127.0.0.1:6379> hget user username
"zhangsan“
一次获取多个字段值
语法:HMGET key field [field ...]
127.0.0.1:6379> hmget user age username
1) "20"
2) "lisi"
获取所有字段值
语法:HGETALL key
127.0.0.1:6379> hgetall user
1) "age"
2) "20"
3) "username"
4) "lisi"
可以删除一个或多个字段,返回值是被删除的字段个数
语法:HDEL key field [field ...]
127.0.0.1:6379> hdel user age
(integer) 1
127.0.0.1:6379> hdel user age name
(integer) 0
127.0.0.1:6379> hdel user age username
(integer) 1
语法:HINCRBY key field increment
将用户的年龄加2
127.0.0.1:6379> hincrby user age 2
(integer) 22
获取用户的年龄
127.0.0.1:6379> hget user age
"22“
语法:HEXISTS key field
查看user中是否有age字段
127.0.0.1:6379> hexists user age
(integer) 1
查看user中是否有name字段
127.0.0.1:6379> hexists user name
(integer) 0
语法:
HKEYS key
HVALS key
127.0.0.1:6379> hmset user age 20 name lisi
OK
127.0.0.1:6379> hkeys user
1) "age"
2) "name"
127.0.0.1:6379> hvals user
1) "20"
2) "lisi"
语法:HLEN key
127.0.0.1:6379> hlen user
(integer) 2
商品字段
【商品id、商品名称、商品描述、商品库存、商品好评】
定义商品信息的key
商品1001的信息在 Redis中的key为:[items:1001]
存储商品信息
192.168.101.3:7003> HMSET items:1001 id 3 name apple price 999.9
OK
获取商品信息
192.168.101.3:7003> HGET items:1001 id
"3"
192.168.101.3:7003> HGETALL items:1001
1) "id"
2) "3"
3) "name"
4) "apple"
5) "price"
6) "999.9"
List _________________________________________________________________________________________________
ArrayList和LinkedList的区别
Arraylist是使用数组来存储数据,特点:查询快、增删慢
Linkedlist是使用双向链表存储数据,特点:增删快、查询慢,但是查询链表两端的数据也很快。
redis的list采用双向链表存储
向列表左边增加元素
语法:LPUSH key value [value ...]
127.0.0.1:6379> lpush list1 1 2 3
(integer) 3
向列表右边增加元素
语法:RPUSH key value [value ...]
127.0.0.1:6379> rpush list1 4 5 6
(integer) 3
LRANGE命令是列表类型最常用的命令之一,获取列表中的某一片段,将返回start、stop之间的所有元素(包含两端的元素),索引从0开始。索引可以是负数,如:“-1”代表最后边的一个元素。
语法:LRANGE key start stop
127.0.0.1:6379> lrange list1 0 2
1) "3"
2) "2"
3) "1"
127.0.0.1:6379> lrange list1 0 -1
1) "3"
2) "2"
3) "1"
4) "4"
5) "5"
6) "6"
LPOP命令从列表左边弹出一个元素,会分两步完成:
第一步是将列表左边的元素从列表中移除
第二步是返回被移除的元素值。
语法:
LPOP key
RPOP key
127.0.0.1:6379> lpop list1
"3“
127.0.0.1:6379> rpop list1
"6“
语法:LLEN key
127.0.0.1:6379> llen list1
(integer) 4
LREM命令会删除列表中前count个值为value的元素,返回实际删除的元素个数。根据count值的不同,该命令的执行方式会有所不同:
当count>0时, LREM会从列表左边开始删除。
当count<0时, LREM会从列表后边开始删除。
当count=0时, LREM删除所有值为value的元素。
语法:LREM key count value
获得指定索引的元素值
语法:LINDEX key index
127.0.0.1:6379> lindex list1 2
"4"
设置指定索引的元素值
语法:LSET key index value
127.0.0.1:6379> lset list1 2 2
OK
127.0.0.1:6379> lrange list1 0 -1
1) "2"
2) "1"
3) "2"
4) "5"
指定范围和LRANGE一致
语法:LTRIM key start stop
127.0.0.1:6379> lrange list1 0 -1
1) "2"
2) "1"
3) "2"
4) "5"
127.0.0.1:6379> ltrim list1 0 2
OK
127.0.0.1:6379> lrange list1 0 -1
1) "2"
2) "1"
3) "2"
该命令首先会在列表中从左到右查找值为pivot的元素,然后根据第二个参数是BEFORE还是AFTER来决定将value插入到该元素的前面还是后面。
语法:LINSERT key BEFORE|AFTER pivot value
127.0.0.1:6379> lrange list1 0 -1
1) "2"
2) "1"
3) "2"
127.0.0.1:6379> linsert list1 after 2 4
(integer) 4
127.0.0.1:6379> lrange list1 0 -1
1) "2"
2) "4"
3) "1"
4) "2"
语法:RPOPLPUSH source destination
127.0.0.1:6379> rpoplpush list1 newlist
"1"
127.0.0.1:6379> lrange newlist 0 -1
1) "1"
127.0.0.1:6379> lrange list1 0 -1
1) "2"
2) "4"
3) "1"
思路:
在Redis中创建商品评论列表
用户发布商品评论,将评论信息转成json存储到list中。
用户在页面查询评论列表,从redis中取出json数据展示到页面。
定义商品评论列表key:
商品编号为1001的商品评论key【item: comment:1001】
127.0.0.1:6379> LPUSH item:comment:1001 '{"id":1,"name":"商品不错,很好!!","date":1430295077289}'
使用list可以构建队列系统。
比如:将redis用作日志收集器
补充:
面试题:redis中存入list,如果想要修改list中的某一条数据,是要将整个list删掉吗
http://www.cnblogs.com/wanzaixiaoxin/p/4934117.html
Set————————————————————————————————————————————————————
集合类型:无序、不可重复
列表类型:有序、可重复
增加
语法:SADD key member [member ...]
127.0.0.1:6379> sadd set1 a b c
(integer) 3
无法重复添加
127.0.0.1:6379> sadd set1 a
(integer) 0
删除
语法:SREM key member [member ...]
127.0.0.1:6379> srem set1 c d
(integer) 1
语法:SMEMBERS key
127.0.0.1:6379> smembers set1
1) "b"
2) "a”
语法:SISMEMBER key member
127.0.0.1:6379> sismember set1 a
(integer) 1
127.0.0.1:6379> sismember set1 h
(integer) 0
集合的差集运算 A-B
属于A并且不属于B的元素构成的集合。
语法:SDIFF key [key ...]
127.0.0.1:6379> sadd setA 1 2 3
(integer) 3
127.0.0.1:6379> sadd setB 2 3 4
(integer) 3
127.0.0.1:6379> sdiff setA setB
1) "1"
127.0.0.1:6379> sdiff setB setA
1) "4"
集合的交集运算 A ∩ B
属于A且属于B的元素构成的集合。
语法:SINTER key [key ...]
127.0.0.1:6379> sinter setA setB
1) "2"
2) "3"
集合的并集运算 A ∪ B
属于A或者属于B的元素构成的集合
语法:SUNION key [key ...]
127.0.0.1:6379> sunion setA setB
1) "1"
2) "2"
3) "3"
4) "4"
语法:SCARD key
127.0.0.1:6379> scard setA
(integer) 3
注意:由于集合是无序的,所有SPOP命令会从集合中随机选择一个元素弹出
语法:SPOP key
127.0.0.1:6379> spop setA
"1“
SortedSet————————————————————————————————————————————————————
Sortedset是有序集合(zset),可排序的,但是唯一。
和Sets相比,Sorted Sets增加了一个权重参数score,使得集合中的元素能够按score进行有序排列
向有序集合中加入一个元素和该元素的权重,如果该元素已经存在则会用新的权重替换原有的权重。返回值是新加入到集合中的元素个数,不包含之前已经存在的元素。
语法:ZADD key score member [score member ...]
127.0.0.1:6379> zadd scoreboard 80 zhangsan 89 lisi 94 wangwu
(integer) 3
127.0.0.1:6379> zadd scoreboard 97 lisi
(integer) 0
语法:ZSCORE key member
127.0.0.1:6379> zscore scoreboard lisi
"97"
移除有序集key中的一个或多个成员,不存在的成员将被忽略。
当key存在但不是有序集类型时,返回一个错误。
语法:ZREM key member [member ...]
127.0.0.1:6379> zrem scoreboard lisi
(integer) 1
获得排名在某个范围的元素列表
按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素(包含两端的元素)
语法:ZRANGE key start stop [WITHSCORES]
127.0.0.1:6379> zrange scoreboard 0 2
1) "zhangsan"
2) "wangwu"
3) "lisi“
按照元素分数从大到小的顺序返回索引从start到stop之间的所有元素(包含两端的元素)
语法:ZREVRANGE key start stop [WITHSCORES]
127.0.0.1:6379> zrevrange scoreboard 0 2
1) " lisi "
2) "wangwu"
3) " zhangsan “
如果需要获得元素的分数的可以在命令尾部加上WITHSCORES参数
127.0.0.1:6379> zrange scoreboard 0 1 WITHSCORES
1) "zhangsan"
2) "80"
3) "wangwu"
4) "94"
从小到大
语法:ZRANK key member
127.0.0.1:6379> ZRANK scoreboard lisi
(integer) 0
从大到小
语法:ZREVRANK key member
127.0.0.1:6379> ZREVRANK scoreboard zhangsan
(integer) 1
语法:ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
127.0.0.1:6379> ZRANGEBYSCORE scoreboard 90 97 WITHSCORES
1) "wangwu"
2) "94"
3) "lisi"
4) "97"
127.0.0.1:6379> ZRANGEBYSCORE scoreboard 70 100 limit 1 2
1) "wangwu"
2) "lisi"
返回值是更改后的分数
语法:ZINCRBY key increment member
127.0.0.1:6379> ZINCRBY scoreboard 4 lisi
"101“
语法:ZCARD key
127.0.0.1:6379> ZCARD scoreboard
(integer) 3
语法:ZCOUNT key min max
127.0.0.1:6379> ZCOUNT scoreboard 80 90
(integer) 1
语法:ZREMRANGEBYRANK key start stop
127.0.0.1:6379> ZREMRANGEBYRANK scoreboard 0 1
(integer) 2
127.0.0.1:6379> ZRANGE scoreboard 0 -1
1) "lisi"
语法:ZREMRANGEBYSCORE key min max
127.0.0.1:6379> zadd scoreboard 84 zhangsan
(integer) 1
127.0.0.1:6379> ZREMRANGEBYSCORE scoreboard 80 100
(integer) 1
需求:根据商品销售量对商品进行排行显示
思路:定义商品销售排行榜(sorted set集合),Key为items:sellsort,分数为商品销售量。
写入商品销售量:
商品编号1001的销量是9,商品编号1002的销量是10
192.168.101.3:7007> ZADD items:sellsort 9 1001 10 1002
商品编号1001的销量加1
192.168.101.3:7001> ZINCRBY items:sellsort 1 1001
商品销量前10名:
192.168.101.3:7001> ZRANGE items:sellsort 0 9 withscores
Redis 常用命令————————————————————————————————————————————
redis 127.0.0.1:6379> keys mylist*
1) "mylist"
2) "mylist5"
3) "mylist6"
4) "mylist7"
5) "mylist8"
确认一个key 是否存在
示例:从结果来看,数据库中不存在name 这个key,但是age 这个key 是存在的
redis 127.0.0.1:6379> exists name
(integer) 0
redis 127.0.0.1:6379> exists age
(integer) 1
删除一个key
redis 127.0.0.1:6379> del age
(integer) 1
redis 127.0.0.1:6379> exists age
(integer) 0
重命名key
示例:age 成功的被我们改名为age_new 了
redis 127.0.0.1:6379[1]> keys *
1) "age"
redis 127.0.0.1:6379[1]> rename age age_new
OK
redis 127.0.0.1:6379[1]> keys *
1) "age_new"
返回值的类型
示例:这个方法可以非常简单的判断出值的类型
redis 127.0.0.1:6379> type addr
string
redis 127.0.0.1:6379> type myzset2
zset
redis 127.0.0.1:6379> type mylist
list
redis在实际使用过程中更多的用作缓存,然而缓存的数据一般都是需要设置生存时间的,即:到期后数据销毁。
EXPIRE key seconds 设置key的生存时间(单位:秒)key在多少秒后会自动删除
TTL key 查看key生于的生存时间
PERSIST key 清除生存时间
PEXPIRE key milliseconds 生存时间设置单位为:毫秒
例子:
设置test的值为1
192.168.101.3:7002> set test 1
OK
获取test的值
192.168.101.3:7002> get test
"1"
设置test的生存时间为5秒
192.168.101.3:7002> EXPIRE test 5
(integer) 1
查看test的生存时间
192.168.101.3:7002> TTL test
(integer) 1
192.168.101.3:7002> TTL test
(integer) -2
获取test的值,已经删除
192.168.101.3:7002> get test
(nil)
http://www.cnblogs.com/markhe/p/5689356.html
首先打开linux命令窗口,启动redis服务,进入cli命令行客户端
cd /usr/local/redis-3.0.7
bin/redis-server redis.conf
bin/redis-cli
一、常用命令
1、赋值
语法:SET key value127.0.0.1:6379> set test 123
2、取值
语法:GET key
127.0.0.1:6379> get test
"123“
3、取值并赋值
语法:GETSET key value127.0.0.1:6379> getset s2 222
"111"
127.0.0.1:6379> get s2
"222"
4、设置/获取多个键值
语法:
MSET key value [key value …]
MGET key [key …]
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> mget k1 k3
1) "v1"
2) "v3"
5、删除
语法:DEL key127.0.0.1:6379> del test
(integer) 1
6、数值增减
递增数字 :当存储的字符串是整数时,Redis提供了一个实用的命令INCR,其作用是让当前键值递增,并返回递增后的值。语法:INCR key
127.0.0.1:6379> incr num
(integer) 1
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> incr num
(integer) 3
增加指定的整数
语法:INCRBY key increment
127.0.0.1:6379> incrby num 2
(integer) 5
127.0.0.1:6379> incrby num 2
(integer) 7
127.0.0.1:6379> incrby num 2
(integer) 9
递减数值
语法:DECR key
127.0.0.1:6379> decr num
(integer) 9
127.0.0.1:6379> decr num
(integer) 8
减少指定的整数
语法:DECRBY key decrement
127.0.0.1:6379> decrby num 3
(integer)5
127.0.0.1:6379> decrby num 3
(integer)2
7、向尾部追加值
APPEND的作用是向键值的末尾追加value。如果键不存在则将该键的值设置为value,即相当于 SET key value。返回值是追加后字符串的总长度。 语法:APPEND key value
127.0.0.1:6379> set str hello
OK
127.0.0.1:6379> append str " world!"
(integer) 12
127.0.0.1:6379> get str
"hello world!"
8、获取字符串长度
STRLEN命令返回键值的长度,如果键不存在则返回0。语法:STRLEN key
127.0.0.1:6379> strlen ss
(integer) 0
127.0.0.1:6379> set ss hello
OK
127.0.0.1:6379> strlen ss
(integer) 5
9、其它命令(自学)
二、应用
1、自增主键
定义商品编号
key:items:id
127.0.0.1:6379> INCR items:id
(integer) 1
127.0.0.1:6379> INCR items:id
(integer) 2
2、常规计数
秒杀、抢购等可以采用string递减数字特性生成
————————————————————————————————————————————
HashMap
hash叫散列类型,它提供了字段和字段值的映射。
一、常用命令
1、赋值
HSET命令不区分插入和更新操作,当执行插入操作时HSET命令返回1,当执行更新操作时返回0。一次设置一个字段值
语法:HSET key field value
127.0.0.1:6379> hset user username zhangsan
(integer) 1
一次设置多个字段值
语法:HMSET key field value [field value ...]
127.0.0.1:6379> hmset user age 20 username lisi
OK
当字段不存在时赋值,类似HSET,区别在于如果字段存在,该命令不执行任何操作
语法:HSETNX key field value
如果user中没有age字段则设置age值为30,否则不做任何操作
127.0.0.1:6379> hsetnx user age 30
(integer) 0
2、取值
一次获取一个字段值语法:HGET key field
127.0.0.1:6379> hget user username
"zhangsan“
一次获取多个字段值
语法:HMGET key field [field ...]
127.0.0.1:6379> hmget user age username
1) "20"
2) "lisi"
获取所有字段值
语法:HGETALL key
127.0.0.1:6379> hgetall user
1) "age"
2) "20"
3) "username"
4) "lisi"
3、删除字段
可以删除一个或多个字段,返回值是被删除的字段个数 语法:HDEL key field [field ...]
127.0.0.1:6379> hdel user age
(integer) 1
127.0.0.1:6379> hdel user age name
(integer) 0
127.0.0.1:6379> hdel user age username
(integer) 1
4、增加数字
语法:HINCRBY key field increment将用户的年龄加2
127.0.0.1:6379> hincrby user age 2
(integer) 22
获取用户的年龄
127.0.0.1:6379> hget user age
"22“
5、判断字段是否存在
语法:HEXISTS key field查看user中是否有age字段
127.0.0.1:6379> hexists user age
(integer) 1
查看user中是否有name字段
127.0.0.1:6379> hexists user name
(integer) 0
6、只获取字段名或字段值
语法:HKEYS key
HVALS key
127.0.0.1:6379> hmset user age 20 name lisi
OK
127.0.0.1:6379> hkeys user
1) "age"
2) "name"
127.0.0.1:6379> hvals user
1) "20"
2) "lisi"
7、获取字段数量
语法:HLEN key127.0.0.1:6379> hlen user
(integer) 2
二、应用
1、存储商品信息、用户信息等
商品字段【商品id、商品名称、商品描述、商品库存、商品好评】
定义商品信息的key
商品1001的信息在 Redis中的key为:[items:1001]
存储商品信息
192.168.101.3:7003> HMSET items:1001 id 3 name apple price 999.9
OK
获取商品信息
192.168.101.3:7003> HGET items:1001 id
"3"
192.168.101.3:7003> HGETALL items:1001
1) "id"
2) "3"
3) "name"
4) "apple"
5) "price"
6) "999.9"
List _________________________________________________________________________________________________
ArrayList和LinkedList的区别
Arraylist是使用数组来存储数据,特点:查询快、增删慢
Linkedlist是使用双向链表存储数据,特点:增删快、查询慢,但是查询链表两端的数据也很快。
redis的list采用双向链表存储
一、常用命令
1、向列表两端增加元素
向列表左边增加元素 语法:LPUSH key value [value ...]
127.0.0.1:6379> lpush list1 1 2 3
(integer) 3
向列表右边增加元素
语法:RPUSH key value [value ...]
127.0.0.1:6379> rpush list1 4 5 6
(integer) 3
2、查看列表
LRANGE命令是列表类型最常用的命令之一,获取列表中的某一片段,将返回start、stop之间的所有元素(包含两端的元素),索引从0开始。索引可以是负数,如:“-1”代表最后边的一个元素。语法:LRANGE key start stop
127.0.0.1:6379> lrange list1 0 2
1) "3"
2) "2"
3) "1"
127.0.0.1:6379> lrange list1 0 -1
1) "3"
2) "2"
3) "1"
4) "4"
5) "5"
6) "6"
3、从列表两端弹出元素
LPOP命令从列表左边弹出一个元素,会分两步完成:第一步是将列表左边的元素从列表中移除
第二步是返回被移除的元素值。
语法:
LPOP key
RPOP key
127.0.0.1:6379> lpop list1
"3“
127.0.0.1:6379> rpop list1
"6“
4、获取列表中元素的个数
语法:LLEN key127.0.0.1:6379> llen list1
(integer) 4
5、删除列表中指定的值
LREM命令会删除列表中前count个值为value的元素,返回实际删除的元素个数。根据count值的不同,该命令的执行方式会有所不同: 当count>0时, LREM会从列表左边开始删除。
当count<0时, LREM会从列表后边开始删除。
当count=0时, LREM删除所有值为value的元素。
语法:LREM key count value
6、获得/设置指定索引的元素值
获得指定索引的元素值语法:LINDEX key index
127.0.0.1:6379> lindex list1 2
"4"
设置指定索引的元素值
语法:LSET key index value
127.0.0.1:6379> lset list1 2 2
OK
127.0.0.1:6379> lrange list1 0 -1
1) "2"
2) "1"
3) "2"
4) "5"
7、只保留列表指定片段
指定范围和LRANGE一致 语法:LTRIM key start stop
127.0.0.1:6379> lrange list1 0 -1
1) "2"
2) "1"
3) "2"
4) "5"
127.0.0.1:6379> ltrim list1 0 2
OK
127.0.0.1:6379> lrange list1 0 -1
1) "2"
2) "1"
3) "2"
8、向列表中插入元素
该命令首先会在列表中从左到右查找值为pivot的元素,然后根据第二个参数是BEFORE还是AFTER来决定将value插入到该元素的前面还是后面。 语法:LINSERT key BEFORE|AFTER pivot value
127.0.0.1:6379> lrange list1 0 -1
1) "2"
2) "1"
3) "2"
127.0.0.1:6379> linsert list1 after 2 4
(integer) 4
127.0.0.1:6379> lrange list1 0 -1
1) "2"
2) "4"
3) "1"
4) "2"
9、将元素从一个列表转移到另一个列表中
语法:RPOPLPUSH source destination127.0.0.1:6379> rpoplpush list1 newlist
"1"
127.0.0.1:6379> lrange newlist 0 -1
1) "1"
127.0.0.1:6379> lrange list1 0 -1
1) "2"
2) "4"
3) "1"
二、应用
1、商品评论列表
思路:在Redis中创建商品评论列表
用户发布商品评论,将评论信息转成json存储到list中。
用户在页面查询评论列表,从redis中取出json数据展示到页面。
定义商品评论列表key:
商品编号为1001的商品评论key【item: comment:1001】
127.0.0.1:6379> LPUSH item:comment:1001 '{"id":1,"name":"商品不错,很好!!","date":1430295077289}'
2、队列应用
使用list可以构建队列系统。比如:将redis用作日志收集器
补充:
面试题:redis中存入list,如果想要修改list中的某一条数据,是要将整个list删掉吗
http://www.cnblogs.com/wanzaixiaoxin/p/4934117.html
Set————————————————————————————————————————————————————
集合类型:无序、不可重复
列表类型:有序、可重复
一、常用命令
1、增加/删除元素
增加语法:SADD key member [member ...]
127.0.0.1:6379> sadd set1 a b c
(integer) 3
无法重复添加
127.0.0.1:6379> sadd set1 a
(integer) 0
删除
语法:SREM key member [member ...]
127.0.0.1:6379> srem set1 c d
(integer) 1
2、获得集合中的所有元素
语法:SMEMBERS key127.0.0.1:6379> smembers set1
1) "b"
2) "a”
3、判断元素是否在集合中
语法:SISMEMBER key member127.0.0.1:6379> sismember set1 a
(integer) 1
127.0.0.1:6379> sismember set1 h
(integer) 0
4、运算命令
集合的差集运算 A-B属于A并且不属于B的元素构成的集合。
语法:SDIFF key [key ...]
127.0.0.1:6379> sadd setA 1 2 3
(integer) 3
127.0.0.1:6379> sadd setB 2 3 4
(integer) 3
127.0.0.1:6379> sdiff setA setB
1) "1"
127.0.0.1:6379> sdiff setB setA
1) "4"
集合的交集运算 A ∩ B
属于A且属于B的元素构成的集合。
语法:SINTER key [key ...]
127.0.0.1:6379> sinter setA setB
1) "2"
2) "3"
集合的并集运算 A ∪ B
属于A或者属于B的元素构成的集合
语法:SUNION key [key ...]
127.0.0.1:6379> sunion setA setB
1) "1"
2) "2"
3) "3"
4) "4"
5、获得集合中元素的个数
语法:SCARD key127.0.0.1:6379> scard setA
(integer) 3
6、从集合中弹出一个元素
注意:由于集合是无序的,所有SPOP命令会从集合中随机选择一个元素弹出 语法:SPOP key
127.0.0.1:6379> spop setA
"1“
SortedSet————————————————————————————————————————————————————
Sortedset是有序集合(zset),可排序的,但是唯一。
和Sets相比,Sorted Sets增加了一个权重参数score,使得集合中的元素能够按score进行有序排列
一、常用命令
1、增加元素
向有序集合中加入一个元素和该元素的权重,如果该元素已经存在则会用新的权重替换原有的权重。返回值是新加入到集合中的元素个数,不包含之前已经存在的元素。 语法:ZADD key score member [score member ...]
127.0.0.1:6379> zadd scoreboard 80 zhangsan 89 lisi 94 wangwu
(integer) 3
127.0.0.1:6379> zadd scoreboard 97 lisi
(integer) 0
2、获取元素的权重
语法:ZSCORE key member127.0.0.1:6379> zscore scoreboard lisi
"97"
3、删除元素
移除有序集key中的一个或多个成员,不存在的成员将被忽略。当key存在但不是有序集类型时,返回一个错误。
语法:ZREM key member [member ...]
127.0.0.1:6379> zrem scoreboard lisi
(integer) 1
4、获得排名在某个范围的元素列表
获得排名在某个范围的元素列表 按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素(包含两端的元素)
语法:ZRANGE key start stop [WITHSCORES]
127.0.0.1:6379> zrange scoreboard 0 2
1) "zhangsan"
2) "wangwu"
3) "lisi“
按照元素分数从大到小的顺序返回索引从start到stop之间的所有元素(包含两端的元素)
语法:ZREVRANGE key start stop [WITHSCORES]
127.0.0.1:6379> zrevrange scoreboard 0 2
1) " lisi "
2) "wangwu"
3) " zhangsan “
如果需要获得元素的分数的可以在命令尾部加上WITHSCORES参数
127.0.0.1:6379> zrange scoreboard 0 1 WITHSCORES
1) "zhangsan"
2) "80"
3) "wangwu"
4) "94"
5、获取元素的排名
从小到大语法:ZRANK key member
127.0.0.1:6379> ZRANK scoreboard lisi
(integer) 0
从大到小
语法:ZREVRANK key member
127.0.0.1:6379> ZREVRANK scoreboard zhangsan
(integer) 1
6、获得指定分数范围的元素
语法:ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]127.0.0.1:6379> ZRANGEBYSCORE scoreboard 90 97 WITHSCORES
1) "wangwu"
2) "94"
3) "lisi"
4) "97"
127.0.0.1:6379> ZRANGEBYSCORE scoreboard 70 100 limit 1 2
1) "wangwu"
2) "lisi"
7、增加某个元素的分数
返回值是更改后的分数 语法:ZINCRBY key increment member
127.0.0.1:6379> ZINCRBY scoreboard 4 lisi
"101“
8、获得集合中元素的数量
语法:ZCARD key127.0.0.1:6379> ZCARD scoreboard
(integer) 3
9、获得指定分数范围内的元素个数
语法:ZCOUNT key min max127.0.0.1:6379> ZCOUNT scoreboard 80 90
(integer) 1
10、按照排名范围删除元素
语法:ZREMRANGEBYRANK key start stop127.0.0.1:6379> ZREMRANGEBYRANK scoreboard 0 1
(integer) 2
127.0.0.1:6379> ZRANGE scoreboard 0 -1
1) "lisi"
11、按照分数范围删除元素
语法:ZREMRANGEBYSCORE key min max127.0.0.1:6379> zadd scoreboard 84 zhangsan
(integer) 1
127.0.0.1:6379> ZREMRANGEBYSCORE scoreboard 80 100
(integer) 1
二、应用
1、排行榜
需求:根据商品销售量对商品进行排行显示思路:定义商品销售排行榜(sorted set集合),Key为items:sellsort,分数为商品销售量。
写入商品销售量:
商品编号1001的销量是9,商品编号1002的销量是10
192.168.101.3:7007> ZADD items:sellsort 9 1001 10 1002
商品编号1001的销量加1
192.168.101.3:7001> ZINCRBY items:sellsort 1 1001
商品销量前10名:
192.168.101.3:7001> ZRANGE items:sellsort 0 9 withscores
Redis 常用命令————————————————————————————————————————————
一、常用命令
1、返回满足给定pattern 的所有key
redis 127.0.0.1:6379> keys mylist*1) "mylist"
2) "mylist5"
3) "mylist6"
4) "mylist7"
5) "mylist8"
2、exists
确认一个key 是否存在示例:从结果来看,数据库中不存在name 这个key,但是age 这个key 是存在的
redis 127.0.0.1:6379> exists name
(integer) 0
redis 127.0.0.1:6379> exists age
(integer) 1
3、del
删除一个keyredis 127.0.0.1:6379> del age
(integer) 1
redis 127.0.0.1:6379> exists age
(integer) 0
4、rename
重命名key示例:age 成功的被我们改名为age_new 了
redis 127.0.0.1:6379[1]> keys *
1) "age"
redis 127.0.0.1:6379[1]> rename age age_new
OK
redis 127.0.0.1:6379[1]> keys *
1) "age_new"
5、type
返回值的类型示例:这个方法可以非常简单的判断出值的类型
redis 127.0.0.1:6379> type addr
string
redis 127.0.0.1:6379> type myzset2
zset
redis 127.0.0.1:6379> type mylist
list
6、设置key的生存时间
redis在实际使用过程中更多的用作缓存,然而缓存的数据一般都是需要设置生存时间的,即:到期后数据销毁。EXPIRE key seconds 设置key的生存时间(单位:秒)key在多少秒后会自动删除
TTL key 查看key生于的生存时间
PERSIST key 清除生存时间
PEXPIRE key milliseconds 生存时间设置单位为:毫秒
例子:
设置test的值为1
192.168.101.3:7002> set test 1
OK
获取test的值
192.168.101.3:7002> get test
"1"
设置test的生存时间为5秒
192.168.101.3:7002> EXPIRE test 5
(integer) 1
查看test的生存时间
192.168.101.3:7002> TTL test
(integer) 1
192.168.101.3:7002> TTL test
(integer) -2
获取test的值,已经删除
192.168.101.3:7002> get test
(nil)
相关文章推荐
- redis五种数据类型和常用命令及适用场景
- Redis的介绍和常用数据类型结构命令的总结
- redis的五种常用数据结构
- redis五种数据类型及常用命令-笔记
- Redis的单机安装和5中数据结构的常用命令
- [redis]redis五种数据类型命令汇总整理
- iOS之应用数据存储常用的五种方式(二)
- Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构
- Redis常用数据类型介绍、使用场景及其操作命令
- Redis常用数据类型介绍、使用场景及其操作命令
- 使用stringRedisTemplate操作redis hash结构数据只能存储String类型的问题
- Redis常用数据类型介绍、使用场景及其操作命令
- [置顶] Redis String类型数据常用的16条命令总结
- redis常用五种数据类型的使用
- redis基本数据类型和常用命令操作
- Redis学习笔记(四)—— redis的常用命令和五大数据类型的简单使用
- 数据存储的常用结构 堆栈、队列、数组、链表
- Redis 数据结果理解 redis常用命令
- Redis数据类型和常用命令
- Android中常用的五种数据存储方式