3.7 Redis 默认16个库
1)Redis默认创建16个库,每个库对应一个下标,从0开始.
通过客户端连接后默认进入到0 号库,推荐只使用0号库.
127.0.0.1:6379>
16个是因为配置文件中是这样的 [aa@hadoop102 redis]$ vim redis.conf
2)使用命令 select 库的下标来切换数据库
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]>
第4章 Redis的五大数据类型
4.1 帮助手册
http://redisdoc.com/
4.2 redis键(key)
1)查看当前库的所有键
127.0.0.1:6379> keys *
2)判断某个键是否存在
127.0.0.1:6379> exists <key>
3)查看键对应的value的类型
127.0.0.1:6379> type <key>
4)删除某个键
127.0.0.1:6379> del <key>
5)设置过期时间
127.0.0.1:6379> expire <key> <second>
6)查看过期时间,-1表示永不过期,-2表示已过期
127.0.0.1:6379> ttl <key>
7)查看当前库中key的数量
127.0.0.1:6379> dbsize
8)清空当前库
127.0.0.1:6379> flushdb
9)清空所有库
127.0.0.1:6379> flushall
4.3 String
4.3.1 特点
(1)String是Redis最基本的类型,适合保存单值类型,即一个key对应一个value(2)String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
(3)一个Redis中字符串value最多可以是512M
4.3.2 常用操作
1)添加键值对
127.0.0.1:6379> set <key> <value>
2)获取键的值
127.0.0.1:6379> get <key>
3)将给定的追加到原值的末尾
127.0.0.1:6379> append <key> <value>
4)获取值的长度
127.0.0.1:6379> strlen <key>
5)当key不存在时设置key的值
127.0.0.1:6379> setnx <key> <value>
6)将key中存储的数字值增1 必须是数字才可以(点赞功能!就是这个!)
127.0.0.1:6379> incr <key>
7)将key中存储的数字值减1
127.0.0.1:6379> decr <key>
8)将key中存储的数字值按照指定步长增 (会员点击加10分….)
127.0.0.1:6379> incrby <key> <步长>
9)将key中存储的数字值按照指定步长减
127.0.0.1:6379> decrby <key> <步长>
10)同时添加一个或者多个key
127.0.0.1:6379> mset <k1> <v1> <k2> <v2>
11)同时获取一个或者多个key的值 m代表多建操作
127.0.0.1:6379> mget <k1> <k2> <k3>
12)同时添加一个或者多个key,当且仅当所有给定的key都不存在
127.0.0.1:6379> msetnx <k1> <v1> <k2> <v2>
13)获取值的子串 C语言索引从0开始!
127.0.0.1:6379> getrange <key> <start> <end>
14)从指定的开始位置覆盖旧值
127.0.0.1:6379> setrange <key> <start> <value>
15)同时设置值和过期时间 手机验证码就是这个 set expire
127.0.0.1:6379> setex <key> <seconds> <value>
16)设置新值的同时获取旧值
127.0.0.1:6379> getset <key> <value>
4.4 List
4.4.1 特点
(1)单键多值
(2)Redis List是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
(3)它的底层实际是个双向链表(Java中list单向),对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差
表示整个集合:[o.-1] 或 [-1,-6] 但是随着加入新的值,会发生变化,比如-6变为-7…而[0,-1]是不变的。
4.4.2 常用操作
1)从左边插入一个或多个值
127.0.0.1:6379> lpush <key> <element…>
2)从右边插入一个或多个值
127.0.0.1:6379> rpush <key> <element…>
3)从左边删除一个值(值在键在,值光键亡)
127.0.0.1:6379> lpop <key>
4)从右边删除一个值(值在键在,值光键亡)
127.0.0.1:6379> rpop <key>
5)从key1列表右边删除一个值,插入到key2列表左边
127.0.0.1:6379> rpoplpush <key1> <key2>
6)按照索引下标范围获取元素(从左到右)
127.0.0.1:6379> lrange <key> <start> <stop>
7)按照索引下标获取元素(从左到右)
127.0.0.1:6379> lindex <key> <index>
8)获取列表长度
127.0.0.1:6379> llen <key>
9)在指定的前面或者后面插入
127.0.0.1:6379> linsert <key> before|after <pivot> <element>
10) 从左边删除count个指定的value
127.0.0.1:6379> lrem <key> <count> <element>
4.5 Set
4.5.1 特点
(1)set中的元素是无序不重复的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,
(2)Redis的Set是string类型的无序集合。它底层其实是一个value为null的hash表,所以添加,删除,查找的复杂度都是O(1)。
4.5.2 常用操作
1)将一个或者多个member元素加入到集合中,已经存在的member将被忽略
127.0.0.1:6379> sadd <key> <member…>
2)取出集合的所有值
127.0.0.1:6379> smemebers <key>
3)判断集合是否包含指定的member,包含返回1,不包含返回0
127.0.0.1:6379> sismember <key> <member>
4)返回集合的元素个数
127.0.0.1:6379> scard <key>
5)从集合中删除指定的元素
127.0.0.1:6379> srem <key> <member…>
6)随机从集合中删除一个值,会从集合中返回删除的值
127.0.0.1:6379> spop <key>
7)随机从集合中取出n个值,不会从集合中删除 随机抽取n个幸运观众
127.0.0.1:6379> srandmember <key> <count>
8)返回多个集合的交集元素
127.0.0.1:6379> sinter <key…>
9)返回多个集合的并集元素
127.0.0.1:6379> sunion <key…>
10)返回多个集合的差集元素
127.0.0.1:6379> sdiff <key…>
4.6 Hash
4.6.1 特点
(1)Redis hash是一个键值对集合
(2)Redis hash的值是由多个field和value组成的映射表
(3)类似Java里面的Map<String,Object>
4.6.2 分析一个问题: 现有一个User 对象,在Redis中如何存?
1)第一种方案: 用户ID为key ,VALUE为JavaBean序列化后的字符串
2)第二种方案: 用户ID+属性名作为key, 属性值作为Value.
3)第三种方案: 通过 key(用户ID) + field(属性标签) 就可以操作对应属性数据了,既不需要重复存储数据,也不会带来序列化和并发修改控制的问题
4.6.3 常用操作
1)给集合中添加指定的 -
127.0.0.1:6379> hset <key> [<field> <value> …]
2)给集合中添加指定的 - ,当指定的field不存在时
127.0.0.1:6379> hsetnx <key> <field> <value>
3)取出集合中指定field的value
127.0.0.1:6379> hget <key> <field>
4)判断集合中是否存在指定的field
127.0.0.1:6379> hexists <key> <field>
5)列出集合中所有的field
127.0.0.1:6379> hkeys <key>
6)列出集合中所有的value
127.0.0.1:6379> hvals <key>
7)给集合中指定filed的value值增加increment
127.0.0.1:6379> hincrby <key> <field> <increment>
Hsetnx只能加一个属性
4.7 zset (sorted set)
4.7.1 特点
(1)Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的每个成员都关联了一个评分(score) ,这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了 。
(2)因为元素是有序的, 所以你也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的智能列表。
4.7.2 常用操作
1)往集合中添加指定的 member 及score
127.0.0.1:6379> zadd <key> [<score> <member> … ]
2)从集合中取出指定下标范围的数据,正序取
127.0.0.1:6379> zrange <key> <start> <stop> [WITHSCORES]
3)从集合中取出指定下标范围的数据,倒序取
127.0.0.1:6379> zrevrange <key> <start> <stop> [WITHSCORES]
4)从集合中取出指定score范围的数据,默认从小到大
127.0.0.1:6379> zrangebyscore <key> <min> <max> [WITHSCORES]
5)从集合中取出指定score范围的数据,从大到小
127.0.0.1:6379> zrevrangebyscore <key> <max> <min> [WITHSCORES]
6)给集合中指定member的score增加increment
127.0.0.1:6379> zincrby <key> <increment> <member>
7)删除集合中指定的member
127.0.0.1:6379> zrem <key> <member…>
8)统计指定score范围的元素个数
127.0.0.1:6379> zcount <key> <min> <max>
9)返回集合中指定member的排名,排名从0开始
127.0.0.1:6379> zrank <key> <member>
操作命令不区分大小写