首页 > 数据库 >Redis 数据库

Redis 数据库

时间:2023-04-08 21:11:28浏览次数:28  
标签:__ obj name Redis 数据库 redis key

Redis 数据库

客户端和服务端命令

服务器端
  • 服务器端的命令为redis-server
  • 可以使⽤help查看帮助⽂档redis-server --help
  • 服务器操作
    • ps aux | grep redis 查看redis服务器进程
    • sudo kill -9 pid 杀死redis服务器
    • sudo redis-server /etc/redis/redis.conf指定加载的配置文件
客户端
  • 客户端的命令为redis-cli

  • 可以使⽤help查看帮助⽂档

    • redis-cli --help
  • 连接redis

    • redis-cli
  • 运⾏测试命令

    • ping
  • 切换数据库

  • 数据库没有名称,默认有16个,通过0-15来标识,连接redis默认选择第一个数据库

    • select 10

数据操作

在学习数据操作之前,我们需要先了解Redis的数据结构。Redis是key-value的数据结构,每条数据都是一个键值对。键的类型是字符串,并且键不能重复。

  • Reids中的数据类型:

    • 字符串string
    • 哈希hash
    • 列表list
    • 集合set
    • 有序集合zset

首先我们先学习字符串类型。字符串类型是 Redis 中最为基础的数据存储类型,它在 Redis 中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。在Redis中字符串类型的Value最多可以容纳的数据长度是512M。

普通键值对保存

如果设置的键不存在则为添加,如果设置的键已经存在则修改

set key value

案例:设置键为name值为tuling的数据

set name tuling

img

设置键值及过期时间,以秒为单位。
setex key seconds value

案例:设置键为name值为安娜过期时间为3秒的数据

setex name 3 安娜

img

设置多个键值
mset key1 value1 key2 value2 ...

案例:设置键为name值为双双,键为age值为18,键为gender值为

mset name 双双 age 18 gender 女

img

根据键获取值,如果不存在返回nil
get key

案例:获取键name的值

get name

img

根据多个键获取多个值
mget key1 key2 key3 ...

案例:获取键为nameagegender的值

mget name age gender

img

键命令

案例一:查看所有键

// 语法
keys pattern

// 查看所有键
keys *

img

案例二:查看名称中包含n的键

keys n*

img

案例三:判断键是否存在,如果存在返回1,否则返回0

// 语法
exists key

// 判断键 name address 是否存在
exists name
exists address

img

案例四:查看键对应的value类型

// 语法
type key

// 判断age对应的值的类型
type age

img

案例五:删除键值对

// 语法
del key1 key2 ...

// 删除age与gender
del age gender

img

hash类型

hash用于存储对象,对象的结构为属性、值,值的类型为string

设置单个属性
// 语法
hset key field value

// 设置user的属性为name,name对应的值为tuling
hset user name tuling

img

设置多个属性
// 语法
hmset key field1 value1 field2 value2 ...

// 设置键为py_stu的字段name对应的值为tuling 字段age对应的值为10
hmset py_stu name tuling age 10

img

获取指定的键所有的字段
// 语法
hkeys key

// 获取键py_stu中的所有字段
hkeys py_stu

img

获取一个字段的值
// 语法
hget key field

// 获取py_stu中的name字段所对应的值
hget py_stu name

img

获取指定的多个字段的值
// 语法
hmget key field1 field2 ...

// 获取py_stu中的name、age的值
hmget py_stu name age

img

获取所有字段的值
// 语法
hvals key
 
// 获取py_stu中的所有字段的值
hvals py_stu

img

删除字段,字段对应的值会被一起删除
// 语法
hdel key field1 field2 ...

// 删除py_stu中的age字段
hdel py_stu age

img

如果想要删除整个hash数据,则使用del命令

// 示例
del py_stu

img

list类型

从列表左侧插入数据
// 语法
lpush key value1 value2 ...

// 从键为name_1的列表左侧插入数据a、b、c
lpush name_1 a b c

img

在列表右侧插入数据
// 语法
rpush key value1 value2 ...

// 从键为name_2的列表的右侧插入数据a、b、c
rpush name_2 a b c

img

数据获取只有左获取
// 语法
lrange key start stop

// 获取列表name_1、name_2中的所有元素
lrange name_1 0 -1
lrange name_2 0 -1

