redis如果设置了密码,如果登录后没有加上密码,会提示“(error) NOAUTH Authentication required.”
所以需要加密码登录redis库: redis-cli -a 123456 (-a是指定密码)
登录操作: redis-cli -p 6379 -a 123456 -h 192.168.159.131
-p是指定端口 ; -a是指定密码 ; -h指定要连接的hostname
redis string 类型常用命令:
常用命令:keys、set、setnx、setex、ttl、mset、get、mget
这是一种
普通的key/value存储,字符串存储的
应用场景:
String是最常用的一种数据类型,
普通的key/value存储都可以归为此类
1.查看所有的key
keys * #将列出所有的key
keys k2 #那么只会列出k2
2.赋值,使用set,使用set如果再次给这个key赋值时,会覆盖掉原来的值
使用setnx赋值时,不会覆盖掉原来的值,不改变原值,如果key存在且存在值,那么会返回一个“(integer) 0”信息,如果key值不存在,那么会直接创建key和值,返回(integer) 1的信息
3.设置key的过期时间,使用setex,有效单位是秒
如setex k3 10 1 #给k3设定值,10代表10秒,1代表k3的值,那么10秒后这个key会自动过期
使用ttl可以查看设置的过期时间还剩下多久。如下,给k3设置100秒,使用ttl查看k3剩余的有效期。
4.连续设置多个key,使用mset
mset k1 1 k2 2 k3 3 #设置k1=1,k2=2,k3=3
5.获取值get
获取某个key的值
get k1
6.获取多个key的值使用mget
mget k1 k2 k3
7. incr 给键值加1,只针对值是数字
8. decr 给键值减1 ,只针对数字
9.incrby 给键值加指定的值,如加10 : incrby key 10
10.exists 判断key是不是存在,不存在返回0
11. strlen 判断键的值得长度
12. append 给值追加一个值
hash数据类型操作
常用命令:
hset、hmset、hget、hgetall、hmget、hdel、hkeys、hvals、hlen
如我们要
应用场景:
存储一个用户信息对象数据
,包含以下信息:用户ID为查找的key,存储的value用户对象包含姓名,年龄,生日等信息,
是哈希表
格式: hmset 总key key1 values1 key2 value2
1.单独建立hash表 hset
hset user1 name wzq #建用户user1,名字是wzq
hset user1 age 30 #设定user1的年龄
hset user1 job IT #设定用户user1的职业是IT
2.单独获取hget、全部获取hgetall、单独获取多个hmget
hgetall user1 #查看user1用户的所有的key和value
hget user1 age #单独查看user1用户的年龄
hmget user1 name age #单独查看名字和年龄
3.批量建立表hmset
hmset user2 name wzq2 age 27 job IT #整量建立user2的名字、年龄、工作
hgetall user2 #获取全部user2的值
4. 删除键值hdel
hdel user2 name #删除user2的名字
5.hkeys打印所有的key,hvals打印所有的value
6.hlen查看有多少个key,以数值显示出。
list类型操作
常用命令:lpush、lpop、rpush、rpop、lrange、linsert、lset、lindex、llen
应用场景:
Redis list的应用场景非常多,也是Redis最重要的数据结构之一,
列表数据
。比如twitter的关注列表,粉丝列表等都可以用Redis的list结构来实现。
1.从左侧插入一个数据lpush = left push,相当于从中间分开,从下往上添加
如lpush list 1 #插入1这个数据到list下
lpush list 2 #插入2这个数据
lpush list 3 #插入3这个数据
lrange list 0 -1#表示查从头到尾的列表,0表示头,-1是倒数第1个,也就是尾
有左就有右,那么从右侧插入就是rpush = right push ,方法和左一样,相当于从中间分开,从上往下添加
2.从左侧取出数值lpop(取出后相当于删除)
从右侧取出数值rpop(取出后相当于删除)
lpop list 取出的是从左侧插入的最近的一个值,就新插入的数据
rpop list 取出的是从右侧最近的值
127.0.0.1:6379> lrange list 0 -1
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> lpop list
"c"
127.0.0.1:6379> lrange list 0 -1
1) "b"
2) "a"
3. linsert 左侧插入元素,需要跟上
after、before
等,即在..之前插入或者在..后
127.0.0.1:6379> lrange list 0 -1
1) "b"
2) "a"
3) "1"
127.0.0.1:6379> linsert list before a e #在a的前面插入一个e 前面也就是left
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "b"
2) "e"
3) "a"
4.lset 直接修改(靠下标)
127.0.0.1:6379> lrange list 0 -1
1) "b"
2) "e"
3) "a"
4) "1"
127.0.0.1:6379> lset list 2 aa #将下标为2的a换成aa
OK
127.0.0.1:6379> lrange list 0 -1
1) "b"
2) "e"
3) "aa"
4) "1"
我理解的这个是直接修改了下标的那个元素,注意0也是一个下标,代表第一个元素
5.lindex查看某个元素,只是提取出元素,注意需要使用下标表示,不做修改,而rpop和lpop会修改list
127.0.0.1:6379> lrange list 0 -1
1) "b"
2) "e"
3) "aa"
4) "1"
127.0.0.1:6379> lindex list 0 #0表示下标,也即是第一个元素
"b"
127.0.0.1:6379> lindex list 1
"e"
127.0.0.1:6379> lindex list 2
"aa"
127.0.0.1:6379> lindex list 3
"1"
6. llen查看list中有多少个元素
llen list
set数据类型操作
常用命令:sadd、smembers、srem、spop、sdiff(差集)、sdiffstore、 sinter(交集)、sinterstore、sunion(并集)、sunionstore、sismember(判断元素是否属某个集合)、srandmember(随机取不删除)
应用场景:
Redis set对外提供的功能与list类似是一个
列表
的功能,特殊之处在于set是
可以自动排重
的,当你需要存储一个列表数据,又
不希望出现重复数据
时,set 是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。
1. sadd 创建集合
sadd abc 1
sadd abc 2
sadd abc 3 #abc是集合名字key,1、2、3是集合内的元素value
2. smembers 常看集合中的元素
smembers abc #将列出abc集合下的所有元素
3. srem 删除集合中的元素
srem abc 3 #删除abc集合中的3
smembers abc #查看yuan元素
4. spop 随机抽取一个元素,并删除
spop abc #随机删除某个元素,不指定特定元素
5. sdiff 求差集,这个是某个集合相对于另一个集合多了哪些元素
127.0.0.1:6379> smembers set3 #set3的集合元素
1) "6"
2) "7"
3) "4"
4) "5"
5) "1"
127.0.0.1:6379> smembers set4 #set4的集合元素
1) "1"
2) "2"
3) "3"
4) "4"
5) "5
127.0.0.1:6379> sdiff set3 set4 #集合set3相对于set4多了哪几个元素,不同于sdiff set4 set3
1) "6"
2) "7"
127.0.0.1:6379> sdiff set4 set3 #集合set4相对于set3多了哪些元素,不同于sdiff set 3 set4
1) "2"
2) "3"
6. sdiffstore 求差集合且存贮,如果再次存贮其他元素时,之前元素会被替代
127.0.0.1:6379> SDIFFSTORE set1 set3 set4 #求出set3相对于set4多出的元素,并存贮在set1中
(integer) 2
127.0.0.1:6379> SMEMBERS set1 #查看存贮的元素
1) "6"
2) "7"
7. sinter 相交集合,求出两个或者多个集合共有的元素
如sinter set3 set4 #求出set3和set4相同的元素。
8.sinterstore 求出交集并且存储,和sdiffstore正好相反
127.0.0.1:6379> sinterstore set6 set3 set4 #求出3和4的交集,并存储在set6中
(integer) 3
127.0.0.1:6379> SMEMBERS set6
1) "1"
2) "4"
3) "5"
9. sunion 求并集,将所有不同的元素组成一个集合
127.0.0.1:6379> SMEMBERS set3
1) "6"
2) "7"
3) "4"
4) "5"
5) "1"
127.0.0.1:6379> SMEMBERS set4
1) "1"
2) "2"
3) "3"
4) "4"
5) "5
127.0.0.1:6379> sunion set3 set4 #列出3和4所有不同元素,并组成一个集合
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
10. sunionstore 求出并集并储存
11. sismember 判断某个元素是否属于某个集合,属于就返回1,不是就返回0
127.0.0.1:6379> SMEMBERS set3
1) "6"
2) "7"
3) "4"
4) "5"
5) "1"
127.0.0.1:6379> sismember set3 6 #查看元素6是否属于集合set3
(integer) 1 #是的话返回1,
127.0.0.1:6379> sismember set3 61e1
(integer) 0 #不是的话返回0
12. srandmember 随机选取某个元素,但和spop不同,不会删除元素
127.0.0.1:6379> SMEMBERS set3
1) "6"
2) "7"
3) "4"
4) "5"
5) "1"
127.0.0.1:6379> srandmember set3 #随机选取,不会删除
"4"
127.0.0.1:6379> srandmember set3
"6"
127.0.0.1:6379> SMEMBERS set3
1) "6"
2) "7"
3) "4"
4) "5"
5) "1"
sorted_set数据类型操作
常用命令
使用场景:
Redis sorted set的使用场景与set类似,区别是
set不是自动有序的
,
而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序
。当你需要一个有序的并且不重复的集合列表,那么可以选择sorted set数据结构,比如twitter 的public timeline可以以发表时间作为score来存储,这样获取时就是自动按时间排好序的。
1.zadd 创建有序集合
zadd zset1 1 aa #创建有序集合zset,其中1是其中aa值得序号,aa是zset的值
127.0.0.1:6379> zadd zset1 1 abc
(integer) 1
127.0.0.1:6379> zadd zset1 10 1abc
(integer) 1
127.0.0.1:6379> zadd zset1 5 aaa
(integer) 1
127.0.0.1:6379> zadd zset1 88 bbb
(integer) 1
127.0.0.1:6379> zadd zset1 888 caimz
(integer) 1
2. zrange 查看集合的元素
zrange zset 0 -1 #按照顺序呢列出集合的元素
3. zrange 可以带上序号withscores
127.0.0.1:6379> ZRANGE zset1 0 -1 withscores #带上分值查看元素
1) "abc"
2) "1"
3) "aaa"
4) "5"
5) "1abc"
6) "10"
7) "bbb"
8) "88"
9) "caimz"
10) "888"
4.zrem删除指定元素
zrem zset abc #删除zset中的abc值
5.zrank 返回元素的索引值,索引值从0开始按照score正向排序
127.0.0.1:6379> ZRANGE zset1 0 -1
1) "aaa"
2) "1abc"
3) "bbb"
4) "caimz"
127.0.0.1:6379> zrank zset1 bbb
(integer) 2
6. zrank 返回元素的索引值,索引值从0开始按照score正向排序,即从上到下依次是0、1、2、3.。。。。。。
127.0.0.1:6379> ZRANGE zset1 0 -1
1) "aaa"
2) "1abc"
3) "bbb"
4) "caimz"
127.0.0.1:6379> zrank zset1 bbb
(integer) 2
7. zrevrank 反序显示所有元素且带分值,从下到上依次是0、1、2.。。。
127.0.0.1:6379> ZRANGE zset1 0 -1
1) "aaa"
2) "1abc"
3) "bbb"
4) "caimz"
127.0.0.1:6379> zrevrank zset1 bbb
(integer) 1
8. zrevrange 反向显示所有元素,和zrange正好相反。
127.0.0.1:6379> zrevrange zset1 0 -1 withscores
1) "caimz"
2) "888"
3) "bbb"
4) "88"
5) "1abc"
6) "10"
7) "aaa"
8) "5"
9. zcard 返回集合中所有元素的个数
127.0.0.1:6379> zcard zset1
(integer) 4
10 .zcout 返回分值按照某范围的元素个数
127.0.0.1:6379> zrange zset 0 -1
1) "1"
2) "2"
3) "10"
4) "6"
5) "8"
6) "12"
127.0.0.1:6379> zcount zset 1 8 #查找score值为1 到8 的个数,即序号是1到8之间有多少元素
(integer) 6
11. zrangebyscore 返回分值按照某范围的元素
127.0.0.1:6379> zrange zset 0 -1
1) "1"
2) "2"
3) "10"
4) "6"
5) "8"
6) "12"
127.0.0.1:6379> zcount zset 1 8
(integer) 6
127.0.0.1:6379> zrangebyscore zset 1 8
1) "1"
2) "2"
3) "10"
4) "6"
5) "8"
6) "12"
12. zremrangebyrank 删除索引值(序号)范围的元素,并按照score正向排序
127.0.0.1:6379> zrange zset 0 -1
1) "1"
2) "2"
3) "10"
4) "6"
5) "8"
6) "12"
127.0.0.1:6379> zremrangebyrank zset 0 2
(integer) 3
127.0.0.1:6379> zrange zset 0 -1
1) "6"
2) "8"
3) "12"
13. zremrangebyscore 删除分值某范围的元素
127.0.0.1:6379> zadd zset 1 1
(integer) 1
127.0.0.1:6379> zadd zset 2 2
(integer) 1
127.0.0.1:6379> zadd zset 3 5
(integer) 1
127.0.0.1:6379> zadd zset 4 2
(integer) 0
127.0.0.1:6379> zadd zset 5 8
(integer) 1
127.0.0.1:6379> zadd zset 7 1
(integer) 0
127.0.0.1:6379> zadd zset 6 9
(integer) 1
127.0.0.1:6379> zrange zset 0 -1
1) "5"
2) "2"
3) "8"
4) "9"
5) "1"
127.0.0.1:6379> zremrangebyscore zset 1 5
(integer) 3
127.0.0.1:6379> zrange zset 0 -1
1) "9"
2) "1"