目录
什么是redis这里就不多做介绍了,要清楚他是一个基于内存的数据库
这里介绍linux下redis的环境安装和配置,我的系统是ubuntu
我们先更新一下软件
sudo apt update
下面安装redis服务器
sudo apt-get install redis-server
通过上面命令安装完毕后会自动启动redis,可以通过ps去验证
ps -ef | grep redis
可以发现redis默认工作在6379端口上,这些都能在redis.conf配置文件里面改
或者你手动启动redis
sudo service redis-server start
登录redis的客户端去验证一下,安好没
redis-cli
输入ping命令,他会返回给你一个pong,说明安装成功
下面看看redis的一些基本操作
redis常用的数据类型有字符串,列表,哈希表,集合,有序集合这五种,当然新版本多了很多比如bitmap、HyperLogLog、Stream这些。redis里面存储数据都是以kv形式存的
redis启动默认有16个数据库0-15编号(搞不懂大佬们怎么都喜欢16这个数字,stl分配器的自由链表也是16个,0-15编号) 。我们启动默认访问的就是0号数据库
我们可以选择想使用的数据库
select index
还有一些常见的命令操作
dbsize 获取当前数据库键值对数量 flushdb 清空当前数据库 flushall 清空所有数据库 save 将数据保存至磁盘 bgsave 将数据异步保存至磁盘(后台)(默认每2秒自动执行一次) lastsave 获取最后一次保存的unix时间 做个简单的演示,mset能一次保存多个kv对
除了上面的,还有一些通用的数据操作
注意*号的操作范围是当前数据库
keys 格式 | 查看符合指定格式key, *为通配符 |
exists key1 [key2...] | 查看是否存在一至多个指定的key,返回的是存在key的个数 |
type key | 按key查看value的数据类型 |
del key1[key2...] | 按key删除一至多个键值对 |
rename key1 key2 | 重命名key1 ,如果key2已经存在,其值会被覆盖 |
renamenx key1 key2 | key2不存在时重命名key1 |
move key 数据库编号 | 按key将一个键值对移动到指定数据库 |
copy key1 key2 | 将key1的值拷贝给key2 |
下面我挑几个做个简单的示例
我们记录了三组kv对
查看一下key值
看看都存在几个key ,,例子中kk这个是不存在的
将k1重命名为kk3,但是kk3已经存在了,重命名之后老的kk3的值就会被覆盖
把10号数据库的kk3移动到5号数据库,那么10的数据就会-1,5号数据库数据+1。。。但是如果5号本来就有kk3这key值,那么移动会失败
字符串:
字符串的存储就像上面演示这种kv形式
key | value |
下面看看字符串类型的一些指令
set key value | 添加或修改一个键值对 |
get key | 按key获取value |
mset key1 value1 [key2 value2..] | 添加或修改一至多个键值对 |
mget key1 [key2..] | 按key获取一至多个value |
append key value | 在原有value后面追加内容 |
strlen key | 查看字符串长度 |
getrange key startindex endindex | 获取范围内[startindex,endindex]的子串 index从0开始,,-n表示倒数第n个字符 |
set key vaule nx setnx key value | 仅在key不存在时候,添加一个键值对 |
set key value xx | 仅在key已存在,修改一个键值对 |
set key value get getset key value | 修改一个键值对并返回原值,原值不存在则返回nil |
msetnx key1 value1 [key1 value2..] | 批量版setnx |
如果kv对的value存储的内容是整数,则由如下操作命令
incr key | key不存在,创建一个key vaule等于1的键值对;key存在,使value增长1 |
incrby key 数值 | 按key使value增长具体数值 |
incrbyfloat key 小数值 | 按key使小数value增长具体小数值 |
decr key | 按key使value减1 |
decrby key 数值 | 按key使value减小具体数值 |
还可以生成临时的键值对
生存时间time to live,缩写ttl,指键值对距离被删除的剩余秒数
如果重新set,生存时间将被重置
这些操作可以支持各种数据类型
expire key 秒数 | 设定一个生存时间 |
ttl key | 查看生存时间剩余秒数 key不存在返回-2,永久键值对返回-1 |
pexpire key 毫秒数 | 毫秒版expire |
pttl key | 毫秒版 ttl |
persist key | 持久化(取消生存时间) |
这些操作指支持字符串类型
set kry value ex 秒数 setex key 秒数 vlaue | set+expire |
set key value px 毫秒数 psetex key 毫秒数 value | set+pexpire |
set key vaue exat unix秒 | 设置一个unix秒的过期时间 |
set key value pxat unix 毫秒 | 设置一个unix毫秒的过期时间 |
set key value keepttl | set时不重置ttl |
列表
存储形式长这样,key有序
key1 | value0 | value1 | .. |
key2 | value0 | value1 | ... |
.... |
列表相关操作:
rpush key value0 [value1..] | (key不存在自动创建key)在列表右侧插入一个或多个值 |
lpush key value0 [value1..] | (key不存在自动创建key)在列表左侧插入一个或多个值 |
rpop key [数量] | 从列表右侧弹出(指定数量)的值 全部弹出后key也会被自动删除 |
lpop key [数量] | 从列表左侧弹出(指定数量)的值 全部弹出后key也会被自动删除 |
rpushx key value0[value1..] | 仅当key存在时,在列表右侧插入一个或多个值 |
lpushx key value0[value1..] | 仅当key存在时,在列表左侧插入一个或多个值 |
lset key index value | 修改指定位置的值 |
linsert key before /after 定位value value | 在定位value 前/后插入一个值 |
lindex key index | 按索引查看值 |
lrange key startindex endindex | 查看指定范围的值 |
llen key | 查看队列长度 |
lrem key 数量 value | 删除指定值 数量为正,表示从前面开始删,为负则相反 |
ltrim key startindex endindex | 将列表修剪到给定范围 |
注意:索引都是从0开始,,-n表示倒数第n个
列表里常用的操作rpush,lpush就相当于尾插和头插这样子,对于rpop,lpop也是如此,弹出操作后面只写key 不写弹出几个就回车默认就弹出一个value
散列表(哈希)
存储方式如下:键--字段--值,,不同键里面的字段可以重复,,也就是说k1里的字段可以有1 2 3,k2里也可以有1 2 3,,同样的按键排序了
key1 | field1 | value1 |
field2 | value2 | |
... | .. | |
key2 | field1 | value1 |
field2 | value2 | |
... | .. |
基本的操作命令:
hset key field1 value1 【field2 value2 ..】 | 添加或修改一个键与一至多个字段和值 |
hget key field | 按key和field获取一对value |
hmget key field1 【filed2..】 | 按key和field获取一至多对value |
hgetall key | 按key获取全部的field和value |
hdel key field1【field2..】 | 删除一至多对field-value |
hsetnx key field value | 仅在field不存在时添加一对field --value |
hkeys key | 查看一个散列表中所有field |
hvals key | 查看一个散列表中所有value |
hlen key | 统计一个散列表中有多少对field-value |
hexists key field | 查看一个field是否存在 |
同字符串类型,哈希表对于value内容是数值的也有操作
hincrby key field 整数值 | 按key和field使value增长 整数值 |
hincrbyfloat key field 小数值 | 按key和field使value增长 小数值 |