/*
	start、stop为元素的索引
		1. 索引从左侧开始,第一个元素为0
    2. 索引可以是负数,表示从尾部开始计数,如-1表示最后一个元素
*/

img

删除指定元素
/*
	根据索引count删除对应的值
   1. count > 0: 从左往右删除
   2. count < 0: 从右往左删除
   3. count = 0: 删除所有
*/

// 语法
lrem key count value

// 创建测试列表并左插入三组a、b
lpush test_list a b a b a b

// 查看列表数据
lrange test_list 0 -1

// 从test_list列表中的右侧开始删除2个b字母
lrem test_list -2 b

// 查看删除效果
lrange test_list 0 -1

img

set类型

集合类型是无序的,并且集合中的元素类型为string。在集合中的元素具有唯一性,不能重复。

集合类型没有修改操作。

添加元素
// 语法
sadd key member1 member2 ...

// 向键user_name_1的集合中添加元素:zhangsan、lisi、wangwu
sadd user_name_1 zhangsan lisi wangwu

img

获取元素
// 获取所有元素 
smembers key

// 获取键user_name_1集合中所有的元素
smembers user_name_1

img

删除元素
// 删除指定元素
srem key

// 删除指定键user_name_1中的元素:wangwu
srem user_name_1 wangwu

img

zset类型

zset类型是一个有序集合,元素为string类型。和无序集合一样,元素具有唯一性,不能重复,并没有修改操作。

在有序集合中的每个元素都会关联一个double类型score,表示权重,通过权重将元素从小到大排序。

添加数据
// 语法
zadd key socre1 member1 socre2 member2 ...

// 向键user_name_2集合中添加元素: lisi、wangwu、zhaoliu、zhangsan 权重分别为4 5 6 3
zadd user_name_2 4 lisi 5 wangwu 6 zhaoliu 3 zhangsan

img

获取数据
// 语法
zrange key start stop

/*
	start、stop为元素的索引
  	1. 索引从左侧开始,第一个元素索引为0
    2. 索引可以是负数,表示从尾部开始计数,如-1表示最后一个元素
*/

// 获取键user_name_2集合中的所有元素
zrange user_name_2 0 -1

img

删除数据
// 语法
zrem key member1 member2 ...

// 删除user_name_2集合中的元素: zhangsan
zrem user_name_2 zhangsan

img

Python操作Redis

首先大家需要通过pip下载redis连接库

下列代码为redis连接示例:

from redis import Redis

'''
host: redis服务端ip
port: redis服务端端口
db: 仓库号
'''
redis_obj = Redis(host='localhost', port=6379, db=0)
准备工作

创建代码目录文件夹,在文件夹中创建redis_string.py文件

from redis import Redis


if __name__ == "__main__":
    try:
        # host port db等参数是可选项
        redis_obj = Redis()
    except Exception as e:
        print(e)
添加数据

使用set方法添加键值对,如果添加成功返回True,否则返回False

from redis import Redis


if __name__ == "__main__":
    try:
        # host port db等参数是可选项
        redis_obj = Redis()
        # 添加数据
        result = redis_obj.set('name', '安娜')
        # 如果添加成功则返回True
        print(result)
    except Exception as e:
        print(e)
获取数据

使用get方法获取数据,如果键存在返回对应的值,否则返回None

from redis import Redis


if __name__ == "__main__":
    try:
        # host port db等参数是可选项
        redis_obj = Redis()
        # 添加数据
        # result = redis_obj.set('name', '安娜')

        # 获取数据
        result = redis_obj.get('name')
        print(result)
    except Exception as e:
        print(e)
修改数据

使用set方法进行修改,如果键存在则进行修改,否则创建新数据

from redis import Redis


if __name__ == "__main__":
    try:
        # host port db等参数是可选项
        redis_obj = Redis()
        # 添加数据
        # result = redis_obj.set('name', '安娜')

        # 获取数据
        # result = redis_obj.get('name')

        # 数据修改
        redis_obj.set('name', '双双')
        result = redis_obj.get('name')
        print(result)
    except Exception as e:
        print(e)
删除数据

使用delete方法删除键值对,如果删除成功则返回受影响的键的数量,否则返回0

from redis import Redis


