


Apakah penyelesaian bagi Java untuk mengendalikan redis dan menetapkan tamat tempoh pada awal pagi keesokan harinya?
Tetapan redis operasi Java tamat tempoh pada awal pagi keesokan harinya
Senario
Apabila menanyakan data, saya menghadapi masalah bahawa data perlu ditetapkan untuk tamat tempoh dalam redis seterusnya hari, tetapi redis mempunyai Tiada API yang sepadan, jadi saya perlu menyelesaikannya sendiri
Idea
Kira perbezaan masa antara awal pagi hari berikutnya dan masa semasa, dan tetapkan perbezaan masa sebagai masa tamat redis, kita boleh mencapai Kesan yang diingini
kod
/** * 计算第二天凌晨与当前时间的时间差秒数 * @param * @return java.lang.Long * @author shy * @date 2021/3/12 18:10 */ public static Long getNowToNextDaySeconds() { Calendar cal = Calendar.getInstance(); cal.add(Calendar.DAY_OF_YEAR, 1); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.MILLISECOND, 0); return (cal.getTimeInMillis() - System.currentTimeMillis()) / 1000; }
mendapat perbezaan masa, dan selebihnya pada dasarnya tiada masalah.
Dilampirkan ialah kelas alat Redis:
/** * 操作redis * @author shy * @date 2020/12/10 10:01 */ @Service public class RedisService { @Autowired private StringRedisTemplate stringRedisTemplate; @Autowired private RedisTemplate<String, Object> redisTemplate; /** * 判断String类型key是否存在 * * @param key * @return * @author shy * @date 2018年11月13日 下午1:40:37 */ public boolean hasStringKey(String key) { if (StringUtils.isBlank(key)) { throw new EmptyParameterException(); } return stringRedisTemplate.opsForValue().getOperations().hasKey(key); } /** * 判断String类型key是否存在 * * @param key * @return * @author shy * @date 2018年11月13日 下午1:43:51 */ public boolean nonStringKey(String key) { return !hasStringKey(key); } /** * 设置String类型key,String类型value,过期时间timeout,TimeUnit * * @param key * @param value * @param timeout * @param timeUnit * @author shy * @date 2018年12月10日13:53:38 */ public void setStringKey(String key, String value, Long timeout, TimeUnit timeUnit) { if (StringUtils.isBlank(key) || Objects.isNull(timeout)) { throw new EmptyParameterException(); } stringRedisTemplate.opsForValue().set(key, value, timeout, timeUnit); } public void setStringKey(String key, String value) { if (StringUtils.isBlank(key)) { throw new EmptyParameterException(); } stringRedisTemplate.opsForValue().set(key, value); } /** * 获取String类型value * * @param key * @return * @author shy * @date 2018年11月12日 下午7:09:31 */ public String getStringValue(String key) { if (StringUtils.isBlank(key)) { throw new EmptyParameterException(); } return stringRedisTemplate.opsForValue().get(key); } /** * 获取Key的过期时间 * * @param key * @return * @author shy * @date 2019年4月25日17:28:36 */ public Long getExpire(String key) { if (StringUtils.isBlank(key)) { throw new EmptyParameterException(); } return stringRedisTemplate.getExpire(key); } /** * 设置Key的过期时间 * * @param key * @return * @author shy * @date 2019年4月25日17:28:36 */ public Boolean setExpire(String key,Long timeout, TimeUnit timeUnit) { if (StringUtils.isBlank(key)) { throw new EmptyParameterException(); } return stringRedisTemplate.expire(key, timeout, timeUnit); } /** * value自增+n * @param key * @return * @author shy * @date 2019年4月8日15:54:30 */ public Long setIncrementValue(String key) { if (StringUtils.isBlank(key)) { throw new EmptyParameterException(); } return stringRedisTemplate.opsForValue().increment(key, 1L); } /** * 设置String类型key,Object类型value,过期时间timeout * * @param key * @param value * @param timeout * @author shy * @date 2018年12月10日13:54:07 */ public void setObjectKey(String key, Object value, Long timeout,TimeUnit time) { if (StringUtils.isBlank(key) || Objects.isNull(timeout)) { throw new EmptyParameterException(); } redisTemplate.opsForValue().set(key, value, timeout, time); } public void setObjectKey(String key, Object value) { if (StringUtils.isBlank(key)) { throw new EmptyParameterException(); } redisTemplate.opsForValue().set(key, value); } /** * 获取Object类型value * * @param key * @param clazz * @return * @author shy * @date 2019年11月6日10:01:30 */ @SuppressWarnings("unchecked") public <T> T getObjectValue(String key, Class<T> clazz) { if (StringUtils.isBlank(key)) { return null; } return (T) redisTemplate.opsForValue().get(key); } /** * 移除单个String类型key * * @param key * @author shy * @date 2018年11月13日 上午10:42:01 */ public void removeSingleStringKey(String key) { if (StringUtils.isBlank(key)) { throw new EmptyParameterException(); } stringRedisTemplate.opsForValue().getOperations().delete(key); } /** * 移除Collection<String>类型keys * * @param keys * @author shy * @date 2018年11月13日 下午3:15:16 */ public void removeMultiStringKey(Collection<String> keys) { if (CollectionUtils.isNotEmpty(keys)) { stringRedisTemplate.opsForValue().getOperations().delete(keys); } } /** * redis key 模糊查询 * @author shy * @date 2021年1月4日 上午11:21:45 * @param key * @return */ public Set<String> queryStringKeys(String key) { return redisTemplate.keys(key + "*"); } }
Pengenalan fungsi dasar tamat tempoh Redis
Apabila kami menggunakan redis, kami biasanya menetapkan masa tamat tempoh, sebanyak tentu ada juga yang tidak menetapkan masa luput iaitu tidak akan luput.
Apabila kami menetapkan masa tamat tempoh, bagaimana redis menentukan sama ada ia telah tamat tempoh dan strategi yang digunakan untuk memadamkannya.
Tetapkan masa tamat tempoh
Apabila kami menetapkan kunci, kami boleh memberikan masa tamat tempoh, contohnya, nyatakan bahawa kunci ini hanya boleh bertahan selama satu jam tetapkan kumpulan kunci untuk bertahan selama satu jam, kemudian bagaimana redis memadamkan kumpulan kunci ini satu jam kemudian?
Jawapannya ialah: pemadaman biasa + pemadaman malas.
Apa yang dipanggil pemadaman biasa bermaksud bahawa secara lalai, redis memilih beberapa kekunci secara rawak dengan masa tamat tempoh ditetapkan setiap 100ms, menyemak sama ada ia telah tamat tempoh dan memadamkannya jika ia tamat tempoh. Melintasi semua kunci dengan masa tamat tempoh setiap 100ms akan menyebabkan penurunan prestasi yang ketara, sila ambil perhatian. Redis sebenarnya akan memilih beberapa kekunci secara rawak untuk menyemak dan memadam setiap 100 milisaat.
Tetapi masalahnya ialah pemadaman biasa boleh menyebabkan banyak kunci yang telah tamat tempoh tidak dipadamkan apabila masanya tamat, jadi anda perlu memadamnya dengan malas, maksudnya, apabila anda mendapat kunci, redis akan menyemak untuk melihat sama ada kunci ini ditetapkan Masa tamat tempoh Jadi adakah ia telah tamat tempoh? Jika ia tamat tempoh, ia akan dipadamkan.
Dengan menggabungkan dua kaedah di atas, ia dijamin bahawa kunci yang telah tamat tempoh akan dimatikan. Semua kunci tamat tempoh tidak akan dipadamkan secara automatik apabila masa tamat tempoh dicapai, jadi penggunaan memori tidak akan berkurangan selepas tamat tempoh.
Tetapi sebenarnya, ini masih menjadi masalah Jika banyak kunci tamat tempoh terlepas oleh pemadaman biasa, dan kemudian ia tidak disemak dalam masa dan pemadaman malas dilakukan, ia akan menyebabkan sejumlah besar tamat tempoh. kunci untuk terkumpul dalam ingatan dan menggunakan memori redis , bagaimana untuk menangani keadaan ini?
Jawapannya ialah: gunakan mekanisme penghapusan ingatan.
Penghapusan Memori
Jika redis mengambil terlalu banyak ingatan, beberapa penyingkiran akan dilakukan pada masa ini. Terdapat beberapa strategi seperti berikut:
: Apabila memori tidak mencukupi untuk menampung data yang baru ditulis, ralat akan dilaporkan untuk data yang baru ditulis Senario sebenar ini biasanya tidak digunakan.
noeviction
: Apabila memori tidak mencukupi untuk menampung data yang baru ditulis, dalam ruang kekunci, keluarkan kunci yang paling kurang digunakan (ini adalah yang paling biasa digunakan)
allkeys-lru
: Apabila memori tidak mencukupi untuk menampung data yang baru ditulis, kunci dialih keluar secara rawak daripada ruang kunci Ini biasanya kurang digunakan.
allkeys-random
: Apabila memori tidak mencukupi untuk menampung data yang baru ditulis, dalam ruang kekunci dengan set masa tamat, kunci yang paling kurang digunakan baru-baru ini dialih keluar.
volatile-lru
: Apabila memori tidak mencukupi untuk menampung data yang baru ditulis, kunci dialih keluar secara rawak daripada ruang kunci dengan masa tamat tempoh ditetapkan.
volatile-random
: Apabila memori tidak mencukupi untuk menampung data yang baru ditulis, dalam ruang kekunci dengan masa tamat tempoh ditetapkan, kunci dengan masa tamat tempoh lebih awal akan dialih keluar terlebih dahulu.
volatile-ttl
Atas ialah kandungan terperinci Apakah penyelesaian bagi Java untuk mengendalikan redis dan menetapkan tamat tempoh pada awal pagi keesokan harinya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Pakej lanjutan Laravel yang penting untuk 2024 termasuk: 1 Laraveldebrugbar, yang digunakan untuk memantau dan debug kod; 2. Laraveltelescope, menyediakan pemantauan aplikasi terperinci; 3. Laravelhorizon, menguruskan tugas -tugas redis. Pek pengembangan ini dapat meningkatkan kecekapan pembangunan dan prestasi aplikasi.

