redis五大数据结构
redis是一种高级的key:value存储系统,其中的value支持五种数据类型
字符串 strings
散列 hashes
列表 lists
集合 sets
有序集合 sorted sets
常用redis的基本命令
keys * 查看所有key
type key 查看key类型
expire key seconds 过期时间
ttl key 查看key过期剩余时间 -2表示key以及不存在了
persist 取消key的过期时间 -1表示key存在,没有过期时间
exists key 判断key存在 存在返回1否则0
del keys 删除key 可以删除多个
dbsize 计算key的数量
string类型的操作
通过set设置的就是string类型的key-value
set 设置key
set name 'yu'
get 获取key
get name
append 追加string
append name ' dsb' #追加key的string
mset 设置多个键值对
mset user1 'alex' user2 'xiaopeiqi' #设置多个键值对
mget 获取多个键值对
mget user1 user2 name #获取多个value
del 删除key
del name #删除key
incr 递增+1
incr num #给num string 加一 INCR 命令将字符串值解析成整型,将其加一,最后将结果保存为新的字符串值,可以用作计数器
decr 递减-1
decr num
list类型
lpush 从列表左边插入
lpush duilie 'alex' 'peiqi' 'ritian' #新建一个duilie,从左边放入三个元素
rpush 从列表右边插入
rpush duilie 'chaoge' #从右边插入chaoge
llen 查看列表长度
llen duilie #查看duilie长度
lrange 获取一定长度的元素
lrange duilie 0 -1 #查看所有元素
ltrim 截取一定长度的列表
ltrim duilie 0 2 #截取队列的值,从索引0取到2,删除其余的元素
lpushx/rpushx key存在则添加,否则不做处理
lpushx duilie2 'dsb' #key存在则添加 dsb元素,key不存在则不作处理
lpop 删除最左边的一个元素
rpop 删除最右边的一个元素
sets集合类型
redis的集合,是一种无需的集合,集合中的元素没有先后顺序
sadd/srem 添加/删除 元素
sismember 判断是否为set的一个元素
smembers 返回集合所有的成员
sdiff 返回一个集合和其他集合的差异
sinter 返回几个集合的交集
sunion 返回几个集合的并集
sadd zoo wupeiqi yuanhao alex #添加集合,有三个元素,不加引号就当做字符串处理
smembers zoo #查看集合zoo成员
srem zoo wupeiqi #删除zoo里面的alex
sismember zoo wupeiqi #返回改是否是zoo的成员信息,不存在返回0,存在返回1
sadd zoo wupeiqi #再把wupeiqi加入zoo
smembers zoo #查看zoo成员
sadd zoo2 wupeiqi mjj #添加新集合zoo2
sdiff zoo zoo2 #找出集合zoo中有的,而zoo2中没有的元素
sdiff zoo2 zoo #找出zoo2中有,而zoo没有的元素
sinter zoo zoo1 #找出zoo和zoo1的交集,都有的元素
sunion zoo zoo1 #找出zoo和zoo1的并集,所有的不重复的元素
有序集合
zset的每一个成员都有一个分数与之对应,并且分数是可以重复的。有序集合的增删改由于有啦排序,执行效率就是非常快速的,即便是访问集合中间的数据也是非常高效的。
用来保存需要排序的数据,例如排行榜,成绩,工资等。
利用有序集合的排序,排序学生的成绩
127.0.0.1:6379> ZADD mid_test 70 "alex"
(integer) 1
127.0.0.1:6379> ZADD mid_test 80 "wusir"
(integer) 1
127.0.0.1:6379> ZADD mid_test 99 "yuyu"
排行榜,zreverange 倒叙
127.0.0.1:6379> ZREVRANGE mid_test 0 -1 withscores
1) "yuyu"
2) "99"
3) "wusir"
4) "80"
5) "xiaofneg"
6) "75"
7) "alex"
8) "70"
zrange正序
127.0.0.1:6379> ZRANGE mid_test 0 -1 withscores
1) "alex"
2) "70"
3) "xiaofneg"
4) "75"
5) "wusir"
6) "80"
7) "yuyu"
8) "99"
返回有序集合mid_test的基数
127.0.0.1:6379> ZCARD mid_test
(integer) 3
返回成员的score值
127.0.0.1:6379> ZSCORE mid_test alex
"70"
zrank返回有序集合中,成员的排名。默认按score,从小到大排序。
127.0.0.1:6379> ZRANGE mid_test 0 -1 withscores
1) "alex"
2) "70"
3) "wusir"
4) "80"
5) "yuyu"
6) "99"
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379> ZRANK mid_test wusir
(integer) 1
127.0.0.1:6379> ZRANK mid_test yuyu
(integer) 2
哈希数据结构
哈希结构就是 k1 -> k1 : v1 如同字典 套字典 { k1 : { k2: v2 } } ,取出v2 必须 k1取出k2
hashes即哈希。哈希是从redis-2.0.0版本之后才有的数据结构。
hashes存的是字符串和字符串值之间的映射,比如一个用户要存储其全名、姓氏、年龄等等,就很适合使用哈希。
hset 设置散列值
hget 获取散列值
hmset 设置多对散列值
hmget 获取多对散列值
hsetnx 如果散列已经存在,则不设置(防止覆盖key)
hkeys 返回所有keys
hvals 返回所有values
hlen 返回散列包含域(field)的数量
hdel 删除散列指定的域(field)
hexists 判断是否存在
redis hash是一个string类型的field和value的映射表
语法 hset key field value
hset news1 title "first news title" #设置第一条新闻 news的id为1,添加数据title的值是"first news title"
hset news1 content "news content" #添加一个conntent内容
hget news1 title #获取news:1的标题
hget news1 content #获取news的内容
hmget news1 title content #获取多对news:1的 值
hmset news2 title "second news title" content "second Contents2" #设置第二条新闻news:2 多个field
hmget news2 title content #获取news:2的多个值
hkeys news1 #获取新闻news:1的所有key
hvals news1 #获取新闻news:1的所有值
hlen news1 #获取新闻news:1的长度
hdel news1 title #删除新闻news:1的title
hlen news1 #看下新闻news:1的长度
hexists news1 title #判断新闻1中是否有title,不存在返回0,存在返回1