
Redis 基础操作
1、Redis的数据结构
Redis
是一种基于内存管理的数据库,并且提供一定的持久化功能,它是一种键值(key - -value)类型的非关系型数据库,和 hash
的索引方式一样,使用键作为作为索引就可以找到当前进行缓存的数据,并且将数据返回给程序的调用者。
当前的 Redis
支持 6种 数据类型,分别是字符串(String
),列表(List
),集合(Set
),哈希结构(Hash
),有序集合(Zset
)和基数计算(HyperLogLog
)。
2、常用指令
对于指令的介绍在 http://doc.redisfans.com/index.html 中有着明确的定义,这里对简单常用的指令进行简单的回顾使用。
2.1 String 基本操作
简单赋值:set key value
127.0.0.1:6379> set name beordie
ok
简单取值:get key
127.0.0.1:6379> get nameshell
"beordie"
一次设置多个键值:mset key value [key value...]
127.0.0.1:6379> mset name lisi age 13
OK
获取多个键值:get key [key...]
127.0.0.1:6379> mget name age
1) "lisi"
2) "13"
删除键值:del key
127.0.0.1:6379> del name
(integer) 1
2.2 字符串数字自增自减
当存储的字符串是整数时,Redis
提供了一个实用的命令 INCR | DECR,其作用是让当前键值递增递减,并返回计算后的值,偏移的值可以进行指定。
递增数字:incr key
127.0.0.1:6379> incr age
(integer) 14
递增指定偏移量:incrby key increment
127.0.0.1:6379> incrby age 2
(integer) 16
递减数字:decr key
127.0.0.1:6379> decr age
(integer) 15
递减指定偏移量: decrby key increment
127.0.0.1:6379> decrby age 2
(integer) 13
2.3 Hash 散列
提供字段和字段值的映射,字段值 只支持 字符串类型,不支持其他数据类,相当于对象格式的存储(key
表示对象、filed
表示字段、value
表示属性值)。
简单赋值:hset key filed value
127.0.0.1:6379> hset user name lisi
(integer) 1
127.0.0.1:6379> hset user name zhangsan
(integer) 0
hset
命令不区分插入和更新操作,靠返回值来判别,插入返回 1 ,更新返回 2 。
简单取值:hget key filed
127.0.0.1:6379> hget user name
"zhangsan"
多个字段赋值:hmset key filed value [filed value...]
127.0.0.1:6379> hmset user1 name lisi age 14
OK
多个字段取值:hmget key filed [filed...]
127.0.0.1:6379> hmget user1 name age
1) "lisi"
2) "14"
获取所有的字段和值:hgetall key
127.0.0.1:6379> hgetall user
1) "name"
2) "zhangsan"
删除字段:hdel key field [field...]
127.0.0.1:6379> hdel user name
(integer) 1
2.4 List 列表
Redis
的列表是采用双向链表来实现的,具有较高的更改能力,但是查询速度较慢,元素的插入是有序的。
左边增加元素:lpush key value [value...]
127.0.0.1:6379> lpush label a1 a2
(integer) 2
左边删除元素:lpop key
127.0.0.1:6379> lpop label
"a1"
右边增加元素:rpush key value [value...]
127.0.0.1:6379> rpush label a3
(integer) 1
右边删除元素:rpop key
127.0.0.1:6379> rpop label
"a3"
获取列表中元素的个数:llen key
127.0.0.1:6379> llen label
(integer) 1
查看区间元素:lrange key start stop
127.0.0.1:6379> lrange label 0 1
1) "a2"
区间范围是闭区间,索引从零开始计算,也可以是负数,表示从尾部开始,-1 就代表最后一个元素
2.5 Set 集合
增加元素:sadd key member [member...]
127.0.0.1:6379[2]> sadd user zhangsan
(integer) 1
127.0.0.1:6379[2]> sadd user lisi
(integer) 1
127.0.0.1:6379[2]> sadd user lisi
(integer) 0
删除元素:srem key member [member...]
127.0.0.1:6379[2]> srem user lisi
(integer) 1
查看所有元素:smembers key
127.0.0.1:6379[2]> smembers user
1) "zhangsan"
2) "lisi"
查看是否包含键:sismember key member
127.0.0.1:6379[2]> sismember user lisi
(integer) 0
127.0.0.1:6379[2]> sismember user zhangsan
(integer) 1
2.6 Zset 集合
SortedSet
又叫 Zset
,是有序集合,元素可进行排序但是唯一,和一般集合的区别就在于为每个元素增加了一个分数属性,可以通过这个分数来进行排序。
增加元素:zadd key score member [score member...],如果已经存在了一个同名元素那就会替换掉当前的分数值,保持原元素的数据。
127.0.0.1:6379[2]> zadd object 10 english 12 math
(integer) 2
按照排序区间进行数据的返回:zrevrange key start stop [whitscores],后面的指定参数表示是否将元素对应的分数一起返回
127.0.0.1:6379[2]> zrevrange object 0 3
1) "math"
2) "english"
获取元素的分数:zscore key member
127.0.0.1:6379[2]> zscore object math
"12"
删除元素:zrem key member [member...]
127.0.0.1:6379[2]> zrem object math
(integer) 1
3、HyoperLogLog
HyoperLogLog
是一种使用随机化的算法,以少量内存提供集合中唯一元素数量的近似值,简单的说就是输入一个数据集合,返回集合中唯一数据的近似数量。
概念:
基数:集合中不同元素的个数,例如{‘apple’,‘orange’,‘apple’}的基数为2
估算值:算法给出的数据不是精确的,波动的幅度可控。
3.1 优点
HyoperLogLog
优点是既是输入元素的集合数量或者是体积非常的大,计算基数所需要的空间总是固定的,并且消耗量较小。
在 Redis
里面,每个 HyoperLogLog
键只需要花费 12KB 的内存就可以计算接近 2^64 个元素集合的基数,和其他的存储数据的基数计算方法有着鲜明的内存消耗对比。
由于 HyoperLogLog
低内存计算的特点,因此不会对元素进行存储,不能像集合类型那样进行元素的返回,只会根据输入元素来计算基数。
3.2 相关命令
添加元素:pfadd key element [element…]
127.0.0.1:6379> pfadd fruit apple orange apple
(integer) 1
计算基数:pfcount key [key...]
127.0.0.1:6379> pfcount fruit
(integer) 2
合并集合:pfmerge destkey sourcekey [sourcekey]
127.0.0.1:6379> pfmerge food fruit
OK
4、其他命令
指定条件查询获取键:keys pattern
# *号表示匹配所有的条件
127.0.0.1:6379> keys *
1) "food"
2) "fruit"
查看是否包含一个键:exists key
127.0.0.1:6379> exists food
(integer) 1
删除键:del key
127.0.0.1:6379> del fruit
(integer) 1
重命名键:rename oldkey newkey
127.0.0.1:6379> rename food fruit
OK
返回值的类型:type key
127.0.0.1:6379> type fruit
string
设置生存周期:expire key seconds
127.0.0.1:6379> expire fruit 120
(integer) 1
查看生存时间剩余:ttl key
127.0.0.1:6379> ttl fruit
(integer) 82
清除时间:persist key
127.0.0.1:6379> persist fruit
(integer) 1
获取配置节点信息:info
删除当前数据库的所有键:flushdb
删除所有数据库的所有键:flushall
5、数据库切换
一个 Redis
实例包含多个数据库,键值在多个数据库之间是不可见的,在客户端可以选定使用哪一个数据库。和常用的 MySQL
数据库的切换不一样,Redis
的数据库数量是在配置文件中进行预先定义的,默认是 16 个数据库,最多也只提供 16 个,下标从 0 开始计数。
数据库切换:select index
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
- 感谢你赐予我前进的力量