Langkah -langkah untuk membina persekitaran Laravel pada sistem operasi yang berbeza adalah seperti berikut: 1.Windows: Gunakan XAMPP untuk memasang PHP dan komposer, konfigurasikan pembolehubah persekitaran, dan pasang Laravel. 2.MAC: Gunakan homebrew untuk memasang PHP dan komposer dan pasang Laravel. 3.Linux: Gunakan Ubuntu untuk mengemas kini sistem, pasang PHP dan komposer, dan pasang Laravel. Perintah dan laluan khusus setiap sistem adalah berbeza, tetapi langkah -langkah teras adalah konsisten untuk memastikan pembinaan lancar persekitaran pembangunan Laravel.

JavaPlaysasignificantroleiniotduetoitsplatformindant.1) itAllowscodetobewrittenceandondrariousdevices.2) Java'secosystemprovidesuseFullibrariesforiot.3)

Java sesuai untuk membangunkan aplikasi web cross-server. 1) Falsafah "Tulis Sekali, Di Mana -mana" Java membuat kodnya dijalankan di mana -mana platform yang menyokong JVM. 2) Java mempunyai ekosistem yang kaya, termasuk alat seperti Spring dan Hibernate, untuk memudahkan proses pembangunan. 3) Java melaksanakan dengan baik dalam prestasi dan keselamatan, menyediakan pengurusan memori yang cekap dan jaminan keselamatan yang kuat.

