Redis 键(key)
Redis 键命令用于管理 redis 的键。
基本命令:
/**
1、有时候会有中文乱码。要在 redis-cli 后面加上 --raw
2、flushdb清除当前数据库信息,flushall清除所有数据库信息
3、select 2 表示选择第二个数据库,默认一共16个数据库
4、keys * 查看本数据库所有信息
*/
对redis中的key 操作
从上图可以看到我们存入一个字符串和map值,但是我们查看key时,我们只能看到key的名字,不能看到值,那么redis默认把key为string,我们可以对其key经行设置
删除key
del key
更改key
rename key newkey
设置过期时间
expire name 10 //设置name这个key10秒后消失
ttl name //查看这个值还有多久才能消失
persist name //取消倒计时
判断key
exists jiang //判断jiang这个key是否存在,不存在返回0
获得key的类型
127.0.0.1:6379[2]> type user
hash
查看redis中,选择数据库的中所有key
127.0.0.1:6379[2]> scan 0
1) "0"
2) 1) "user"
2) "age"
3) "name"
4) "sex"
5) "add"
String
基本使用
- 添加
127.0.0.1:6379> set name taxing//一次添加单个数据
127.0.0.1:6379> mset age 23 add china //一次添加多个参数
127.0.0.1:6379> setnx name jiangxing//如果这个name键不存时才添加
127.0.0.1:6379> setex name 60 jiang //添加name并设置过期时间及其数据
- 查看
127.0.0.1:6379> get name //查看name这个键的值
127.0.0.1:6379> mget name age add//一次性查看多个键的值
127.0.0.1:6379> strlen age //查看这个值的长度
127.0.0.1:6379> getrange name 0 -1 //查看name这个值,从多少索引到多少索引的值0 -1表示全部查看
例如:
127.0.0.1:6379> getrange name 0 -1
taxing
127.0.0.1:6379> getrange name 0 1
ta
- 更改
127.0.0.1:6379> set naem jiang//如果不存在就创建,否则重命名
127.0.0.1:6379> rename name jiangxing//重命名
- 删除
del name //删除这个键
- 步长
127.0.0.1:6379> set view 0//设置值为0
127.0.0.1:6379> incr view //每次加1
127.0.0.1:6379> incrby view 20//指定每次加多少
127.0.0.1:6379> decr view//每次减1
127.0.0.1:6379> decrby view 20//指定每次减多少
使用场景
计数器、统计多单位的数量、粉丝数、对象缓存存储
Hash
redis中的hash类似于java中的hashmap,里面存储了大量的键值对,底层实现和java的hashmap一样,也是使用数组+链表的结构。
但是hash里面的值都只能是字符串型,而且他们的rehash方式是不一样的,redis的hash并不是一次性将全部的数据进行rehash,而是采用渐进式的方式,也就是说会存在两个相同的结构,等到就得数据全部迁移完成,才会将旧的数据结构删除,使用新的代替。**
基本使用
-
添加
127.0.0.1:6379> hset user k1 v1 k2 va//设置值 127.0.0.1:6379> hsetnx user k1 v1 //只有这个值不存在时才存入 127.0.0.1:6379> hmset user k1 v1 k2 v2//一次多设置几个键值对,
-
查看
127.0.0.1:6379> hget user k1//获取存储在哈希表中指定字段的值。 127.0.0.1:6379> hkeys user//获取指定哈希表中的字段 127.0.0.1:6379> hvals user//获取哈希表中所有值。 127.0.0.1:6379> hmget user k1 k2//获取所有给定字段的值 127.0.0.1:6379> hscan user 0//遍历user这个值中的所有数据 127.0.0.1:6379> hgetall user//获取在哈希表中指定 key 的所有字段和值 127.0.0.1:6379> hlen user//获取哈希表中字段的数量 127.0.0.1:6379> hexists user k1//判断user里面的k1字段是否存在
-
更改
127.0.0.1:6379> hset user k1 kk1//如果不存在就创建,否则为从更改数据
-
删除
127.0.0.1:6379> del user //删除一个或多个哈希表字段
-
步长
127.0.0.1:6379> hincrby user view 20//指定user中的view的值增加20 127.0.0.1:6379> hincrby user view 20//指定user中的view的值减少20
使用场景
hash变更的数据 user name age,尤其是是用户信息之类的,经常变动的信息! hash 更适合于对象的存储,String更加适合字符串存储!购物车
List
redis的链表是一个双向链表,左右两边都可以插入和去除数据,其实redis底层存储的不仅仅是简单的链表结构,而是称之为一个快速列表的结构,在列表元素较少的时候,redis会使用一块连续的内存存储,这个结构是ziplist,成为压缩列表。当数据内容较多的情况下才会改成quicklist,因为普通列表存储一个内容需要再存储两个额外的指针,很浪费空间,所以在数据量大的时候,才将多个压缩列表使用双向列表链接起来,组成快速列表。
基本使用
- 右边进左边出(先进先出)-队列
添加列表
rpush datas 1 2 3
获取列表长度
llen datas
左边取出数据,列表中不再有取出的数据
rpop datas
1234
lpop datas
123456
- 右边进右边出(先进后出)-栈
添加列表
rpush datas 1 2 4
右边取出数据,列表中不再有取出的数据
rpop datas
1234
- 查询元素
#获取指定位置的元素(遍历所有元素,底层采用链表结构)
lindex datas -1[-1代表倒数第一个]
查询指定区间元素,以下取出所有数据
lrange datas 0 -1
截取指定区间的元素
ltrim datas 0 2
123456
-
删除数据
删除那个数据 ,可能存在多个相同的值,所以在删除时要指定删除几个
lrem student 1 jiangxing
替换数据,如果不存在列表我们去更新就会报错 ,如果存在,更新当前下标的值
lset user 2 jiangxing
使用场景
消息队列、排行榜
set(集合)
set集合相当于java中的hashset,它内部是无序的,唯一的,它内部相当于一个特殊的字段,字典中所有的value都是一个NULL,当集合中最后一个元素被移除的时候,内存被回收。set可以存储活动中中奖用户的ID,因为有去重功能,可以保证一个用户不会中奖两次
基本使用
-
添加数据
sadd records r1 r2 1
-
获取所有数据
查看所有数据 smembers records 1 随机抽出一个数据 srandmember student
-
判断元素是否存在
sismember records r1 1
-
获取集合长度
scard records 1
-
移除集合
srem number 4 //指定移除
- 随机移除指定个数
spop data 1
- 交、并、差
127.0.0.1:6379> sadd data a b c//data添加数据a、b、c 3 127.0.0.1:6379> sadd data1 b c d e f//data添加数据b、c、d、e、f 5 127.0.0.1:6379> sinter data data1 //查看交集 共同好友就可以这样实现 c b 127.0.0.1:6379> sunion data data1//查看并集 f c a e d b 127.0.0.1:6379> sdiff data data1//查看差集 a 127.0.0.1:6379>
应用场景
好友、随机推荐、黑白名单
zset(有序列表)
zset其实就是sortedset和hashmap的结合体,它具备set的唯一性。又具备map的key,value性质,但是这个value存储的是他的分值,用来排序。他的内部采用一个“跳跃列表的数据结构”。zset可以用来存储粉丝列表,value值是用户ID,score是关注时间,我们可以对粉丝列表按照关注时间进行排序。
基本使用
-
添加元素
zadd grades 100 zhangsan 99 lisi 1
-
获取指定范围内的元素
#默认按照score升序 zrange grades 0 -1 降序排序 zrevrange grades 0 -1 1234
-
获取指定元素的score
zscore grades zhangsan 1
-
获取元素的排名
zrank grades lisi 1
-
获取两个分数区间的数据
zrangebyscore grades -inf(负无穷大) inf(正无穷大) widthscores 1
-
删除指定元素
zrem grades zhangsan 1
应用场景
set 排序 存储班级成绩表,工资表排序!普通消息,1, 重要消息 2,带权重进行判断!排行榜应用实现,取Top N 测试!