if __name__ == "__main__":
    try:
        # host port db等参数是可选项
        redis_obj = Redis()

        result = redis_obj.delete('name')
        print(result)
    except Exception as e:
        print(e)
获取键

使用keys方法获取键,可以使用正则表达式

from redis import Redis


if __name__ == "__main__":
    try:
        # host port db等参数是可选项
        redis_obj = Redis()

        result = redis_obj.keys()
        print(result)
    except Exception as e:
        print(e)

标签:__,obj,name,Redis,数据库,redis,key
From: https://www.cnblogs.com/irponies-python/p/17299239.html

相关文章

  • Mysql数据库基础(3)
    一、数据库的备份与还原1、备份的目的做灾难恢复:对损坏的数据进行恢复和还原需求改变:因需求改变而需要把数据还原到改变以前测试(测试新功能是否可用)2、备份命令(1)cmd命令行示例:mysqldump-uusername-ppassworddatabase>D:\backup.sql;执行完后如下:(2)SQLyog ......
  • COMP3311 PostgreSQL 数据库写法
    COMP331123T1Assignment2Python,PostgreSQL,psycopg2DatabaseSystemsLastupdated:Thursday6thApril9:06amMostrecentchangesareshowninred...olderchangesareshowninbrown.[AssignmentSpec][DatabaseDesign][Examples][Testing][Submitting][F......
  • JDBC-拓展-数据库连接池
    数据库连接池·是个容器,负责分配,管理数据库连接(Connection)好处:资源重用,提升系统的响应速度避免数据库连接遗漏实现:标准接口:DateSourse功能:获取链接ConnectiongetConnection();比较好的数据库连接池:Druid(德鲁伊)使用步骤:1.导入jar包druid-1.1.12.jar2.定义配置文件3......
  • opengauss数据库启动模式
    一、概述gs_ctl-M-M后面需要跟SERVERMODE参数,表示在启动时指定数据库的启动模式。SERVERMODEare:primarydatabasesystemrunasaprimaryserver,sendxlogtostandbyserverstandbydatabasesystemrunasastandbyserver,receivexlogfrom......
  • 数据库应用2023-04-08
    msqllike_vs%InMySQL,theunderscore(_)andpercentsign(%)arewildcardsusedinLIKEexpressionsforpatternmatching.Theunderscorematchesanysinglecharacter,whilethepercentsignmatchesanysequenceofzeroormorecharacters.Forexa......
  • 20230408---pg_dump: [归档 (db)] 与数据库 "xxx" 联接失败: 致命错误: 对用户"postg
    pg_dump:[归档(db)]与数据库"wpfc"联接失败:致命错误:  对用户"postgres"的对等认证失败 不修改pg_hba.conf的情况下进入postgres用户执行 cd/homemkdirpostgreschown-Rpostgres:postgres/home/postgres/chmod760/home/postgres/supostgrespg_dump-U......
  • Redis 源码解析之通用双向链表(adlist)
    Redis源码解析之通用双向链表(adlist)概述Redis源码中广泛使用adlist(Agenericdoublylinkedlist),作为一种通用的双向链表,用于简单的数据集合操作。adlist提供了基本的增删改查能力,并支持用户自定义深拷贝、释放和匹配操作来维护数据集合中的泛化数据value。adlist的数......
  • redis内存配置调优
    内存优化配置maxmemory1610612736maxmemory-policyallkeys-lru作用这两个参数对Redis的内存管理非常重要,可以帮助Redis避免因为内存占用过多而导致性能下降或运行崩溃的问题。maxmemory参数可以控制Redis实例的内存上限,防止Redis使用过多内存而导致操作系统的OOM(Out-Of-Memory)杀......
  • Mysql_无法删除数据库的处理方法
    问题现象使用Navicat删除数据库一直转圈定位问题执行 SHOWPROCESSLIST;  提示元数据无法被锁定执行  select*frominformation_schema.innodb_trx\G; 发现有进程一直处于运行中解决方法kill进程id 重新查看没有 Waiting进程,showdatabases; 发现库已被......
  • redis——缓存双写一致性问题
    缓存双写一致性如果redis中有数据 需要和数据库中的值相同如果redis中无数据数据库中的值是最新值,且准备回写redis缓存按照操作分只读缓存读写缓存同步直写策略写数据库后也同步写redis缓存,缓存中的数据和数据中的一致对于读写缓存来说,要想保证......