Bagaimana untuk menetapkan kesan putaran elemen dalam HTML? Ia boleh dicapai menggunakan CSS dan JavaScript. 1. Harta transformasi CSS digunakan untuk putaran statik, seperti berputar (45DEG). 2. JavaScript boleh mengawal putaran secara dinamik, yang dilaksanakan dengan mengubah atribut Transform.

Java'splatformindependenceAllowsApplicationStoranyoperatingsystemwithajvm.1) singlecodebase: writeandcompileonceforallplatforms.2) Easyupdates: UpdateTecodeForsimulteUseUlyDeployment.3)

Redisisanopen-Source, In-MenoryDataStructureStoreusedasadatabase, Cache, andMessageBroker, ExcellingInspeedandversatility.Iswidelyededforcaching, Real-Timeanalytics, sessionManagement, danSleaderboardsDuetoitssupportorvariousdatastructures

Reka bentuk pembangunan web adalah bidang kerjaya yang menjanjikan. Walau bagaimanapun, industri ini juga menghadapi banyak cabaran. Memandangkan lebih banyak perniagaan dan jenama beralih ke pasaran dalam talian, pemaju web mempunyai peluang untuk menunjukkan kemahiran mereka dan berjaya dalam kerjaya mereka. Walau bagaimanapun, apabila permintaan untuk pembangunan web terus berkembang, bilangan pemaju juga semakin meningkat, mengakibatkan persaingan yang semakin sengit. Tetapi ia menarik bahawa jika anda mempunyai bakat dan kehendak, anda sentiasa dapat mencari cara baru untuk membuat reka bentuk dan idea yang unik. Sebagai pemaju web, anda mungkin perlu terus mencari alat dan sumber baru. Alat dan sumber baru ini bukan sahaja menjadikan pekerjaan anda lebih mudah, tetapi juga meningkatkan kualiti kerja anda, dengan itu membantu anda memenangi lebih banyak perniagaan dan pelanggan. Trend pembangunan web sentiasa berubah.
