对于redis
的学习,感谢菜鸟教程提供的优秀资料
随着学习的深入,此文章持续更新…
Redis 是 key – value 型数据库,有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
基本
通过homebrew
安装
brew install redis
通过homebrew
安装Redis Desktop Manager
是一个redis
桌面管理工具
brew cask install rdm
启动redis
/ 关闭redis
redis-server
redis-cli shutdown
进入redis
命令界面 –raw 解决乱码问题
redis-cli --raw
选择数据库 默认数据库为0
SELECT 0 # ok
通过 config 命令查看或设置配置项
config get config_setting_name
# 查看所有配置
config get *
# 设置配置
config set config_setting_name new_config_value
config set loglevel "notice"
config get loglevel
# "notice"
命令
Keys
命令 | 描述 | 返回 |
---|---|---|
Del key | key 存在时删除 key | 删除的数量 |
Exists key | 检查key值是否存在 | 存在1 否则0 |
Expire key | 已秒设置过期时间 | 成功1 否则0 |
Expireat key | unix 时间戳设置过去时间 | 成功1 否则0 |
PEXPIRE key | 以毫秒设置过期时间 | 成功1 否则0 |
KEYS * | 查找所有符合给定模式的 key | 符合查询要求的数组 |
Move key database | 移动key值到其他数据库 | 成功1 否则0 |
PERSIST key | 移除key的过期时间 | 成功1 否则0 |
Pttl key | 以毫秒为单位返回过期时间 | 无key:-2 无过期时间: -1 否则返回时间 |
TTL key | 以秒为单位返回key的过期时间 | 无key:-2 无过期时间: -1 否则返回时间 |
RANDOMKEY | 从当前数据库中随机返回一个 key | 无key返回nil |
RENAME oldkey newkey | 修改 key 的名称 | 成功:ok 失败返回错误 新key存在覆盖新key |
Renamenx oldkey newkey | 仅当 newkey 不存在时,将 key 改名为 newkey | 成功1 否则0 |
TYPE key | 返回 key 所储存的值的类型 | 无key返回none |
String(字符串)
- string可以包含任何数据。比如jpg图片或者序列化的对象
- 一个键最大能存储512MB
命令 | 描述 | 返回 |
---|---|---|
SET key value | 设置key value | 成功后返回ok |
Get key | 获取指定 key 的值 | 无key返回nil |
Getrange key start end | 返回 key 中字符串值的子字符 | 截取的子字符串 |
GETSET key value | 将给定 key 的值设为 value 返回 key 的旧值(old value) | 无key返回nil |
MGET key1 key2 | 获取所有(一个或多个)给定 key 的值 | 一个包含所有给定 key 的值的列表 |
SETEX key time(s) value | 重设key与过期时间 | 成功ok |
SETNX key value | key不存在时设置value | 成功1 失败0 |
STRLEN key | 返回 key的长度 | 无key返回0 |
MSET key1 value1 key2 value2 | 同时设置多个key与value | 总是ok |
MSETNX key1 value1 key2 value2 | 同时设置多个不存在的key与value | 全部成功返回1 否则0 |
PSETEX key time(s) value | 毫秒为单位设置过期时间 | 成功ok |
INCR key | 使key值加一 | newkey,无key初始化为0 再加1 否则返回错误 |
Incrby key int64 | 使key值加num | newkey,无key初始化为0 再加num 否则返回错误 |
Incrbyfloat key float | 同上 浮点数类型 | 同上 |
Decr key | 使key值减一 | 同上 |
Decrby key int64 | 使key值减去num | 同上 |
Append key value | 给key追加value | newkey的长度 无key等于set |
Hash(哈希)
- hash 是一个键值(key=>value)对集合。
- hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
- 每个 hash 可以存储 232 -1 键值对(40多亿)
命令 | 描述 | 返回 |
---|---|---|
Hdel key field1 | 删除一个或多个哈希表字段 | 成功删除的数量 |
Hexists key field1 | 查看指定字段是否存在 | 存在1 否则0 |
HGET key field1 | 返回指定字段的值 | 不存在返回nil |
Hgetall key field1 | 返回整个key | 不存在返回空列表 |
HINCRBY key field1 int64 | 为key 中的指定字段的整数值加上指定增量 | 此字段的新值 |
HINCRBYFLOAT key field1 float | 浮点数版本 | 同上 |
Hkeys key | 获取所有哈希表中的字段 | 不存在返回空列表 |
Hlen key | 获取哈希表中字段的数量 | 不存在返回0 |
Hmget key field1 field2 | 获取所有给定字段的值 | 不存在返回nil |
Hmset key field1 value1 field2 value2 | 同时将多个 field-value (域-值)对设置到 key 中 | 成功返回ok |
Hset key field value | key 中的字段 field 的值设为 value | 新建字段返回1 覆盖返回0 |
Hsetnx key field value | 字段 field 不存在时设置哈希表字段的值 | 成功1 失败0 |
Hvals key | 获取哈希表中所有值 | 不存在返回空列表 |
List(列表)
- Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
- 列表最多可存储 232 – 1 元素 (4294967295, 每个列表可存储40多亿)。
Set(集合)
- 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
- 集合中最大的成员数为 232 – 1(4294967295, 每个集合可存储40多亿个成员)。
Zset(有序集合)
- string类型元素的集合,且不允许重复的成员
- 每个元素都会关联一个double类型的分数,通过分数来为集合中的成员进行从小到大的排序。
- 成员是唯一的,但分数(score)却可以重复
Golang redis 操作
golang
操作redis
,使用redis.v6的一些简单说明
使用
go get gopkg.in/redis.v6
import "gopkg.in/redis.v6"
创建客户端
通过 redis.NewClient 函数即可创建一个 redis 客户端, 这个方法接收一个 redis.Options 对象参数, 通过这个参数, 我们可以配置 redis 相关的属性, 例如 redis 服务器地址, 数据库名, 数据库密码等.
func createClient() *redis.Client {
client := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "",
DB: 0,
})
// 通过 cient.Ping() 来检查是否成功连接到了 redis 服务器
pong, err := client.Ping().Result()
fmt.Println(pong, err)
return client
}
string
set get操作,第三个参数是过期时间, 如果是0, 则表示没有过期时间.
err := client.Set("name", "xys", 0).Err()
val, err := client.Get("name").Result()
这里设置过期时间.
err = client.Set("age", "20", 1 * time.Second).Err()
list
在名称为 fruit 的list尾添加一个值为value的元素
client.RPush("fruit", "apple")
在名称为 fruit 的list头添加一个值为value的 元素
client.LPush("fruit", "banana")
返回名称为 fruit 的list的长度
length, err := client.LLen("fruit").Result()
返回并删除名称为 fruit 的list中的首元素
value, err := client.LPop("fruit").Result()
返回并删除名称为 fruit 的list中的尾元素
value, err = client.RPop("fruit").Result()
set
向 blacklist 中添加元素
client.SAdd("blacklist", "Obama")
向 whitelist 添加元素
client.SAdd("whitelist", "the Elder")
判断元素是否在集合中
isMember, err := client.SIsMember("blacklist", "Bush").Result()
求交集, 即既在黑名单中, 又在白名单中的元素
names, err := client.SInter("blacklist", "whitelist").Result()
获取指定集合的所有元素
all, err := client.SMembers("blacklist").Result()
hash
向名称为 user_xys 的 hash 中添加元素 name
client.HSet("user_xys", "name", "xys")
批量地向名称为 user_test 的 hash 中添加元素 name 和 age
client.HMSet("user_test", map[string]string{"name": "test", "age":"20"})
单独获取名为 user_test 的 age 字段
age, err := client.HGet("user_test", "age").Result()
批量获取名为 user_test 的 hash 中的指定字段的值.
fields, err := client.HMGet("user_test", "name", "age").Result()
获取名为 user_xys 的 hash 中的字段个数
length, err := client.HLen("user_xys").Result()
删除名为 user_test 的 age 字段
client.HDel("user_test", "age")