常用数据类型

15 分钟阅读 1061 字 + 1741 词
bash
#数据库的切换
select  index   #index是数据库的编号

#查看key值
keys *

#删除key
del  key

#清空当前数据库
flushdb

#清空所有数据库
flushall

#将某个key值移动到另外数据库
move  key  db  #db目标数据库的下标

#设置key值的过期时间,
expire key second   #second过期的时间

#查看剩余的有效时间,-1表示永不过期  -2表示已经过期
ttl  key
5、常用数据类型
类型 简介 特性 场景
String(字符串) 二进制安全 可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512M
Hash(字典) 键值对集合,即编程语言中的Map类型 适合存储对象,并且可以像数据库中update一个属性一样只修改某一项属性值(Memcached中需要取出整个字符串反序列化成对象修改完再序列化存回去) 存储、读取、修改用户属性
List(列表) 链表(双向链表) 增删快,提供了操作某一段元素的API 1,最新消息排行等功能(比如朋友圈的时间线) 2,消息队列
Set(集合) 哈希表实现,元素不重复 1、添加、删除、查找的复杂度都是O(1) 2、为集合提供了求交集、并集、差集等操作 1、共同好友 2、利用唯一性,统计访问网站的所有独立ip 3、好友推荐时,根据tag求交集,大于某个阈值就可以推荐
Sorted Set(有序集合) 将Set中的元素增加一个权重参数score,元素按score有序排列 数据插入集合时,已经进行天然排序 1、排行榜 2、带权重的消息队列
1、string数据类型
string是二进制安全的,可以存放任何数据。
bash
#设置与获取
set key  value
get key


#设置与获取多个key
mset k1 value1 k2 value2...
mget k1 k2 ...

#获取子串
GETRANGE key start  end  #start开始的下标的位置0开始,end结束的下标的位置  -1代表倒数第一个

#设置字符串
SETRANGE k2 offset value  #从offset的位置开始,字符串被设置为value值

#设置与获取同时执行的命令
getset key newValue  #获取oldValue,并且设置key的newValue

#设置key的新值为value,同时设置过期时间为seconds
setex key seconds value

#对key中的value是数值类型的,可以进行累加
incr key  #每次增加单位1
incrby  key  num  #增加num大小

SETNX key value
#含义(setnx = SET if Not eXists):
#将 key 的值设为 value ,当且仅当 key 不存在。
#若给定的 key 已经存在,则 SETNX 不做任何动作。
#SETNX 是『SET if Not eXists』(如果不存在,则 SET)的简写。
#返回值:设置成功,返回 1 。设置失败,返回 0 。
#同时设置setnx和过期时间
set key value ex 100 nx

127.0.0.1:6379> set k1 hello\\0wuhan  #不会截断\0后面的字符串
OK
127.0.0.1:6379> get k1
"hello\\\\0wuhan"
127.0.0.1:6379> set k2 hello\0hhh
OK
127.0.0.1:6379> get k2
"hello\\0hhh"
127.0.0.1:6379> 
2、list数据类型
双向链表。
bash
#list只有左边与右边的区别
lpush/rpush key value1 value2
lpop/rpop key

#遍历的方法
lrange  key  start  stop  #获取指定范围的元素,start就是从下标为0开始

#redis中的list支持下标访问(STL中的list也是双向链表,但是不支持下标访问)
lset key index newValue   #index就是下标的含义。

#获取指定下标的值
lindex mylist index  #index还是下标的含义

#删除count个value
lrem mylist count  value

#修剪命令,将修剪下标范围以外的数据删除掉,只留下下标范围内的数据
LTRIM mylist 0 5

#在某个元素的前后增加一个元素
LINSERT key before/after value newValue
LINSERT mylist before 4 1000
3、set数据类型
元素 是唯一的 ,但是 没有顺序 ,底层使用的 哈希表 。( 与STL中的set不一样
bash
#添加元素
sadd myset value1 value2 value3 ...

scard key #获取set的成员数
#遍历
smembers key

#随机选取几个元素
srandmember  key num #随机选择num个元素,但是元素还在集合set中
spop key  num  #随机删除num个元素

srem key member 移除

sismember key member #判断member元素是否是集合key的成员

smove source destination member #将member元素从source集合移动到destination集合

srem key value #删除集合中值为value的元素

#取差集/交集/并集
SDIFF/SINTER/SUNION key1 key2
4、sort set(zset)数据类型
可以给每个元素 添加double类型的分数(权重) ,根据 分数进行排序
bash
#添加元素
zadd key  double1 value1 double2 value2 double value3 ....
zadd myzset 10 h 30 j 20 w

zcard key #获取zset的成员数

#计算在有序集合中指定区间分数的成员数目  
ZCOUNT myzset -inf +inf  #-inf,负无穷   +inf,正无穷

zrevrange key start stop #从大道小返回索引区间 (递减) 0 -1  -1代表最后一个成员

ZRANGE key start stop [WITHSCORES]  #通过索引区间返回有序集合指定区间内的成员
ZRANGEBYLEX key min max [LIMIT offset count]  #通过字典区间返回有序集合的成员(分数要一致)
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] #通过分数返回有序集合指定区间内的成员
ZSCORE key member #返回有序集中,成员的分数值
ZREVRANGEBYSCORE key max min [WITHSCORES] #返回有序集中指定分数区间内的成员,分数从高到低排序
5、hash数据类型
等价于是 STL的map>
#添加元素与获取元素
hset key field value
hget key field

#一次添加或者获取多个元素
hmset key    field1  value1   field2 value2 ...
hmset people name    h3rwau   sex   man   age 90

hmget key field1 field2 ...
hmget people name sex age